SSL証明書をウェブサーバーにインストールし、常時SSLをすることがウェブ業界ではすっかり標準になりました。さくらインターネットなど提供するレンタルサーバーなら無料でSSLを設定できますが、これはサービス事業者がLet’s encryptを、利用者がGUIで使えるよう開発しただけです。
自社でウェブサーバーを管理しているとか、自前サーバーで運用しているブロガーなどは証明書のインストールをする場合は自分でしないといけません。有償の証明書を使う場合は年間5万円の高い証明書もあれば、一方で980円の証明書もあり、そういった選択肢から選ぶ必要があります。これらの証明書なら、必ずしもというわけではないですが品質としては一定の信頼ができます。
無償の証明書を使う場合はLet’s encryptを使うというのが現実的な選択肢となるでしょう。もしAWSを使っているならamazonの証明書が無料で使えますが、この記事ではLet’s encryptをインストールしてCronで自動更新する流れを整理して紹介します。
Let’s encryptをインストールする前提条件
Let’s encryptの利用には重要な前提条件があります。
- Let’s encryptを実行するサーバーに、DNSがすでに向けられていること
- ポート443をあけておくこと
Let’s encryptをインストールする大まかな流れ
- Epelをインストールする
- Certbotをダウンロードする
- ChmodでCertbotに実行権限を付与する
- Certbotを実行する
- cronで自動更新の設定をする
だいたいこんな感じの流れです。もちろんどんなサーバーを使っているかによって必要な手順は異なります。大手事業者のVPSなどを使っている人は、Epelやpythonなど特定のソフトやミドルウェアがが事前にインストールされていることがよくあるので、場合によっては不要な手続きもあるでしょう。
Epelをインストール
以下のようなメッセージが出る場合はEpelはインストール済みです。
Certbotをダウンロードする
#ls をするとちゃんとダウンロードされていますね。
ChmodでCertbotに実行権限を付与する
ダウンロードしたてのcertbotには実行権限がありません。
total 88
drwxr-xr-x 2 root root 4096 Jul 15 13:40 .
drwxr-xr-x. 22 root root 4096 Jul 15 13:29 ..
-rw-r–r– 1 root root 79656 Jul 15 04:19 certbot-auto
ということで、以下のように実行権限を付与しましょう。
そうすると、以下のように権限が付与されます。
[admin@ik1-317-18962 work]$ ls -al
total 88
drwxr-xr-x 2 root root 4096 Jul 15 13:40 .
drwxr-xr-x. 22 root root 4096 Jul 15 13:29 ..
-rwxr-xr-x 1 root root 79656 Jul 15 04:19 certbot-auto
certbot-autoを実行する
ではいよいよcertbot-autoを実行しましょう。これによって証明書が発行されます。
途中で何回かy or nをきかれるが内容を見てyを選択しましょう。
また以下のようにウェブサーバーを質問されます。Apacheなのかnginxなのかを選択しましょう。まさかLet’s encryptで常時SSL化しようという人で、自分の使っているウェブサーバーが分からないという人はいないと思いますが。。
2: Nginx Web Server plugin (nginx)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):
他にもemailを聞かれるので適当に入れる、domainを入れるなど順次必要な項目を入力しましょう。最後に以下のようにリダイレクトの設定が出てきます。これもご自身の使っているサーバーの状況に応じて選択しましょう。
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
1: No redirect – Make no further changes to the webserver configuration.
2: Redirect – Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you’re confident your site works on HTTPS. You can undo this
change by editing your web server’s configuration.
以上で設定は完了で、以下のような表示が出れば設定は成功です。
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=hogehoge.com
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/hogehoge.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/hogehoge.com/privkey.pem
Your cert will expire on 2019-12-10. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again with the “certonly” option. To non-interactively renew *all*
of your certificates, run “certbot-auto renew”
– Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
– If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
ポート443をあける
443ポートが開いていない場合は当然設定しましょう。
鍵の場所
certbotの設定した秘密鍵や証明書は以下の場所にあります。
/etc/letsencrypt/live/hogehoge.com/fullchain.pem → 証明書
/etc/letsencrypt/live/hogehoge.com/privkey.pem → 秘密鍵
更新の仕組み
このコマンドを実行することで証明書が更新されます。証明書の期限は3ヶ月なので、3ヶ月ごとにこれを実行する必要があります。手動で実行するのが面倒なのでCronを使いましょう。当然サーバーの時計は合っていることが前提です。
cronで自動更新の設定をする
cronとはサーバーにおいて定期的に自動実行したいプログラムを動かすに使う仕組みです。タイマーみたいなもんですね。/var/spool/cron/配下に設定ファイルを置くと、それが自動実行されます。cronを使ったことのない人は詳しくはこういう解説記事を読んでください。
/var/spool/cron/配下にhogehogeのようなディレクトリを作成して以下のように記述するか、または#cron -eでもcronの編集モードに入るか、どちらでもOKです。ネットで検索して出てくる記事によっては安全なのは#cron -eのようですが、私の感覚ではたいした違いはありません。
certbotに関する注意点としては、自動実行を5回実行してNGの場合は使用制限がかかるらしいのでcronの設定は月1回にしておきましょう。3ヶ月に1回の更新だから月1回の設定でも、エラーが5回に達することはありません。3回NGがおきても無害なので無視です。
ファイルには当然パスを通します。これはサーバーによるのでお使いのサーバーやアプリに応じて設定してください。
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/admin/bin
GEM_PATH=””
26 14 5 * * /var/work/certbot/certbot-auto renew
この場合は毎月5日の14時26分に/var/work/certbot/配下で#certbot-auto renewを実行するという意味です。実行されたかどうかは/var/log/cronで実行されたか確認できます。できていない場合はpathが通っていないとか、実行権限がおかしいとか、その辺りを見直すといいでしょう。