プログラミングとかブログ

Unity/C#/SRPGStudio/RPGツクールMVの情報とかその他気になったことを調べて書きます。

HttpClientでhttps通信できるのだろうか?

System.Net.Http.HttpClient 接続のセキュリティを確保する方法 (C#/VB と XAML を使った Windows ストア アプリ) (Windows)を見ると、以下のようにhttpsURIを指定するだけでOKのようです。簡単ですね。

await (new HttpClient()).GetAsync("https://www.contoso.com/");

とはいえ、あまり簡単すぎると疑ってしまうのが人のサガ。
というわけで、Wireshrakで通信キャプチャして調べてみました。
以下HttpClientクラスを使って某サイトへログインしたときのキャプチャデータです。
コードはそのうち書きます。

f:id:shirakamisauto:20150526175712j:plain
①:SSL/TLS通信 ②:GETリクエスト送信 ③:②の送信内容のクッキー部分

①の枠内を見ると、Client HelloとかServer HelloとかCertificateとかをクライアントとサーバーでやりとりしています。
これがhttps通信というかSSL/TLS通信をしていることを表しています。
詳しいことはClient Helloでググれば出てきますのでここで省きます。

この通信のあと、②でGETリクエストを送信してサイト側にアクセスしています。
②の通信内容の中の③の部分を見ると、クッキーを送信していることがわかります。
ログインが成功しなければクッキーは取得できないので、SSL/TLS通信によって暗号化されたログイン処理が行われたことがわかります。

以上からHttpClientでhttps通信ができていることが確認できました。