ブロックチェーン・AI・システム開発の株式会社INDETAIL

WEBサイトの常時SSL化をやってみて分かったこと

2017.03.17
kirksencho

Security

最近の札幌市内は、雪が減って道路のアスファルトが見えるようになり、車の運転がしやすくなってきました。
そろそろ氷結した湖や沼も融け始めるので、先日氷上ワカサギ釣り納めをしてきたkirksenchoです、こんにちは。

さて、私のインフラ系ブログの第13回目は、最近普及してきている、WEBサイトの常時SSL化(HTTPS化)をやってみて、色々と分かった事を書いてみたいと思います。

導入のきっかけ

弊社のコーポレートWEBサイトをご覧になっていただいていた方はご存知だったと思いますが、先月の頭まではSSL完全非導入(HTTPのみ)となっておりました。

問い合わせフォームだけSSL化というのは昔からよく行われているパターンですが、Googleが常時SSLサイトのランキングを優遇するという発表を2014年に行っており、SEO対策にも繋がる為、今やるなら常時SSL化にしましょうということになりました。

常時SSL化のメリットについて

上記導入のきっかけに記載した、SEO対策のひとつとして有効となる他に、以下のメリットがあります。

通信速度の向上

暗号化して復号化する処理があるので、普通に考えると遅くなるようなイメージがありますが、昨今のCPU処理能力は飛躍的に上昇しており、たいした問題ではなくなってきています。
そればかりか、新しいHTTP/2プロトコルが使用される場合は、逆に早くなるケースもあるそうです。

WEBサイトの信頼性の向上

組織認証型SSLサーバ証明書を導入することにより、その企業のWEBサイトであるということが、認証局により証明されます。
ブラウザで証明書に記載されている組織名等を確認する事もできますので、本物のサイトであることがユーザに分かって貰えます。

また、ブラウザでもHTTPの場合は「保護されていません」や「この接続は安全ではありません」という表示が出てしまい、ユーザ側に不安を与えてしまってWEBサイトの閲覧をして貰えなくなる可能性がありますが、HTTPSであれば「保護された通信」や「安全な接続」と表示されるので、ユーザ側に安心感を与える事ができます。

通信暗号化により、改竄や盗聴などへのセキュリティ対策向上

ブラウザとWEBサーバ間の通信が暗号化されるので、間でデータを盗み取られたり、改竄されて中継されてしまう危険性が下がります。

SSLサーバ証明書の認証レベルについて

証明書には、DV(ドメイン認証)、OV(組織認証)、EV(拡張認証)という用途に応じた認証レベルがあります。

DVはドメインさえ所有していれば、個人でも取得可能な安価なタイプですが、企業のコーポレートサイト向けではありません。

OVは実在している会社組織等でないと取得ができない審査の厳しいタイプで、お値段も上がります。
通常のコーポレートサイトではよく使われているので、弊社もこのタイプを選択しました。

EVは金融機関のダイレクトバンキングサイト(例:三井住友銀行)等、非常に高いレベルの認証を必要とするWEBサイト向けで、お値段更にどーんと上がります。URLバーに組織名が表示されたり色も緑色になるのでとても目立ちます。

SSLサーバ証明書の種類について

認証レベルの他に、単一コモンネーム用、ワイルドカード用、マルチドメイン用という種類があります。

単一コモンネーム用は、その名の通り、一つのFQDNのみで使用できるタイプです。
弊社のコーポレートWEBサイトはサブドメインが「www」のみを使用しておりますので、このタイプを選択しました。

ワイルドカード用は、サブドメイン部分をアスタリスクとしてコモンネームを指定するタイプで、複数のサブドメインを一つの証明書でSSL化したい場合に使います。

マルチドメイン用は、プライマリドメインの他に全く異なるドメインを複数追加できるタイプです。
複数のドメインを管理している場合の各種コスト削減をしたい時や、一つのIPアドレスで異なるドメインのサイトを動かしたい時などに使われます

SSLサーバ証明書の取得方法について

SSLサーバ証明書を発行している組織から直接購入する方法と、複数の発行組織のSSLサーバ証明書を扱っている代理店から購入する方法などがあります。
どちらから購入しても、入手できる証明書に違いはありませんが、代理店経由の方が安価に手に入るようです。

OVタイプのSSLサーバ証明書取得に必要な準備について

会社組織としての基本情報を申請時に提出するので、それらを全て把握している必要があります。
また、DUNS(Data Universal Numbering System)の番号や、帝国データバンク企業コードの情報を求められる場合もあります。

iタウンページなどで、企業名が登録されているかどうかも、審査のポイントとなるので、確認しておくことが大事です。
弊社名も「インディテール」で検索すると、東京、名古屋、札幌それぞれの拠点がヒット致しました

申請組織担当者の氏名、所属、連絡先等も必要ですが、組織の管理職以上の役職者である必要があり、本人に電話がかかってきて実在確認が行われますので、それを踏まえて担当者名を記載しなければなりません

申請時にはCSRが必要になりますが、これは自分で作成します。
opensslコマンドで秘密鍵を作成し、その鍵を元に同様にopensslコマンドでCSRを作成します。

以下にコマンドの例を記載します。

WEBサーバへのSSL証明書設置について

