常時SSL、正しいWebサイトの構築ポイント

常時SSLまでの道のり

現状のhttpサーバのみの運用を常時SSL化するには、複数の方法があります。単純にすべてをhttps化してしまう方法もありますが、すべての被リンク先のURLを変更することは事実上不可能であるため、httpによるアクセスを受け付けられなくなってしまいます。まずはhttpsサーバを併用することが一般的といえるでしょう。

httpとhttpsの併用をはじめたら、常時SSL化には主に3つの方法があります。もっとも現実的な方法は、「.htaccess」ファイルでhttpのアクセスをすべてhttpsに転送する方法です。これは「301転送」とも呼ばれ、httpサイトにアクセスしても自動的にhttps化できます。Googleも、この方法はSEOに与える影響がもっとも少ないとしています。

もうひとつの方法は、httpsオプションの提供です。これは、ユーザに常にhttpsを使用できるオプションを提供し、その後オプションの設定をデフォルトでオンに変更しました。Twitterがこの方法を使用して常時SSLに移行しています。3つ目の方法は、https専用のサーバを別ドメインなどによって運用する方法です。別ドメインはすべて常時SSLとなり、認知された時点で完全に移行するというものです。

※httpsサーバの利用台数が増加してしまう場合は、デジサート MPKI for SSLなどの大口顧客向けのサービスの活用やワイルドカード証明書、 SANs(マルチドメイン対応)証明書、1FQDNであれば複数台サーバでご利用いただけるジオトラストの証明書などもご検討ください。

正しいコンテンツを作る①

httpサイトの実装においては、正しいHTMLコンテンツを作成することと、http / https混在の回避、正しいコンテンツ(ページ)を作成することが重要です。

HTMLについては、常時SSL/TLSを前提にソースを記述することが必要です。http / https混在エラーを避けるHTML記述を心がけましょう。HTML、CSS、jsファイル内の「http://」で始まる埋め込みファイルはブラウザが警告を表示するので注意しましょう。また、動画埋め込み、SNSボタン、レコメンド、アフィリエイトタグ、アクセス解析タグ、外部jsファイルなどは、https対応のビーコンタグを利用しましょう。そして、スピードアップのために、なるべく同じドメイン、サブドメインのサーバに置くようにします。

常時SSL/TLS前提にソースを記述

src="../xxxx.html"
src="/xxxx.html"
src="//www.example.com/xxxx.html"
X src="http://~(HTML、CSS、jsファイル内の「http://」で始まる埋め込みファイルはNG

HTTPS対応のビーコンタグを利用

動画埋め込み、SNSボタン、レコメンド、アフィリエイトタグ、アクセス解析タグ、外部jsファイルなど

<script src="https://www.google.com/jsapi" type="text/javascript"></script>

なるべく同じドメイン、サブドメインのサーバに置く

正しいコンテンツを作る②

http / https混在の回避では、httpsのページ内にhttpの画像、js、CSSファイルなどが混在していると、ブラウザが警告を出すこと、Cookieの値が暗号化されず、なりすましされる恐れがあること、httpの画像ファイル等を読み込む際に暗号化していないCookieの値がやり取りされる危険があることなどに留意する必要があります。

- httpsのページ内にhttpの画像、js、CSSファイルなどが混在しているとブラウザが警告を出す
- 結果Cookieの値が暗号化されず、なりすましされる恐れがある
- httpの画像ファイル等を読み込む際に暗号化していないCookieの値がやり取りされる危険がある

サーバへのリクエスト例

サーバへのリクエスト例

正しいコンテンツを作る③

正しいコンテンツ(ページ)の作成では、http接続時にCookieは平文で通信されるので、httpsの接続時だけCookieを引き渡す設定にするなど、Cookieにセキュア属性をつけること、サーバの設定ファイル(.htaccess など)での301転送や、.htaccess などでSSL/TLS接続をブロックしないこと、APIの場合は転送せずErrorを返すこと、robots.txt、No indexなどmeta tagによる検索エンジンのブロック排除しないことなど、httpsへの転送に注意をします。名刺やカタログなどの印刷物にも「https://」と記載することも忘れないようにしましょう。

cookieにセキュア属性をつける

- HTTP接続時にcookieは平文で通信される
- HTTPSの接続時だけcookieを引き渡す設定

Set-Cookie: user=DigiCert; secure

Cookieのセキュアタグ属性を付けなかった場合

HTTPSのサイトであったとしても、偽のアクセスポイントを経由させられた場合、
Secure属性を設定していないCookieは盗聴される

- サイト構成:個人情報ページのみHTTPS、他のページはHTTP(平文)

- 被害者:セッションクッキーはすでに付与されている

- 攻撃者:偽APの罠を仕掛けDst 443ポートをHTTPとしてデコードするように指定(port80を閉じている場合でも有効)

HTTPSへの転送

- サーバの設定ファイル(.htaccess など)で301転送
- htaccess などでSSL/TLS接続をブロックしない
- APIの場合は転送せずErrorを返す
- robots.txt、No indexなどmeta tagによる

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule
^(.*)$ https://ssl.digicert.com/$1
[R=301,L]

RewriteCond %{REQUEST_URI} !^/
exception/*.*$

印刷物に https:// と記載する

Googleで検索してみるとHTTPSサイトと認識されているか分かる

サーバへのリクエスト例

 

常時SSL情報リンクナビ

TLS/SSL サーバ証明書の基本

SSL/TLS サーバ証明書について知っておくべきこと