今更ながら、常時SSL時代に対応しようかと思って無料SSLのLet's Encryptやってみた。
Let's Encryptの公式サイトだとコマンド名がcertbotだが、旧式コマンドだとletsencryptになる。
今回のサーバーはUbuntu 16.04でletsencryptだった。
コマンド名が違うだけで使い方は同じ。
公式サイト見ると、
# certbot certonly --webroot -w /var/www/html -d example.jp
こんな感じで使う。
certonlyだと証明書の発行を行う。
--webrootだと既存のWEBサーバーを利用してドメイン所有権の確認を行う。
-wに続けてドキュメントルートを指定。
-dに続けて証明書を取得するドメインを指定。
複数ドメインに対応した証明書を発行する場合は、
-dオプションを複数かけるが、ドキュメントルートが別々の場合は-wも複数指定して、-wと-dの順番を考慮する必要がある感じ。
ワイルドカード証明書も取得できるようになったらしいのだが、
バージョン0.22.0以上のクライアントが必要で、Ubuntu 16.04標準のは0.4.1だったので非対応。
あと、ワイルドカードの場合はドメイン所有権の確認がDNSのTXTレコードで行われるらしいので自動更新が難しいぽい。
で、やってみたが、
メールアドレスの入力が求められて、Agree
するだけ。
確認メールとかもこない。
/etc/letsencrypt/live/example.jp
以下に
cert.pem
chain.pem
fullchain.pem
privkey.pem
の4ファイル(シンボリックリンク)ができる。
cert.pemとchain.pemはApache 2.2用(2.4.8未満用)のサーバ証明書と中間証明書。
fullchain.pemがApache 2.2用(2.4.8以上用)のサーバ証明書と中間証明書が結合されたファイル。
privkey.pemが秘密鍵。
なんだが、サーバーは2.4だが今まで有料SSL使う時にサーバ証明書と中間証明書別々に設定してたわw
1個でいいんだね。
あとは、
# certbot renew
すると取得済み証明書が更新される。(複数ある場合でも全部)
証明書の期限は90日らしい。
が、更新したばっかのはスキップされるんで、とりあえず1日1回実行するようにした。
簡単ね。
でも、今回やったサイトに混在コンテンツが難のある箇所があった。
さくらの共用サーバーのアドレスのiframeが入ってて、
さくらの共用サーバーの無料サブドメインだから共有SSLに問題があった。
初期ドメインの証明書になってるから、無料サブドメインは警告出ちゃうみたいね・・・
あと、
httpサイトをhttpsに転送するのにHSTSってのを使うようなんだが、これ調べてもちゃんと説明してないサイトばっか出てきてよくわからん。
Header set Strict-Transport-Security "max-age=86400"
とヘッダーを追加するとmax-ageの期限まではhttpsで接続してくれるようになるらしいが、これだけじゃ何も変わらん。
別途リダイレクトが必要なのか?
Header setする箇所も記載してない説明ばっか出るが、443番の設定の方に書くのか?じゃないと期限更新されないもんね。
ちゃんと80番の設定なのか443番の設定なのか書いて欲しい。
まあ、今回は混在コンテンツの問題があったのでまたにする。