
ChristophMeinersmann / Pixabay
常時SSL化のメリット・デメリット
下記サイト参照。
一番のメリットはGoogle様に優遇されること。
一番のデメリットはhttpで築き上げてきたURL的な資産がなくなること。
Let’s Encryptとは
一言でいうと常時SSL化に必要な「SSL/TLSサーバ証明書」を無料で発行してくれるところ。
スクリプトを叩くだけで証明書の発行からインストール・更新までしてくれる。
詳細は下記サイト参照。
Let’s Encryptのインストール
うちのさくらVPSはCentOS6なので下記サイトを参考にインストールする。
yum install epel-release
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto
必要なパッケージがインストールされるので完了するまで待つ。
証明書の発行・取得
WordPressを止めたくないので、Apacheを利用して証明書を発行・取得する。
※Python関係のWarningが出ても動作に支障はないので無視する。
./certbot-auto certonly --webroot -w /var/www/html(apacheの公開ディレクトリ) -d example.com,www.example.com(ドメイン名) -m mail@example.com(メールアドレス)
上手くいくと下記のようなファイルが作成される。
ls -1 /etc/letsencrypt/live/example.com/
README
cert.pem
chain.pem
fullchain.pem
privkey.pem
Apacheの設定
Apacheに証明書を組み込む
vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/hogehoge.hugahuga.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hogehoge.hugahuga.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/hogehoge.hugahuga.jp/chain.pem
デフォルトだとセキュリティ上問題があるので設定を変更する。
POODLE脆弱性のあるSSLv3は無効にする
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
#SSLProtocol all -SSLv2
SSLProtocol all -SSLv2 -SSLv3
POODLE脆弱性については下記サイトを参照。
セキュリティ強度の低い暗号化方式は使わない
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
#SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLHonorCipherOrder ON
SSLCipherSuite EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5
詳しくは下記サイト参照。
httpへの接続をhttpsに転送する
vi /etc/httpd/conf/httpd.conf
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Apacheを再起動する
service httpd restart
WordPressの設定
- [設定]->[一般]で「WordPress アドレス (URL)」と「サイトアドレス(URL)」をhttpsに直す。
- 記事の内部リンクをhttpsへできれば修正する。
証明書の自動更新設定
cronで週1回期限切れが近い証明書を更新してApacheで読み込むように設定する。
(2018/05/27更新)
いつの間にか自動でサービスの再読込をしてくれるようになっていたので以下の設定でOK。
crontab -e
0 6 * * 0 /root/certbot-auto renew