[Linux]CentOS(6/7)に無料のSSLを導入してみる

常時SSL化

今まで非SSLだった環境にSSLを導入してみます。
SEO的にも常時SSL化(全ページSSL化)は有利とみられる傾向にあります。
何しろchromeブラウザのバージョン56は、SSLの対応、非対応の表示が明確化されるようになっています。
ホームページへアクセスしてくるユーザーの安心感という意味でも、全ページSSL化を導入するメリットは今後増えていきそうです。

無料のSSL

最近、いろんなものが安価で手軽にできるようになっています。
SSL化もこの中に含まれ、今回は「Let’s Encrypt」を使用します。
CentOS6とCentOS7の2種類導入してみました。

導入手順

クライアントソフトウェア「Certbot」のインストール
[centos6]
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto
[centos7]
yum install epel-release
yum install certbot python-certbot-apache

※今回CentOS7で「利用できません」とメッセージが表示されインストールができませんでした。
yum install epel-releaseを実行した時点でepelが表示されておらず、/etc/yum.repos.d/epel.repoの中身を確認するとなぜかCentOS6の情報が設定されていました。
これは原因不明な状況でした・・・

証明書作成

[centos6]
certbot-auto
[centos7]
certbot

上記のコマンドにより、ドメインやメールアドレスの入力で証明書が作成されます。
ここで一度、https://ドメインでsslが正常に動作するか確認します。
アクセスできない場合などは、ルーターやファイヤウォールで遮断されているのでチェックをします。

各種設定

1:SSLの設定
/etc/httpd/conf.d/ssl.confを編集します。
だいたい以下の行の内容をチェックし、自身の環境に変更すればよいかと思います。
DocumentRoot “/var/www/html”
ServerName ドメインを含むサーバー名:443
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2

またの直前に
ServerName ドメインを含むサーバー名
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/ドメインを含むサーバー名/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメインを含むサーバー名/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
を追加します。

2:証明書の自動更新
Let’s Encryptの証明書の有効期限は90日です。
それまでに証明書の更新作業が必要ですので、crondで自動化設定をしておきます。
まずはコマンドで証明書が正常に更新できるかをチェックします。
[centos6]
certbot-auto renew –force-renew –dry-run
[centos7]
certbot renew –dry-run

コマンド実行後、結果が正常に動作されているようであればcrondに登録します。
失敗しては困るので、7日毎に実行するようにしてみました。
[centos6]
00 05 07,14,21,28 * * certbot-auto renew –force-renew && /etc/init.d/httpd reload
[centos7]
00 05 07,14,21,28 * * certbot renew –quiet

3:アクセス時のリダイレクト
httpへアクセスしてきた場合、強制的にhttpsへアクセスするように.htaccessでリダイレクト設定をします。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://ドメイン/$1 [R=301,L]

.htaccessがうまく動作しない時、httpd.confでAllowOverride Noneになっている場合があります。
また403になる場合もhttpd.confでFollowSymLinksが設定されていない可能性があります。

まとめ

いとも簡単に、しかも無料でSSLが導入できました。
SSLにした場合の速度遅延が懸念されますが、今後の動作を見ながらhttp/2への対応も行っていきたいと思います。

コメント