【Let’s Encrypt】無料SSL対応 – CentOS6.8で導入&自動更新
https通信だと、Googleもちょっと優遇してくれるということで、一応このサイトにも入れています。
その他、Chromeではパスワード入力などがある画面でhttpsでない場合は「保護されていません」表示がされ、危険なサイトみたいな見え方をしてしまいます・・。
しかし、SSL対応しようと思うと証明書が必要になり、巷で噂(?)のオレオレ証明書では、むしろ警告文を出されてしまいます。
それらのために有料のSSL証明書を使うか・・と考えると億劫になったりします。
警告文も出されず、無料でSSL対応はできないのか・・!
・・というときに便利なのがLet’s Encryptです!
証明書の発行の仕方は色々ありますが、今回はCentOS6.8でapacheを起動した状態で証明書を発行する(webroot)方法を紹介したいと思います。
apacheを起動した状態・・ですが、SSLのなどの反映もあるので再起動が必要です。
あくまで証明書取得中の間apacheを落とさなくてもいい、というだけですね。
まず取得できる証明書はドメイン認証(DV)のみです。
まぁ、企業認証とかやりたい企業が無料のものを使ってる、となるとブラウザ的にOKでもなんだか微妙な気持ちになるので、問題ないでしょう。
あと、大事なのは有効期限が90日です。
そのため、自動更新するようにしておかないと、手間がかかり、更新忘れなどの頻度も上がってしまいます。
もう一つ、1週間に5回ほどしか発行はできません。
90日で切れるからと頻繁に更新しないようにしましょう。
その他、詳細はこちら。
◆root権限を使えること
一番ひっかかる条件がこれですね・・。
残念ながら、レンタルサーバーなどのroot権限が使えないサーバーでは結構厳しいです。
root権限のあるサーバー(VirtualBoxなどの仮想環境でも可)で発行して、証明書をレンタルサーバーに移す・・という強引な使い方はできると思いますが、常設サイトとしては面倒です(´っω・`)
・・気になって調べてみたら、実際にされているツワモノがいましたΣ(・ω・`ノ)ノ素晴らしい
◆独自ドメインである
さくらインターネットなどで最初から使えるさくらインターネットのサブドメインなどでもできますが、1回だけ前述の発行回数の制限にかかったので、回数制限がサブドメインを含めてと思われます。
なので、自動更新のときに回数制限にひっかかったりすると困る人は独自ドメインを取ったほうが無難です。
◆1.gitリポジトリからLet’s Encryptをダウンロード
・gitリポジトリをダウンロードするディレクトリへ移動
cd /usr/local/
・Let’s Encryptダウンロード
git clone https://github.com/letsencrypt/letsencrypt
・インストール的なやつ
cd letsencrypt
./letsencrypt-auto –help
◆2.https(443)ポートを許可
・iptablesでhttps(443)ポートを許可
vi /etc/sysconfig/iptables
以下の内容を記述(あまりわからない人はhttp(80)ポートの記述の前後に記述)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
・iptables再起動
/etc/init.d/iptables restart
◆3.Let’s Encryptがドメイン所持者を確認するための設定
・httpd.conf編集
<Directory /var/www/html/.well-known> Order Allow,Deny Allow from All </Directory>
※DocumentRootが/var/www/htmlの場合
・apache再起動
/etc/init.d/httpd restart
◆4.証明書取得
./letsencrypt-auto certonly --webroot \ -w /var/www/html -d 【ドメイン名】 \ -m 【メールアドレス】 \ --agree-tos
※DocumentRootが/var/www/htmlの場合
成功した場合、/etc/letsencrypt/live/【ドメイン名】/ にファイルが出来るはずなので、lsでもしてみてください。
◆5.apacheのSSL設定
・httpd.conf編集
vi /etc/httpd/conf.d/ssl.conf
以下の部分を編集
SSLCertificateFile /etc/letsencrypt/live/【ドメイン名】/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/【ドメイン名】/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/【ドメイン名】/chain.pem
chain.pemはapacheのバージョンによっては要らないかも?
・apache再起動
◆6.接続確認
https://【ドメイン名】 へアクセス!
無事アクセスできたらお疲れ様でした(`・ω・´)
・・できなければ・・エラーの原因を探りましょう・・コメントしてもらえればわかる範囲で回答します。
証明書は90日で切れてしまうため、1サイトの運用でも自動更新はしておいたほうがいいです。
とはいえ、手動更新だとしても、なんととっても簡単なのです。
/usr/local/letsencrypt/letsencrypt-auto renew --force-renew
コマンドはこれだけ。(パスはダウンロードした場所)
なんと前回実行した内容を実行してくれます。
なのでwebrootで取得した人は同様にwebrootで、standaloneであればstandaloneで実行されます。
standaloneで取得した人は毎回取得中apacheを止めないといけないので、自動更新はwebrootの方が良いと思います。
・・まぁ、cronで3時とか指定して、そのうちの1分アクセスできなくてもそうそう困ることはないんですが・・
でも証明書取得ってことは、新しい証明書をssl.confとかに記載しないといけないんじゃないの?
ってことはなく、前述のパスは実体ではなく、最新の証明書を指し示すシンボリックリンク(ショートカットみたいな?)なので、何もしなくてもよいのです。
実質apacheの再起動だけして、適用しておけば問題ありません。
ということで、まとめると
crontab -e
00 03 01 */2 * /usr/local/letsencrypt/letsencrypt-auto renew --force-renew && /etc/init.d/httpd restart
で、自動更新設定は終了です。
ほんとは証明書取得でエラーになった場合のチェック機構は入れた方がいいですが・・
一度やってしまえば、自動更新は簡単なので、ぜひチャレンジしてみてください!(`・ω・´)ノシ