WordPressをLet’s Encryptで常時SSL(HTTPS)化する

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化

Let’s EncryptのSSL証明書で、安全なウェブサイトを公開

Webサイトを「HTTP」から「HTTPS」へ切り替える際に行う一連の作業をまとめました

コメント

タイトルとURLをコピーしました