この記事はなんたらAdventCalendarとは関係のないただのメモです。
このへんの分野はあんまり強くないものの、手探りでやってみてなんとかできたのでその学びを。
基本的にはこのリンクを参考にしたけども、内容を理解するまでにいろいろ壁があったので・・。
環境は、
- CentOS 6.8
- nginx 1.0.15
nginxのバージョンは後であげた。
はじめに
そもそも気になってたことなので改めて書いておきます。
というわけでざっくり手順
こういうのは大枠からつかんでいくに限る(˘ω˘ )
certbotをいれる
ここにある手順に則るだけなんですが、CentOS 6.xだとこれが最初の難関です。
途中の処理でPython2.7↑が必要になるけど、CentOS 6.xだと入ってないのでそこをなんとかする必要があります。
これによると、最新のcertbotだと問題ない的なことが書いてますが、ダメでした。
なので、このリンクにある旧解決策とやらを実施。
- SCLは、システムに入ってて簡単にアップデートできないソフトを、別途インストールして実行できる仕組み(ざっくり
- SCLが使えるようになると、後はいつもどおりyumでいれる
- いれたソフトを`enable`状態にしたシェルを起動して後のことをやる
って感じですかね。
ちなみにPython3.3でも動いた。
certbot-auto -h
でエラーでずにヘルプが見れるようになればOK。
acme-challengeできるように
前提知識はコレ。
証明書を発行するために、Let's Encrypt氏をそのドメインで受けてるサーバーに一度お招きする感じ?
location ^~ /.well-known/acme-challenge { default_type "text/plain"; # 念のため root /var/www/letsencrypt; # 実際はどこでもいいぽい? }
こんな設定を用意する。
設定だけじゃなくて、ディレクトリもちゃんと作る。
そして、今まで通りの`server`設定の中で読む。
server { listen 80; server_name foo.example.com; include /path/to/↑のconf; }
これで、`http://foo.exampe.com/.well-known/acme-challenge/xxxxxxx`に通るようになるはず。
nginxの設定をreloadするのをお忘れなく。
次の証明書をつくるステップで、実際にリクエストが飛ぶ。
証明書をつくる
certbot-auto certonly --webroot -w /var/www/letsencrypt -d foo.example.com -d bar.example.com
`-w`に渡すパスは、さっき用意したディレクトリ。
`-d`でhttpsにしたいドメインを列挙。
↑の設定が正しくできてて、Let's Encrypt氏を無事に招くことができれば証明書ができる。
`/etc/letsencrypto/live/`配下に、ドメインごとにいろいろできあがってるはず。
nginxにhttpsの設定
server { listen 80; server_name foo.example.com; # 今までの設定はまるっと移動して、リダイレクト設定だけにする return 301 https://$host$request_uri; } server { listen 443 ssl; server_name foo.example.com; # 今までの設定はこっちに # さっきのacme-challenge用のincludeも忘れずに # ssl_**の設定は、nginxのバージョンによって色々違うので割愛 }
もう`http`で受ける必要がないなら80番はいらんけど、また更新する時とか、世に出回ってしまったリンクとかあると思うので残す。
各種ssl_**ディレクティブの設定は、以下の記事とかを参考に。
- Let’s EncryptとNginx : セキュアなWebデプロイメントの現状 | POSTD
- NginxでHTTPS:ゼロから始めてSSLの評価をA+にするまで Part 2 – 設定、Ciphersuite、パフォーマンス | POSTD
もろもろ設定したらnginxをreloadして、無事にアクセスできればhttps化done!
証明書の更新
証明書の期限が3ヶ月なので、定期的に更新しないといけない。
cronでやってもいいし、期限が迫るとメールがくるらしいのでその都度手動でも。
certbot-auto renew
その後またnginxをreloadする。
はじめてのrenew
20170216: 追記
はじめて手動でrenewしたけど一瞬だった。
# 久々なのでとりあえずヘルプ certbot-auto -h # そしてらアップデートが走った # 問題なさそうだったので更新 certbot-auto renew # nginxの再起動もお忘れなく
一瞬だった。
DevToolsのSecurityペインから`View certificate`したら更新されてるのがわかる。