主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

HTTP Strict Transport SecurityがIEにやっと実装されたようなので試してみる

                
 Win8.1とWin7のIE11にHTTP Strict Transport Security(HSTS)が実装されたそうなので試してみる。
https://developer.mozilla.org/ja/docs/Security/HTTP_Strict_Transport_Security
 参考は上記リンク。HTTP Strict Transport Securityとはサーバ側からクライアントに「これ以降HTTPSでアクセスしてこいや」という命令があったときにそれに従う機能である。命令を受け入れるとそれ以降はHTTPでアクセスしようとしてもHTTPSアクセスが強制されるようになる。

 今回はいわゆるオレオレ証明書を使ってHTTPSサーバを立てる。言語はPythonでフレームワークはTornadoを使う。ページは"/"のみ存在しており、"/"へアクセスすると現在時間をヘッダにHSTSセットした状態で返す(ただしHTTPS強制が有効な時間は一分間に設定)。つまり一度"/"にアクセスすると、以降は有効期間が一分間のHSTSがセットされるというサイト。
 このサイトはHTTPSでのみ公開される。HTTPでアクセスしても返すものがないのでエラーとなる。そんなものが下記のPythonスクリプト。

import os
import datetime

import tornado.wsgi
import tornado.httpserver


HTML = """<!DOCTYPE html>
<html>
<head>
<meta>
<title>hello</title>
</head>
<body>
{0}
</body>
</html>
"""


class MainHandler(tornado.web.RequestHandler):
def get(self):
self.add_header("Strict-Transport-Security", "max-age=60; includeSubdomains")
self.write(HTML.format(datetime.datetime.now()))


if __name__ == "__main__":
application = tornado.wsgi.WSGIApplication([
("/", MainHandler),
])
ssl_settings = {
"ssl_options": {"certfile": os.path.join("crt/tor.crt"),
"keyfile": os.path.join("crt/tor.key")}
}
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container, **ssl_settings)
http_server.listen(8888)
tornado.ioloop.IOLoop.current().start()


 上記スクリプトを走らせて、https://localhost:8888/へアクセスしてみる。ブラウザはWin7で最新アップデートを適用したIE11。
 サーバからのレスポンスとして現在時間が取得できている。
1506130030218.jpg

 レスポンスヘッダを見てみるとStrict-Transport-Securityが設定されている。
1506130031186.jpg

 Strict-Transport-Securityが設定された状態でURLのhttpsをhttpにしてアクセスしてみる。httpでアクセスしてもサーバからはエラーが返されるはずなのに、現在時間がbodyとして書かれたHTMLがサーバから返ってきている。これはHTTPSでリクエストが送られたということだろう。開発者ツールのほうではプロトコルはHTTPのままになっているが……
1506130032271.jpg

 ただのhttpアクセスではエラーが出るのを確認するため、Strict-Transport-Securityの有効期間である一分待ったのちにhttpアクセスをもう一度かけてみた。結果は下記のようにエラー。
1506130034215.jpg



 念のため仮想マシンでサーバを立て、FiddlerでキャプチャすることでHTTPアクセスをしていないか改めて確認してみた。
 SSL通信でしかコンテンツを配信してないサーバにまずHTTPSアクセスしてHTTPS強制命令を取得。後にコンテンツのあるパスを打ち込んでHTTPアクセスするとアドレスバー内のアドレスがhttpsに書き換えられた状態でページが表示された。コンテンツのないパスを打ち込んでHTTPアクセスするとアドレスはhttpのまんまでNot Foundエラー表示。 両方の場合ともFiddlerでプロトコルを確認するとHTTPSアクセスしか行っていなかった。HTTPでのアクセスは一切なし。正しい。
 さらに同じドメインへのリンクをhttp://始まりで置いてこれを踏んでみたところ、これもまたHTTPSでアクセスが行われた。HTTPS強制できている。
1506131412235.jpg
 アドレスが手打ちだろうとリンク踏みだろうと、HTTPSの強制化が確認できた。



 IE11に実装されたHSTSを試してみた。Strict-Transport-Securityをレスポンスヘッダにセットすることで以降のアクセスはHTTPSに強制されたようだ。だが一方で、Strict-Transport-Security有効状態でHTTPでアクセスしたときに、開発者ツールにはプロトコルがHTTPのままで表示された。ちょっと紛らわしい状態。

http://blogs.windows.com/msedgedev/2015/06/09/http-strict-transport-security-comes-to-internet-explorer-11-on-windows-8-1-and-windows-7/


 ちなみにSSLを使うハードルの一つにSSL証明書が有料ということがある。これが無償配布される話が出ていてとても気になる。
http://itpro.nikkeibp.co.jp/atcl/column/14/346926/121500129/
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。