28. 10月 2018 · Write a comment · Categories: その他 · Tags:



はじめに

中部地方でWebエンジニアをしています。今回自社運営しているサイトを常時SSL対応しました。
先日、日本時間2018年10月17日にChrome70がリリースされ、HTTPSでないページへの警告がさらにまた1つ進みました。
まだ現状ではHTTPのページも閲覧はできますが、この先常時SSL対応していないサイトはどんどん閉め出されていくことが予想されます。
また、ServiceWorkerなどの技術を導入する際も常時SSL対応がされていないと導入できなかったり(しにくかったり)と常時SSLでないことのデメリットは増えていく一方です。
今回、自社サイトの常時SSL対応をするにあたって行った内容を記述します。
サイト規模はざっくりとしかお伝えできませんが、デイリーPVが200万超えるくらいです。


 

やったこと

  • Mixed Contentの収集
  • ひたすら書き換え
  • 強制SSLリダイレクト

Mixed Contentの収集

常時SSL対応をするにあたってここが一番重要かと思うのですが、実際のユーザーの手元で発生しているMixed Contentを把握する必要があります。
そこで行ったのがContent-Security-Policyの設定です。
どういうことかと言いますと、ヘッダー情報にMixed Contentの発生を通知するような情報を追加します。
これにより、ユーザーの手元で発生したMixed Contentの内容が把握できるようになります。
具体的には.htaccessに以下のような記述を追加しました。


Header set Content-Security-Policy-Report-Only: "block-all-mixed-content; report-uri https://example.com/mixedcontentreport.php"

こうすると、Mixed Contentが発生した際にその内容が https://example.com/mixedcontentreport.php に json で POST されます。
https://example.com/mixedcontentreport.php の部分はご自身の環境にあわせて書き換えてください。
POSTされてくる json は以下のような内容となっています。


{
  "csp-report": {
    "document-uri": "https://example.com/hogehoge/",
    "referrer": "https://example.com/hogehoge/fugafuga/",
    "violated-directive": "block-all-mixed-content",
    "effective-directive": "block-all-mixed-content",
    "original-policy": "block-all-mixed-content; report-uri https://example.com/mixedcontentreport.php",
    "disposition": "report",
    "blocked-uri": "http://example.com/foo.png",
    "line-number": 1,
    "source-file": "https://example.com/hogehoge/",
    "status-code": 0,
    "script-sample": ""
  }
}

上記の例だと https://example.com/hogehoge/ にアクセスした際に http://example.com/foo.png で Mixed Content が発生しています。
この情報を DB に記録してひたすらMixed Contentを潰していかなければなりません。
不毛とも思える対応ですが、他に方法はありません。(あったら教えてください。。。)



ひたすら書き換え

Mixed Content収集の準備が整ったら、続いて HTML、CSS、JavaScript の書き換えを行います。
こちらに関しては要するにリクエストが発生する箇所をすべてHTTPSで読み込むように書き換えます。
使用しているフレームワークによってはある程度システム的に置き換えも可能だと思いますので、こちらに関してはサイトによって対応が変わってきます。


強制SSLリダイレクト

こここまでの対応で常時SSL化の対応準備が整いました。
最後にユーザーからのアクセスを強制的にHTTPSにリダイレクトさせます。
こちらに関しては .htaccess で対応、PHP で対応、ロードバランサで対応などいろいろ考えられますが、まずはアクセスの1%を強制SSLリダイレクトすることをオススメします。
いきなり全アクセスをSSLにしてしまうと影響範囲が大きすぎるため夜中の対応を強いられることになるかもしれません。。。
別に私がそうだったわけではありませんが。。。


まとめ

常時SSL化の対応をしないという選択肢は正直ありえませんので、もしまだ対応をしていないようであれば一刻も早く対応をしたほうが良いかと思います。
やること自体は至ってシンプルですが、ただ面倒くさいのは事実です。
まずは状況把握としてMixedContentの収集をしてみてはいかがでしょうか?


About the author: roswellian

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

post date*