このすみノート

Webエンジニアが技術や趣味を書くブログです。

はてなブログの独自ドメインにおけるHTTPS(SSL)化の設定方法と、実装の技術解説

このすみです。このたび、はてなブログの独自ドメインで運営している当ブログ(このすみろぐ)を、HTTPS(TLS/SSL)化しました。

f:id:konosumi:20180616033127p:plain

ブラウザでも確認しましたが「Let's Encrypt」による証明書が発行されていることが確認できました!

設定そのものはすぐに完了しましたが、せっかくですので解説をしていきたいと思います。

HTTPS化について

何故HTTPS化する必要があるのか?

HTTPS化する理由は、主に以下の3点です。

  • 各種ブラウザ(Google Chrome, Firefox, Safari...etc)において、HTTP(非SSL)のままでは、今後警告が出る可能性がある
  • HTTPSでないサイトは、Google検索の順位が下がる傾向にある
  • Googleを始めとして、常時HTTPS(SSL)化が提唱されているため

常時SSL化の提唱そのものは、かなり以前から叫ばれていました。これは、利用ユーザーを保護するためです。HTTPS環境下では通信が暗号化されるため、より安全にWebサービスを利用することができます。

参考

webtan.impress.co.jp

HTTPS化によるデメリット

当然ですが、HTTPS化にはメリットだけではなく、デメリットもあります。

端的に言ってしまえば、わざわざ通信を暗号化する必要があるため、一般的にレスポンスの速度は下がる傾向があります。

但し、当ブログは強大な「はてなブログ」のバックエンド上で運営しているので、そこまでのデメリットにはなりません。

はてなブログ設定編

独自ドメインにおけるHTTPS化のやり方

はてなブログの管理画面から、設定をクリックします。詳細設定のタブを開くと、HTTPS配信という項目がありますので「HTTPS配信の状況を確認する」をクリックします。

f:id:konosumi:20180616035600p:plain

クリックすると次の画面に進み、HTTPS化における注意事項が表示されます。「変更する」をクリックします。

なお、「一度HTTPS化してしまうと元のHTTP通信には戻れません」のでご注意ください。

f:id:konosumi:20180616035855p:plain

HTTPSに切り替えてすぐの状態では、証明書の発行が追いついていない状態です。そのため、ブログを開こうとしても警告が出る可能性があります。少し待ちます。

ちなみに、筆者の場合は、約1分ほど待ちました。その後は無事に証明書が発行されたようでして、警告が出ることもなくなりました。

f:id:konosumi:20180616040124p:plain

発行された認証証明書の有効期限は約3ヶ月になっていますが、自動で更新されるため特に気にする必要はありません。

f:id:konosumi:20180616040445p:plain

HTTPへの通信はリダイレクトされる

はてなブログの設定を切り替えると、ブログのURLは以下のように変更されます。

なお、旧URLでアクセスしても、新URLに自動的に転送されます。

技術的な話をしておきますと、転送は「301」で行われているため、外部サイトからのリンクを始めとするSEOパワーも、全て新URLに引き継がれます。「はてなブログ側」が自動で転送するため、特に何かをする必要はありません。

f:id:konosumi:20180616115534p:plain

但し、301転送を挟むアクセスとなるため、転送のないアクセスよりは通信に時間がかかります。可能な限りは、「HTTPの旧リンク」を「HTTPSの新リンク」に差し替えることが望ましいと言えるでしょう。

技術解説編

「Let's Encrypt」とは何か?

はてなブログの独自ドメインにおけるSSL証明書は、「Let's Encrypt」によって発行されています。

「Let's Encrypt」は、無料でSSL証明書を発行することができることにより、「TLS/HTTPS」のセキュアな通信を普及させるためのプロジェクトです。

Let's Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLS や HTTPS(TLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。2016年4月12日 に正式サービスが開始されました。

引用:Let's Encrypt 総合ポータル

SSL証明書の発行が無料ではなかった時代には、サイトの運営者はお金を払って、認証局に認証してもらう必要がありました。ただ、お金がかかるとなってしまうと、HTTPSの普及はどうしても滞りがちになってしまいます。

そこで登場したのが「Let's Encrypt」というわけです。

はてなブログの独自ドメインにおけるHTTPS化の実装

もう一点、「Let's Encrypt」の特徴として忘れてはならないのが「証明書の発行・インストール・更新のプロセスの自動化」という点です。

はてなブログの独自ドメインにおけるHTTPS化では、自動化という点を活用しています。自動化によって、多数の独自ドメインのSSL対応に成功しています(注釈:私は中の人ではありません)。

技術的な実装の解説は「AWSではてなブログの常時HTTPS配信をバーンとやる話 」というスライドに掲載されています。

speakerdeck.com

私は実際の発表を聴いたわけではないのですが、スライドから読み解いた要点を共有しておきたいと思います。

独自ドメインのためのHTTPS対応の勘所

通常のWebサーバでは、予めTLSの証明書をサーバ内に置いておき、それを「NginxやApache」などのWebサーバの設定に、仕込んでおくのが普通です。

しかしながら、普通に設定をしてしまうと、多数の独自ドメインがある環境下では、数が多すぎてWebサーバーのメモリーが溢れてしまいます。

そこで、はてなブログでは、ユーザーのブログアクセスに起因してオンデマンドに証明書を取得するという実装になっているようです。実装の鍵は「ngx_mruby」で、ユーザーのアクセスに起因してmrubyが実行される仕組みになっています。

tech.pepabo.com

さらに、そこからGOのAPIを経由してAmazon DynamoDB (NoSQL)上に保存してある証明書を取得し、返却するという仕組みになっています。

さいごに

ようやく、このすみろぐもHTTPS化することができました。はてなブログのHTTPS化構想が発表されてから、9ヶ月が経過していますが、上記の複雑な実装ともなりますと、確かに大変だったと思います。

はてなのエンジニアの皆様、お疲れ様です。

staff.hatenablog.com

・・・というわけで、HTTPS化されてよりセキュアになった「このすみろぐ」を、今後ともよろしくお願いいたします。

補足:TLSとSSLについて

一般的にはSSLという名称のほうが知られているため、記事のタイトルはSSL化としてしまったのですが、正確には「TLS」と言います。

現在の主流は「TLS 1.2」による暗号化通信で、可能な限り「TLS 1.2」による暗号化通信が望ましいです。誤解なきよう、補足しておきます。

ssl.sakura.ad.jp