サイトの常時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

メールアドレス入力

Saving 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へ証明書を設定

#vi /etc/httpd/conf.d/ssl.conf
...
<VirtualHost _default_:443>
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
...
</VirtualHost>
...

再起動

# service httpd restart

これでhttpsアドレスへアクセスできるようになります。 ブラウザからURLを入力して確認してみてください。

自動更新設定

SSL証明書は90日で有効期間が切れます。 期限が近づいたら以下のコマンドで更新する必要があります。

certbot-auto renew

しかしこれを90日ごとに手打ちでやるのは危うさがあるので、自動更新設定した方が良いです。

SSL証明書自動更新

crontabを開く

sudo crontab -e

crontabにジョブ設定する

00 05 01 * * certbot renew --force-renew && service apache2 reload

crontabに設定した内容の確認

crontab -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:」を追記

NameVirtualHost *:443:
<VirtualHost _default_:443>
・・・

<VirtualHost _default_:443>~</VirtualHost>をコピペして追加し、内容を修正

...
<VirtualHost _default_:443>
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
...
</VirtualHost>
...

再起動

# service httpd restart

サイト内リンクやテーマのhttps化対応

一通りhttps化されたサイトを見て、正常に動いているか確認しましょう。

スクリプト・ライブラリなどでhttpとhttpsが混在していると正常に表示されないというかhttpsサイトとして問題ある状態なので、テーマやファイルを修正しましょう。 サイト内リンクやスクリプト・ライブラリの読み込みは全て相対URL指定にしてしまった方が良いです。

またjQueryライブラリを外部サイトから読み込むなどしている場合も、「http」を外して対応することが可能です。 うちのサイトではjqueryライブラリの読み込みは以下の記述でやっています。

<script src="//code.jquery.com/jquery.min.js"></script>

.htaccessでリダイレクトさせる

上記の対応によりhttpsアドレスのサイトができましたが、httpアドレスのサイトが無くなった訳ではありません。 このままではhttpとhttpsの2サイトが同時に存在し、アクセスやSEO評価まで分散してしまいます。

なので301リダイレクトによってhttps側に振り分けてしまいましょう。 .htaccessファイルに以下の記述をすればhttp側にアクセスしてもhttps側へリダイレクトします。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

これを書いておけばhttps側に収束していきます。 http側にアクセスしてもリダイレクトされるのでユーザーが混乱するような事はないですし、http側の被リンクにおけるSEO評価もhttps側に付くようになるので安心です。

アクセス解析ツールのURLを変更・追加する

SearchConsoleやGoogleAnalyticsなどのアクセス解析においてhttpとhttpsサイトは別物…とまでは言いませんが、まあ違うサイトとして認識されます。 GoogleAnalyticsでは少し修正するだけで済みますがSearchConsoleではサイトを追加する所から始めなくてはなりません。

GoogleやBingなどのアクセス解析ツールに設定するURLも適宜変更しましょう。

常時SSL対応後のアクセス数変動について

上記の常時SSL対応後、サイトの検索流入数が激減しました。 アクセスを検索流入に頼っていたサイトのPVは半分以下に激減し、そうでもないサイトも若干の減少が見られました。 (※http側とhttps側双方の和と比較してなお激減していました)

一過性のものである可能性が高いと見てとりあえず様子を見た所、1週間ほどで元の水準に戻りました。 検索順位も大よそ今まで通りの水準となっています。

恐らく検索エンジン側でリダイレクトなどのSEO転換を反映するのに時間がかかるのでしょう。 なので対応後にアクセス数が激減しても、焦らず1週間ほど様子を見るのが良いと思います。

\share/

  • hatebu
  • line

よく読まれている記事

HOME