質問: こんにちは、初めての質問になります。 先日、同僚からセキュリティで保護された(https)ページにて保護されていない(http)ビデオのコンテンツが表示されない問題をみせられて、調査をしたら、Chromeでブラウザの動作に理解できないことがあってここで質問をしたいです。 ビデオのコンテントはObjectタグをしています。コードは書きのようになっています。 ``` ... ``` 私の理解では 表示するページ → 表示するビデオコンテント → 期待する動作 HTTP → HTTP → 動作します。 HTTP → HTTPS → 動作します。 HTTPS → HTTP → 動作しますがブラウザがhttpとhttpsのコンテンツが混在の警告 HTTPS → HTTPS → 動作するはずなのか動作しません。 両方HTTPSを使用して動作しないのはビデオフィードをホストするサーバー上の証明が正しくないとエラーが出たので動作しないのは納得できますが、納得できないのは下記の場合です。 Chrome Version 39.0.2171.95 m での検証です。 タブを二つ開きます。 タブ1で、HTTPSページ例えば: を開きます。ビデオが表示されない。 タブ2で、Objectに使用されているdataのurlをHTTPSでアクセスします。 例えばhttps://service.twistage.com/plugins/player.swf を開きますと警告され、続けるとページがロードされますが、IDがないとメッセージが表示されます。 この時点でタブ1に戻ってページをリロードします。今度はビデオが表示されます。 もしかして、player.swfがキャッシュされてのでと思ったのですが、player.swfをローカルにダウンロードして 下記のようにURLを変更しでも動作しない。 ``` ... ``` この問題はYoutubeや、HTTPS接続が提供されている会社の場合はまったく問題がないです。 業者を変えればするのはなしですが、Chromeにてなぜこのようなの動作をするのかを理解したいので、 もしどなたこの動作の理由を説明していただければ幸いです。
回答: SSL の存在理由の一つに「コンテンツを安全なサーバから入手したものかを検証できる」ことがあります。 安全でないと判断されると、 Chrome は、`net::ERR_INSECURE_RESPONSE` エラーなどの報告とともに、コンテンツ入手を厳しくブロックします。 今回の場合は、 SSL の証明書に問題のあるサーバからのコンテンツがブロック対象となったのでしょう。 次に試される場合に、Chrome の 開発ツール を開き、 Network タブを見ながらページを読み込ませてみてください。質問にある分析と異なる見解が得られると思います。少なくとも コンテンツ1(ServerA with HTTP) -> コンテンツ2 (ServerB with insecure HTTPS) の参照でのアクセスはブロックされていたはずです。 !importing_insecure_contents_from_http_page SSL 接続によりサーバの安全が検証できないというのは、読み込んだページと別サーバにコンテンツがあり、別サーバの証明書が自己署名のものなどで安全性が十分でなかった、または、別サーバが容認できない危険なバージョンのプロトコルを使ったなどの理由があります。今回、質問内容にはそのエラー内容が書かれていませんから、何だったかのは言えません。 お作りのコンテンツの公開に向けては、SSL 接続を利用するサーバについて、証明書を第三者に証明された物にする (第三者機関にチェックされた証明書にする) ことが必要になってくるかと思います。めんどくさいですか。めんどくさいですね。 Chrome の起動時に、 `--ignore-certificate-errors` オプションを渡すとこの警告をバイパスできます。このオプションでだいぶ挙動は変わるはずです。ただし、このオプションは 「SSL の存在理由」を否定するものですので、サイトのデプロイ時までに、証明書周りの問題がないようにしておかなければなりません。 !loading_insecure_contents_with_ignore_certificate_errors_option