SEO

ブログサイトを常時SSL化させてみました

この記事では、今自分のサイトを持っていて、
SSL化させたいと思っている方の助けになればと思い手順を纏めてみました。

Googleが推奨しているサイトのSSL化って

2018年7月リリースのGoogle Chrome 68からSSL化していないサイトに警告を出すようになりました。

記事執筆中の今、僕のサイトはSSL化してないので、GoogleChromeで見ると下記のようにURLの左に”Not Secure”と出てしまっています。

SSLとはSecure Sockets Layerの略で、サイトをSSL化することで、下記のような効果があります。

  • インターネット通信の暗号化し第三者から盗聴をされない
  • サイト運営者の実在性を確認できる

SEOへの影響は?

サイトをSSL化することで、大幅にSEOの検索順位があがるということはないですが、Googleが検索順位の決定要因になることは発表しています。

このランキングの変更は、グローバルでクエリの 1% 未満にしか影響しませんが、これから長い期間をかけて強化していきます。全体的に見ると、このシグナルは良質なコンテンツであるといった、その他のシグナルほどウェイトは大きくありません。HTTPS は、優れたユーザー エクスペリエンスを生み出す多くの要素のうちの 1 つです。

引用元:https://webmaster-ja.googleblog.com/2014/08/https-as-ranking-signal.html

また、同一コンテンツのページがあった場合HTTPSページを優先して上位表示するともアナウンスしています。

ですので、効果は大きくは無いですが、SEO的にも多少はプラスになるようですし、セキュリティ的に見てもSSL化は必須なので、今回SSL化をしてみました。

実際にSSL化してみる

僕のブログはAWSのWordPress用のイメージであるWordPress powered by BitNamiを使用し作成しています。

ですので、他のレンタルサーバーなどで運営されている方の参考にはならないかもしれません。申し訳ないのですが、ご容赦下さいませ。

AWSではELB(ロードバランサ)経由だと証明書が無料で使えるようなのですが、今回はELBは使用せずに自身で証明書を取得し、設置するという方法でSSL化を行いました。

SSL化の手順

  1. 証明書を取得
  2. 証明書をサイトへ適応させる(これでSSL化完了)
  3. 証明書の自動更新設定
  4. HTTPにアクセスがあった場合、HTTPSにリダイレクトさせる

1. 証明書を取得

SSL証明書を購入できるブランドは沢山ありますが、今回は無料でSSL証明書が取得できる「Let’s Encrypt」というサービスを利用しました。

SSL化対応をしたのは久しぶりだったんですが、今やもう無料でSSL証明書が取得できることに驚きました。因みに、Let’s Encryptはアメリカの非営利団体組織ISRGが提供しているサービスらしいです。

ただ、この証明書の有効期限は3ヶ月しかないので、通常は3ヶ月後に更新しないといけないのですが、自動更新ができるみたいだったので、今回はそちらの設定も行いました。

下記、証明書の取得手順になります

1. sshでサーバに接続

接続方法は今回は割愛します。

2. certbot-autoをインストールする
$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
$ sudo chmod 700 /usr/bin/certbot-auto
3. SSL証明書を取得
$ sudo certbot-auto certonly --webroot -w /opt/bitnami/apps/wordpress/htdocs -d hoge.com --email hoge@hoge.com -n --agree-tos

下記はオプションの詳細です。各自、自分の環境に合わせて設定して下さい。

オプション概要
-wドキュメントルートの指定/var/www/html
-d対象ドメインhoge.com
–email登録用メールアドレスhoge@hoge.com
-n対話の入力をスキップ 
–agree-tos利用規約に同意する 

成功すると、下記メッセージが表示され、証明書と鍵が発行されます。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/eejanaica.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/eejanaica.com/privkey.pem
   Your cert will expire on 2019-08-31. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

 - If you like Certbot, please consider supporting our work by:
   Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
   Donating to EFF: https://eff.org/donate-le

証明書をサイトへ適応させる(これでSSL化完了)

先程作成した証明書のパスをApacheに設定しサイトをSSL化します。
実際にすることとしては、Apacheの証明書、鍵用のパスを先程作成したものにして、Apacheを再起動するだけです。

1. Apacheの証明書、鍵用のパスに先程作成したもので設定

修正するファイルは環境によって変わってきますので、ご自身でSSLの証明書が設定されているApacheのconfファイルを探して下さい。

修正したファイル

/opt/bitnami/apache2/conf/bitnami/bitnami.conf

下記を修正

SSLCertificateKeyFile /etc/letsencrypt/live/eejanaica.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/eejanaica.com/fullchain.pem
2. Apacheを再起動

下記コマンドもサーバーのOS/ソフトウェアによって異なるので、自身のサーバーのApacheの再起動方法をお調べ下さい。

$ sudo /etc/init.d/bitnami restart apache
3. 証明書の自動更新設定

この証明書は3ヶ月しか有効期限が無いので、3ヶ月毎に更新作業をしなかればなりません。毎回この手順をやるのはちょっと面倒くさいので、自動更新の設定をします。

自動更新はcronで行います。cronの設定前に、実際にcronで実行するコマンドが正常に実行できるか確認します。

下記が自分の更新用のコマンドです。–post-hookには自身のサーバーのApache再起動コマンドを指定して下さい。

$ sudo /usr/bin/certbot-auto renew --post-hook "/etc/init.d/bitnami restart apache"

正常に実行できれば下記のようなメッセージが出力されると思います。今回は先程証明書を作ったばかりなので、skippedされている事が分かります。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/eejanaica.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
/etc/letsencrypt/live/eejanaica.com/fullchain.pem expires on 2019-08-31 (skipped)
No renewals were attempted.
No hooks were run.

次にcronの設定を行います。
cronの設定は簡単で/etc/cron.d/letsencryptのファイルを作成して、下記を追記するだけです。
※自分は毎日am3:00に実行されるようにしましたが、そこは適宜変更して下さい。

00 03 * * * root /usr/bin/certbot-auto renew --post-hook "/etc/init.d/bitnami restart apache"
4. HTTPにアクセスがあった場合、HTTPSにリダイレクトさせる

最後に、まだHTTPサイトにアクセスできる状態ですので、HTTPにアクセスが来たら、HTTPSにリダイレクトする設定を入れます。

通常はドキュメントルート以下にある.htaccessファイルに下記を追記するだけで大丈夫だと思います。追加する場所は一番上です。

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

ただ、僕の場合は、.htaccessが有効化されていなかったので、有効化するために下記ファイルのAllowOverrideをAllに変更し、ApacheのRestartを行う必要がありました。

/opt/bitnami/apps/wordpress/conf/httpd-app.conf

これでHTTPでアクセスしてもHTTPSページにリダイレクトされると思います。SEO対策もバッチリですね。
下記現在のサイトのスクリーンショットです。URLの左の”NotSecure”が消えていますね。

まとめ

久しぶりにSSLの設定を行ってみて、今やもう無料で証明書が取れることに驚きました。

ただ、証明書の認証レベルが1のドメイン認証なので、そこは注意が必要です。個人情報の入力が必要なサイト等は認証レベル2以上の証明書を使用するべきだと思います。ですが、個人のブログサイトなどは、無料の証明書でも充分じゃないでしょうか。

では、まだサイトをSSL化させてないという方は是非やってみて下さい!