Trong phần này chúng ta tạo web server và lấy chứng chỉ Letsencrypt.
Bài giảng tương ứng là Creating a TLS encryption key and certificate
TLS cũng là SSL.
Certificate sẽ được dùng ở 3 nơi:
- Giao diện của webmail
- Postfix (để chứng thực trong quá trình giao tiếp SMTP với người dùng)
- Dovecot (để chứng thực trong quá trình giao tiếp IMAP)
Giả sử đã đặt hostname cho RPi (thí dụ bằng raspi-config) và đang SSH vào RPi bằng quyền root.
Webserver cho http
hostname=$(hostname -f)
mkdir -f /var/www/$hostname
chown www-data:www-data /var/www/$hostname
## Cấu hình website http ##
cat > /etc/apache2/sites-available/${hostname}-http.conf <<EOT
<VirtualHost *:80>
ServerName $hostname
DocumentRoot /var/www/${hostname}
## Chuẩn bị redirect về https ##
RewriteEngine On
RewriteCond %{REQUEST_URI} !.well-known/acme-challenge
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L]
</VirtualHost>
EOT
ln -s /etc/apache2/sites-available/${hostname}-http.conf /etc/apache2/sites-enabled/
a2ensite ${hostname}-http
a2enmod rewrite
Lấy chứng chỉ LetsEncrypt
## Tạo chứng chỉ letsencrypt ##
certbot certonly --webroot --webroot-path /var/www/${hostname} -d $hostname
## Định kỳ renew ##
echo ‘post-hook = systemctl restart postfix ; systemctl restart dovecot ; systemctl restart apache2’ > /etc/letsencrypt/cli.ini
Thêm https
## Cấu hình website https ##
cat > /etc/apache2/sites-available/${hostname}-https.conf <<EOT
<VirtualHost *:443>
ServerName $hostname
DocumentRoot /var/www/${hostname}
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/${hostname}/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/${hostname}/privkey.pem
</VirtualHost>
EOT
ln -s /etc/apache2/sites-available/${hostname}-https.conf /etc/apache2/sites-enabled/
a2enmod ssl
a2ensite ${hostname}-https
## Khởi động lại apache2 ##
systemctl restart apache2
Chuyển hướng http sang https
Việc chuyển hướng đã được chuẩn bị trong phần tạo website http
Chú thích
Sau này chúng ta tạo 3 website:
- Quản trị CSDL: https://mx.example.org/adminer
- Quản trị mail server: https://mx.example.org/mailadmin
- Webmail: https://mx.example.org/webmail
Nếu cấu hình mail server Apache2 đàng sau Nginx reverse proxy thì vẫn cần chứng chỉ SSL cho domain ${hostname} trên cả Apache2 server và Nginx server, nhưng không cần khai báo https trên mail server Apache2