Let's Encryptで手軽にSSL証明書導入

こんにちは

インフラチームの李です。今後共よろしくお願い致します。


クインテットではたくさんのお客様のウェブサイトを管理しています。

サイトの数が増えてくるとSSL証明書の更新費用だけでも莫大な金額になってしまいます。

サービスをロリポップやAWSにホスティングしていれば無料SSL証明書が使えますが、

自社サイトや開発環境などではなかなかサイトを移すまでは行かないんですね。


その場合手軽に使えるのがLet's Encryptの無料SSL証明書です。

制限事項から構築まで簡単に説明していきますのでこの機会に是非使ってみて下さい。

 ❍ 覚えておくこと

  • インストールはセルフで!
  • 有効期限は3ヶ月で、3ヶ月に一度更新が必要、しかし1ヶ月未満残っていないとだめ。
  • 同じドメインを7日間内に5回以上発行すると発行制限に引っかかり、発行できなくなる。
  • 設置する際はウェブサーバの再起動が必要で瞬断あることを覚えておきましょう。

といった制限事項があります。

❍ インストール手順

  • OSはAmazon Linux系、Apache環境でテストした内容です。
  • また、CentOS5系ではオープンソースの「dehydrated」というツールがあります。
$ curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
$ chmod 700 /usr/bin/certbot-auto

でcertbot-autoをダウンロードし、実行可能な状態にしておきます。

$ certbot-auto certonly –webroot -w /path/to/home -d example.com –test-cert

で発行を行います。

  • certonlyオプションは証明書の取得のみを行うコマンドです。
  • webroot認証とペアでSSL証明書をインストールしようとしているドメインの所有権を確認します。
  • test-certオプションを付けると7日間5回の制限に引っかかりません。
  • この時に必要なライブラリがインストールされ、サーバに瞬断が発生します!
  • webrootがたまに公開になってない場合がありますが、以下で回避できます。
$ vi /path/to/home/.well-known/.htaccess
Satisfy any
order allow,deny
allow from all
  • テスト発行ができれば以下のような画面が表示されます。

  • test-certを外して再度発行します。
$ certbot-auto certonly –webroot -w /path/to/home -d example.com
  • そうすると既存の証明書を破棄しますか?と聞かれます。2を押して破棄します。

  • 先程のような完了画面が表示され、証明書がおいてあるパスが表示されます。
秘密鍵/etc/letsencrypt/live/example.com/privkey.pem
中間証明書/etc/letsencrypt/live/example.com/chain.pem
SSL証明書/etc/letsencrypt/live/example.com/cert.pem
証明書と中間証明書/etc/letsencrypt/live/example.com/fullchain.pem
  • httpd.confの設定は以下になります。
SSLEngine on 
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
  • ちなみにApache2.4.8以降は【SSLCertificateKeyFile】にfullchain.pemを指定すると【SSLCertificateChainFile】は指定しなくて済みます。

ここまででインストールは完了です。


❍ SSL証明書更新

証明書の更新も1ヶ月に一度もしくは1週間に一度確認して更新してあげないといけません。

/etc/crontabもしくは/var/spool/cronの下に以下の一行を追加しましょう。

まずはコマンドを検証します。

$ certbot-auto renew –no-self-upgrade –deploy-hook “systemctl restart httpd” >> /var/log/letsencrypt/crontab.log

を入力するとまだ1ヶ月未満になってないので更新できませんと怒られます。

問題ないということですので

00 10 * * 1 certbot-auto renew –no-self-upgrade –deploy-hook “systemctl restart httpd” >> /var/log/letsencrypt/crontab.log

毎週月曜日10時に更新確認を行うタスクです。

renewの際に勝手にバージョンアップすることを防ぐno-self-upgradeオプションと

更新が行われたときのみ再起動されるようにするためのdeploy-hookオプションを付けています。


如何でしょうか。

少しでもお役に立てればと思います。


知識・ノウハウ共有
7件

関連記事