サイトの常時SSL(https化)の作業手順および備忘録

web

設定環境

認証局

無料でサーバ証明書を発行してくれることでお馴染みの「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週間ほど様子を見るのが良いと思います。

eyecatch

ConohaのVPSにWordPressをインストールするまでの備忘録

eyecatch

SSL/TLS・SSL証明書・認証局とは

ウェブサイトの記事

eyecatch

ウェブサイトを作るのに必要な言語

eyecatch

SSL/TLS・SSL証明書・認証局とは

eyecatch

当たり前に設置されるページャー、実は不要なケースも多い

eyecatch

ウェブとウェブサイト

eyecatch

サイトを毎日更新する意味はシステム的にはない

eyecatch

PCサイトとスマホサイトの違い

ウェブサイトの記事一覧HOME