[CentOS6][Apache]Let’s Encrypt CertBotでSSL対応

このブログでもSSL対応したいと思いつつ後回しにしてきたのですが、最近Let’s EncryptでSSLを取得してみたらチョー簡単になっていたのでHappyqualityもSSLに対応してみました。

CertBotというソフトウェアを使うのですが、対話式コマンドでSSLの取得から設定までぜーんぶやってくれます。

解説の必要もないほど簡単ですが、社内メモとして残しておきます。

環境は
CentOS release 6.9
Apache2.2.15

CertBotのインストール

たったこれだけ

sudo yum install epel-release
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

場所は特にこだわりがなければホームディレクトリでいいでしょう。
個別ユーザのhomeディレクトリでも問題はありませんが、証明書の更新をcrontabで設定する時にnginxの再起動のためにroot権限で実行する必要があるので/usr/localなどに設置したほうが良いかもしれません。

証明書取得とサーバの設定

インストールした場所で以下のコマンドを実行するとcertbotの対話式コマンドが走ります。

./certbot-auto

必要なパッケージのインストールが始まり

...
トランザクションの要約
==============================================================================================================================================================
インストール        20 パッケージ
アップグレード      21 パッケージ

総ダウンロード容量: 46 M
これでいいですか? [y/N]

と聞かれるのでyエンター。

次に更新やセキュリティの通知メールを送るためのメールアドレスを聞かれるので自分のアドレスを登録しておきます。
cでキャンセルもできます。

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):自分のメールアドレス

次に利用規約を読んで同意してくれと言われるので、シッカリ読んだうえでAエンター。

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: 

次にElectronic Frontier Foundationのメールを受け取る?みたいなことを聞かれるので

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: 

好みに応じて。
この設問が終わると、スゴいことが起こります。

Apacheのバーチャルホストの設定を読んで「どの名前をHTTPSに対応する?」って聞かれるので、対応する数字で答えてエンター。

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: example.com
2: ex2.example.com
3: ex3.example.com
...設定されてる数だけリストされます
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

すると、Let’s Encryptでの証明書取得を行ってくれて、それが終わるとvhost-le-ssl.confにSSL用のホストも追加してくれます。

最後に「httpのアクセスをhttpsにリダイレクトしとく?」って聞いてくれるので

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
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.
-------------------------------------------------------------------------------

httpを残さないなら2でエンター。
ただしiptablesなどのファイアーウォールでポート443へのアクセスを許していなかったりするとサイトが表示されなくなってしまうので注意しましょう(笑) *[1]

この項目で2のリダイレクトを選ぶと、元のバーチャルホストの設定にRewriteModでリダイレクトする記述を追加してくれています。
もしhttpsのアクセスでサイトが見れなくなったりしたら追加されたRewriteの記述をコメントアウトしましょう。

CertBotのインストールからSSLの導入完了まで5分で終わりました。この記事を書く時間のほうがよっぽど長かったですね(笑)

2018-04-16追記

Nginxの場合

ApacheとNginxの両方がインストールされているサーバでcertbox-autoを実行すると、最初の設問で

How would you like to authenticate and install certificates?
-------------------------------------------------------------------------------
1: Apache Web Server plugin - Beta (apache)
2: Nginx Web Server plugin - Alpha (nginx)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

のように、どちらのWeb Serverのサイトを暗号化する?と聞かれます。
Nginxを選択した場合でも、Apache同様に設定されているVirtualhostをリストアップしてくれて選択したホストを自動的にSSL対応してくれます。

リダイレクトの設定もApacheと同じように2: Redirectを選択すれば自動で設定してくれました。

Let’s Encryptの自動更新設定

Let’s Encryptは90日ごとの更新が必要です。

./certbot-auto renew

というコマンドで30日以内に期限を迎える証明書を更新できますが、毎回手動で実行するわけにはいかないのでcronで自動実行するように設定します。
私はcertbox-autoをログインユーザのhomeディレクトリに入れてしまいましたが、cronで証明書を更新した後にroot権限でnginxをリスタートする必要があるので、個別のユーザではなく/usr/localなどに入れたほうが良いかもしれませんね。

以下は[user]のホームディレクトリにcertbot-autoを設置した場合です。

sudo crontab -u root -e
0 4 * * 0 /home/[user]/certbot-auto renew && /etc/init.d/[httpd|nginx] restart

毎週日曜日の朝4時にcertbot-auto renewしてnginxを再起動する記述です。
certbot-autoのパスは環境に応じて書き換えてください。
[httpd|nginx]は利用しているWEBサーバに応じて記述してください。

  1. 自分はこれで少し焦りました []
スポンサーリンク
336x280_1
336x280_1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
336x280_1