Let’s encryptを使ったWEBサーバーのSSL化が非常に簡単だった件。
概要
以前はまだパブリックベータで安定していなかったLet’s encryptだが、とうとう正式版が公開されたらしい。ちょうどOwncloudサーバーを作り直したかったし、どんなもんじゃいと導入してみた。既存の無料SSL発行サービスではかなり良い使い勝手であった。証明書の導入はクライアントの実行だけでよかった。15分も有れば導入可能だった。その際apacheを一時停止する必要がある。証明書の期限が比較的短く(60〜90日で切れる)、継続的な更新が必要である。cronで定期的にスクリプトを実行すれば良さそうだ。
0.サーバー環境
CentOS7+apacheを想定している。必要に応じて、phpやmariadbなどが導入されている。
1.Firewalldの設定
設定済みの場合、飛ばす。
#firewall-cmd --add-service=http --zone=public
#firewall-cmd --add-service=https --zone=public
#firewadd-cmd --reload
2.apacheの停止
Let’s encryptクライアントが80番ポートで通信するため、予め停止しておく
#systemctl stop httpd
3.Let’s encryptクライアントの導入
gitからクローンしてくる。
$git clone https://github.com/letsencrypt/letsencrypt
cd ./letsencrypt
./letsencrypt-auto --help
4. Let’s encryptクライアントの実行
yourdomainに自身のドメイン名を入力する。
メールアドレスの入力画面が出てくるので、入力する。規約に同意する。
./letsencrypt-auto certonly -a standalone -d yourdomain
5.確認
下記ディレクトリに証明書がインストールされたか確認する。以下のパスに最新の証明書のシンボリックリンクが作成されている。
/etc/letsencrypt/live/yourdomain/
6.SSL.confの変更
SSL.confを開く
$sudo nano /etc/httpd/conf.d/ssl.conf
SSLCertificateFile、SSLCertificateKeyFile、SSLCertificateChainFileの項目を適切に変更する。_yourdomain_部分を自身のドメイン名に変更して入力。
SSLCertificateFile /etc/letsencrypt/live/yourdomain/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/yourdomain/chain.pem
7.apacheの起動
#systemctl start hpptd
8.完了
これで全ての手順は完了。非常に簡単にSSLの導入が出来た。Let’sencryptで導入できるSSLは、一般ユーザーにもSSLを広めようと言うありがたい活動のお陰で使用できるようになっている。審査方法で言えばドメイン認証型で、証明書には組織情報などは記載されない。従って、簡易なサービスやプライベートサービス、一般リリース前のテストなどに適している。また、定期的(60日程度)に一回、証明書の更新が必要になってくる。apacheを停止し、クライアントを再度実行すれば自動的に更新される。
9.リンク
とてもわかり易かった。本記事は、下記参照先に加え。sslの設定を加筆したもの。
10.Appendix
SSLの脆弱性に対応するため、sslv3などの脆弱性を抱えたプロトコルでの通信を制限する。
$sudo /etc/httpd/conf.d/ssl.conf
httpd.confに下記の記述を付け加える。
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
httpdを再起動する
$sudo systemctl restart httpd
https://www.ssllabs.com/ssltest/index.htmlにアクセスして自分のドメインを入力、チェックする。
修正事項
サービス名がapacheになっていた→httpdへ訂正
ssl設定ファイルがhttpd.confになっていた→ssl.comfへ訂正