このサイトはGoGetSSLでドメイン認証をとりましたが、費用を掛けないのであればLet’s Encryptを利用する方法もあります。
参考にしたのはLet’s EncryptのSSL証明書で、安全なウェブサイトを公開|さくらのナレッジ。
certbotをインストールしてSSL証明書を発行
FreeBSD用にはpkgでバイナリパッケージが用意されているので、nginx用のプラグインと合わせてインストールします。
# pkg install py39-certbot py39-certbot-nginx
Debian9の場合はこんな感じ。
apt install certbot apache2-ssl
実行ファイルはcertbot。certonlyコマンドを使って、-wに続けて対象ディレクトリと-dに続けてドメイン名を指定します。メールアドレスを訊かれたあとライセンス内容を承諾すると、SSL証明書が発行されます。
certbot certonly -w /usr/local/www/sample/ -d www.example.com -d example.com
ドメイン名は複数回指定することでSANs対応の証明書を発行することができます。無事SSL証明書が発行されると、FreeBSDであれば/usr/local/etc/letsencrypt/live/www.example.com/の下に証明書ファイルが生成されます。
nginxの設定
443番のhttpsポートに対してssl_certificateとssl_certificate_keyをそれぞれ設定します。それからhttp接続されたリクエストをhttpsにリダイレクトさせるため、80番のhttpポートに対してreturn 301を設定します。
server {
listen 80;
server_name .example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /usr/local/etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/www.example.com/privkey.pem;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /usr/local/etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/www.example.com/privkey.pem;
location / {
root /usr/local/www/sample;
index index.html index.htm;
}
}
Apacheの設定(Debian編)
Debianでは明示的にmod_sslをインストールする必要がありました。
apt install mod_ssl
sslの設定は/etc/apache2/mods-available/ssl.confにあるはずなので、これを有効化するために/etc/apache2/mods-enabled/にリンクを張ります。.loadファイルも忘れずに。
ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load
Debianのバーチャルホスト設定は/etc/apache2/sites-available/default-ssl.confでおこないます。有効化するためには/etc/apache2/sites-enabled/にリンクを張ります。
証明書の更新
最後にcrontabに証明書の更新設定を入れておきましょう。
0 0 25 * * /usr/local/bin/certbot renew
最近のLet’s EncryptはPeriodicで毎週更新をトライするようです。crontabではなく/etc/periodic.confで更新設定してもいいかもしれません。/usr/local/etc/periodic/weekly/500.certbot-3.9というファイルが生成されており、適切に設定すると有効化されます。