Let’s EncryptでSANs対応のドメイン認証をとる

このサイトは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というファイルが生成されており、適切に設定すると有効化されます。

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments