CentOS7、nginx1.11上のWordPressサイトをSSL化する、そしてHTTP2を使う。
ちなみにHTTPS通信用の証明書作成のためには、対象サーバにドメイン名でアクセスできる必要がある。IPに対する証明書作成はできない仕組みとのこと。
なので、前回の記事でWordPressを作った後、ドメインを取得して、ドメインからアクセスできるようにしておく。
CentOS7, nginx1.11, php7-fpm, MySQL5.7でWordPress動かす
概要
常時SSL(HTTPS)化について
常時SSL化の目的は4つ、ざっくり整理すると
- セキュリティ:公衆無線LANからの接続においてクッキーの盗聴リスクを防ぐ
- HTTP/2対応:現在はSSLの場合のみHTTP/2が使用可能、ただしChromeはOpenSSL1.0.2以降が必要
- SEO:HTTPSサイトは有利、らしい
- リファラ解析:流入元がHTTPSサイトの場合、HTTPサイトだとキーワードをリファラヘッダーから取得できなかった
SSL化するに当たり、サーバ証明書はLet’s Encryptのものを使用する。
Let’s Encryptとは
Let’s Encryptとは、無償で証明書が利用可能な認証局。
SSLサーバ証明書は、認証レベルの違いにより次の3種類ある。Let’s Encryptが扱うサーバ証明書はDVのみ。
- Domain Validation (以下、DV):ドメインについてのみ認証、鍵マークが表示される
- Organization Validation (以下、OV):ドメインに加えサーバを運営する組織の存在を認証、鍵マークのみ表示
- Extended Validation (以下、EV):OVよりもさらに厳密に組織の存在を認証、鍵マークに加えず緑色のバーがURL部分に表示される
Let’s Encryptが証明書だと勘違いしてたぜ・・・
CentOS7のfirewalld設定
証明書設置する前にfirewalldにhttps通信を許可しておく。
sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --reload
httpsが開いていることを確認。
sudo firewall-cmd --list-services --zone=public --permanent
Let’s Encrypt証明書設置
Let’s Encryptが提供している「certbot-auto」というツールを利用して証明書を取得する。
yum でインストールできるようになった。
sudo yum install epel-release sudo yum install certbot
まずはcertbot-autoをセットアップする。
sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto
これでcertbot-autoコマンドが使えるので、証明書を生成する。
–webroot:既に稼働しているWebサーバに対して証明書を生成する
-w:ドキュメントルートのパス–
-d:認証するドメイン名
–email:証明書期限切れの通知用メアド
sudo certbot-auto certonly --webroot -w /var/www/runble1wp -d runble1.com --email [email protected]
コマンド実行後に、利用規約がGUIで表示されるので「Agree」にカーソルが合ってることを確認してエンターキーを押す。
処理が終われば、証明書に関連したファイルが/etc/letsencrypt以下にできている。
確認しておこう。
sudo ls -la /etc/letsencrypt/live/runble1.com
サーバ証明書:cert.pem
中間証明書:chain.pem
サーバ証明書と中間証明書を結合したファイル:fullchain.pem
秘密鍵:privkey.pem
nginxの設定
nginxの 設定を修正する。
sudo vim /etc/nginx/conf.d/default.conf
上のserverコンテキストでは、http通信を全てhttpsへリダイレクトする処理を書いている。
下のserverコンテキストでは、https・http2で通信する設定をかいてる。
server { # httpでのアクセスを全てhttpsへリダイレクト listen 80 default_server; listen [::]:80 default_server; server_name runble1.com; return 301 https://runble1.com$request_uri; } server { listen 443 ssl http2; server_name runble1.com; ssl_certificate /etc/letsencrypt/live/runble1.com/cert.pem; ssl_certificate_key /etc/letsencrypt/live/runble1.com/privkey.pem; # 以下略
この時点で、runble1.comのサイトはhttps通信ができるようになっている(http通信するとリダイレクトされるようになっている)。
WordPressの設定
設定→一般でWordPressアドレスとサイトアドレスをhttpsにする。
もし、URLバーに鍵マークが表示されず緑色にならない場合、古いテーマが悪さしてる可能性がある。
Stinger3ではHTTPコンテンツが混在していたのか、鍵マークが表示されなかった・・・
Stinger Plus+に変更したら鍵マークが表示されるようになった。
ssl labsで確認すると「B」だった。
参考
無償SSLサーバー証明書Let’s Encryptの普及とHTTP/2および常時SSL化
コメント