環境
概要
サイトSSL化と証明書の自動更新設定までを行います。手順は以下の通りです。
- cerbotをインストール
- SSLのポートを開ける
- 証明書の作成・発行
- nginxの設定変更
- cronへの登録
certbotのインストール
というかダウンロードするだけです。gitからもcloneできますが実行ファイルだけDLするほうが良いそうです(参考:Get Certbot — Certbot 0.12.0.dev0 documentation)。
どうしてもgit clone
でやりたい方は以下を(非推奨)。
SSLのポートを開ける
certbotのインストールが終わったら次はSSLのポートを開けます。証明書を発行するときに、Let’sEncrypt側で443ポートの確認しにくるのでこのタイミングで開けておきます。
これでcertbot-autoを実行する準備ができました。
certbot-autoを実行
続いて今インストールしたcertbot-auto
を実行します。今回はstandaloneモードといって一時的に443ポートのサーバーをcertbotに立ち上げさせて認証する方法でいきます。なお、certbot-auto -h
すればその他にどういうモードがあるのか確認できます。
では実行します。当然ながら、すでに443ポートを利用しているプロセスがいるとこけるので、もし443ポート使っているプロセスがいて、それを切ることができないのであれば、standaloneモード以外をご利用ください。
実行するとpythonのモジュールが大量にインストールされると思います。しばらく待ちましょう。余談ですが、certbotはpython2.7に対応しています。それ以外のバージョンのpythonをお使いであればpython2.7をインストールする必要があります。
さて、しばらく待つと以下のようなレスポンスが返ってきます。適宜、回答を入力してください。
これでうまくいけば以下のようなレスポンスが返ってきます。
どうやら証明書が発行されているようです。念のため確認しましょう。
無事にできてますね。
ちなみに、もし以下のようなエラーが返ってきたらLet’s Encryptが443ポートにアクセスできていない可能性があります。もう一度ファイアーウォール周りを確認してみてください。
nginxを設定
次にnginxを設定します。
まずは既存のブロックには手を付けずにSSL部分だけ記述します。
ssl_certificate
のところはcert.pemを読ませるという話も散見されますが、それだとandroidで安全ではない警告・エラーがでてしまいます。
証明書+中間CA証明書であるfullchain.pemを読ませる方が無難です。
reloadします。
実際にhttpsでアクセスして問題ないか確認します。
問題なければ、httpからのリダイレクトを設定します。
なおSSLの設定についてはキャッシュなど効かせることもできますが、ここでは混乱を防ぐためその手の設定内容は割愛しています。
reloadします。
これでhttpでアクセスしてもhttpsにリダイレクトされるはずです。
自動更新設定を行う
最後に証明書の自動更新を設定します。Let’sEncryptは90日で期限がきれるので自動で更新する設定を入れておかないといけません。cronに更新設定をしておきましょう。
(追記)
まず、現在のままだとstandloneモードで更新が行われてしまうので、その変更から行います。すでに443ポートは利用されてしまっているので、standaloneモード自体が動作できません。そこでこの設定をwebrootモードに変更します。
日曜の1時に証明書の更新を試みるようにしておきます。certbotは証明書の期限が一か月を切らないとrenewを実行しないようになっています。ですので毎週コマンド自体は実行し、期限一か月切ったら本当にに更新が行われる、という寸法です。
以上です。
参考