SSLサーバ証明書が発行されましたら、apache等のWEBサーバでSSLサーバ証明書を使用する為の設定を行ないます。
一般的にhttpdのconfファイルに以下の3つのファイルの指定と、SSL通信のプロトコル等の設定が必要です。

ファイル指定

SSLCertificateFileは、認証局から発行されたSSL化したいコモンネームが設定された証明書ファイルです。
SSLCertificateChainFileは、認証局で汎用的に使用される、証明書種別ごとの共通な中間CA証明書ファイルです。
SSLCertificateKeyFileは、CSR作成前に自前で作成した秘密鍵のファイルです。

SSL通信設定

※以下の設定はVirtualHostディレクティブの外に記載します。

上記設定の重要ポイントは以下です。
・POODLEの脆弱性対策としてSSLv3を無効化
・危険なRC4暗号スイートを無効化
・Logjamの脆弱性対策としてDiffie-hellman(DH)鍵交換を無効化しサーバー側の暗号スイートを優先
・HSTS(HTTP Strict Transport Security)でHTTPS通信を強制

httpd起動時の秘密鍵パスワード入力の仕組みを追加

CSR作成の為の秘密鍵には、パスワードが設定されています。
パスワード無しでも作成できますが、今回はパスワード有りで作成している為に、httpd起動時にそのパスワードを聞いてきます。
入力しない限りWEBサーバが起動しないので、無人で再起動等がかかった場合は起動しないで止まってしまいます。
その対策として、自動応答のシェルスクリプトを作成し、apacheの設定ファイルに記載することができます。

SSL Server Testによる診断

高価なSSLサーバ証明書を導入しても、WEBサーバのSSL関連設定に問題があると、脆弱性を突かれてサーバが攻撃されてしまう可能性があります。
そこで脆弱性が残っていないかどうかを診断するサイトがあるので、利用させていただきます。

QUALYS SSL LABSのSSLサーバテスト

上記サイトに弊社コーポレートサイトのURLを入れて診断させた結果は以下の通り、最高クラスのA+になりました。
SSL Server Test Result

常時SSL化導入後の問題と対策

常時SSL化導入後に、以下のようにいくつか問題が発生しました。
一部のページのみで発生する不具合ですが、それぞれの問題点と対策をまとめてみました。

問題点1

元が非SSLサイトだったので、URLが「http://」から「https://」になることによって、一部のページで不具合が発生しました。
コンテンツの中でリンクを記載する場合に、「http://」で始まる絶対PATHをベタで記載してしまっていたのが原因です。
その為、リンクが正常に動作せずにCSSが読み込まれなかったり、ページが何も表示されないという現象が発生してしまいました。

対策1

WEBコンテンツを作成する場合は、絶対PATHではなくて、ルートPATHで記載しておくと今回の問題は未然に防げます。
相対PATHでも同様の効果はありますが、そのファイルが存在する階層からの相対的な位置を把握してコンテンツを作成する必要があるので、開発側はとても辛くなります。
ルートPATHであれば、WEBサーバのドキュメントルートから「/cmn/img/sample.png」といった感じで書けるので、相対的な位置を把握する必要もなく、「https://」に変わっても影響を受けませんので、おすすめです。

問題点2

弊社のブログはWordPressを利用しておりますが、我々執筆者の画像イメージであるアバターをプラグインを利用して設定&表示しておりました。
そのプラグインが「http://」固定で画像へのリンクを出力する仕様だった為、「https://」に変更することができずにアバターが非表示となってしまいました。

対策2

プラグインのHTTPS対応を待つわけにはいきませんので、WordPressのアバター標準機能を利用して、設定&表示するように変更しました。
標準機能を利用する為には、WordPressアカウントのEメールと同じアドレスを使用してGravatorのアカウントを作成する必要があり、ちょっと手間がかかりますが、自前でHTTPS対応プラグインを開発するよりは遥かに簡単です。

問題点3

問題点1と原因は同じですが、「http://」で表示している画像があった為に、そのページだけ非セキュアとブラウザで表示されてしまいました。
画像自体は表示されていますが、ブラウザの警告で一部の画像が改竄されている危険があると表示されてSSL無効となってしまいます。
問題点1のようにページ自体の表示がおかしくなることは無いですが、改竄警告が出てSSL無効になってしまっては意味がありません。

対策3

対策は問題点1と同様で、「http://」で表示している画像のimgタグ等の部分を修正すればOKです。
ただ、画像を外部のHTTPS非対応サーバから参照して表示している場合などは、表示できなくなってしまうので、画像を同じサーバにコピーして参照するか、参照先のサーバもHTTPS化する必要があるでしょう

おわりに

今回は、弊社コーポレートWEBサイトを常時SSL化して分かったことや、設定手順等をまとめてみました。
今後ますます世界的に常時SSL化の波は押し寄せてくると思いますので、早めに波に乗ることをオススメ致します。

kirksencho

主な職種:インフラエンジニア ハードからソフトまであらゆるインフラ面を担当させていただいてます。 社内では、ダーツ部、ボウリング部、フィッシャー部、肉部、スイーツ部、写真部等に所属しています。 ブログは主に地味なインフラ関連の記事を書いています。 宜しくお願いしますm(_ _)m