サイトの常時SSL(https化)の作業手順および備忘録
目次
設定環境
認証局
無料でサーバ証明書を発行してくれることでお馴染みの「Let’s Encrypt」の証明書を設定します。 以下の手順はLet’s Encrypt様の公式サイトに準じます。
なお手順はverupなどで変更される可能性があります。 本手順は2017年8月時点のものです。
サーバ環境について
うちのサイトはconohaのVPSを借りて運営しており、OSはCentOS7、サーバソフトはApacheです。 手順もそれに準じます。
固有の事情として1サーバ内(1グローバルIP)に複数のサイトが入っており、全てのサイトを常時SSL対応しました。 そちらの手順も書いておきます。
作業手順
※以下、作業手順におけるamaru・amaru.me及びディレクトリ構成はこのサイト固有のものなので、作業の際には適宜置き換えてください。
httpsポートの許可
うちはiptableがファイアウォールしているので、そちらに設定を追加します。
httpsポートの許可
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
セーブ
service iptables save
リスタート
service iptables restart
Certbotのインストール
Let’s Encrypt はクライアントソフトウェア「Certbot」を使用することで、SSL/TLS サーバ証明書の取得・更新作業を自動化できる仕組みになっています。 そんな便利ソフトをインストールしておきます。
sudo yum install epel-release
# sudo yum install certbot python-certbot-apache
※当環境ではsudo yum install certbot python-certbot-apacheコマンドを打った所「もう入ってるから何もしないよ」と返ってきました。 まあ入っていても念のため打っておいて損はないでしょう。
SSL証明書の作成・設定
SSL証明書の作成
certbot certonly --webroot -w /var/www/HTML/amaru/ -d amaru.me
メールアドレス入力
aving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):***@***
規約に同意するか
A)gree/(C)ancel: A
登録したアドレスにメール通知するか
Y)es/(N)o: N(もしくはY)
正常に証明書が作成されたかメッセージを確認してください。 問題なければ/etc/letsencrypt/live/amaru.me内に証明書が作成されているはずです。
Apacheへ証明書を設定
i /etc/httpd/conf.d/ssl.conf
..
DocumentRoot /var/www/HTML/amaru
ServerName amaru.me:443
...
SSLCertificateFile /etc/letsencrypt/live/amaru.me/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/amaru.me/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/amaru.me/chain.pem
...
...
再起動
service httpd restart
これでhttpsアドレスへアクセスできるようになります。 ブラウザからURLを入力して確認してみてください。
自動更新設定
SSL証明書は90日で有効期間が切れます。 期限が近づいたら以下のコマンドで更新する必要があります。
ertbot-auto renew
しかしこれを90日ごとに手打ちでやるのは危うさがあるので、自動更新設定した方が良いです。
SSL証明書自動更新
crontabを開く
udo crontab -e
crontabにジョブ設定する
0 05 01 * * certbot renew --force-renew && service apache2 reload
crontabに設定した内容の確認
rontab -l
同サーバ・別サイトを追加で常時SSL対応手順
同サーバにある別サイトも常時SSL対応したいので、追加で設定を行いました。 1サイトのみの設定であれば本手順は不要です。
1つの証明書を複数サイトに対応させることもできるようですが、私は証明書を別途発行する手順で行いました。
SSL証明書の作成
certbot certonly --webroot -w /var/www/HTML/hoge/ -d hoge.com
Apacheへ設定
vi /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>の上に「NameVirtualHost *:443:」を追記
ameVirtualHost *:443:
・・・
<VirtualHost _default_:443>~</VirtualHost>をコピペして追加し、内容を修正
..
DocumentRoot /var/www/HTML/hoge
ServerName hoge.com:443
...
SSLCertificateFile /etc/letsencrypt/live/hoge.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hoge.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/hoge.com/chain.pem
...
...
再起動
service httpd restart
サイト内リンクやテーマのhttps化対応
一通りhttps化されたサイトを見て、正常に動いているか確認しましょう。
スクリプト・ライブラリなどでhttpとhttpsが混在していると正常に表示されないというかhttpsサイトとして問題ある状態なので、テーマやファイルを修正しましょう。 サイト内リンクやスクリプト・ライブラリの読み込みは全て相対URL指定にしてしまった方が良いです。
またjQueryライブラリを外部サイトから読み込むなどしている場合も、「http」を外して対応することが可能です。 うちのサイトではjqueryライブラリの読み込みは以下の記述でやっています。
.htaccessでリダイレクトさせる
上記の対応によりhttpsアドレスのサイトができましたが、httpアドレスのサイトが無くなった訳ではありません。 このままではhttpとhttpsの2サイトが同時に存在し、アクセスやSEO評価まで分散してしまいます。
なので301リダイレクトによってhttps側に振り分けてしまいましょう。 .htaccessファイルに以下の記述をすればhttp側にアクセスしてもhttps側へリダイレクトします。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
これを書いておけばhttps側に収束していきます。 http側にアクセスしてもリダイレクトされるのでユーザーが混乱するような事はないですし、http側の被リンクにおけるSEO評価もhttps側に付くようになるので安心です。
アクセス解析ツールのURLを変更・追加する
SearchConsoleやGoogleAnalyticsなどのアクセス解析ツールにおいてhttpとhttpsサイトは別物…とまでは言いませんが、まあ違うサイトとして認識されます。
GoogleやBingなどのアクセス解析ツールのurl設定も適宜変更しましょう。
WordPressのURLを修正
WordPressの基準URLであるsiteurlとhomeurlを修正します。 通常のサイトであればダッシュボードの[設定]→[一般]から手修正すれば良いです。
マルチサイトの場合はダッシュボードから修正できないので、テーブルを編集します。 wp_optionテーブルのoption_name列の値がsiteurlとhomeurlである2レコードの、option_value列の値をhttpからhttpsに修正しましょう。
本手順はやらなくてもシステム上は問題ありませんが、WordPressから「修正推奨」みたいなメッセージが出続けることになります。
常時SSL対応後のアクセス数変動について
上記の常時SSL対応後、一時的にサイトの検索流入数が激減しました。 アクセスを検索流入に頼っていたサイトのPVは半分以下に激減し、そうでもないサイトも若干の減少が見られました。 (※http側とhttps側双方の和と比較してなお激減していました)
一過性のものである可能性が高いと見てとりあえず様子を見た所、1週間ほどで元の水準に戻りました。 検索順位も大よそ今まで通りの水準となっています。
恐らく検索エンジン側でリダイレクトなどのSEO転換を反映するのに時間がかかるのでしょう。 なので対応後にアクセス数が激減しても、焦らず1週間ほど様子を見るのが良いと思います。