[C#]WebSocketを試してみる。クライアントSSL通信編。

WebSocketでSSL通信。
この投稿ではSSL通信を行うサーバーを試したのでクライアント編。
SSL通信を行うにはWebSocketサーバーへの接続URIが”ws://”ではなく”wss://”になります。

基本的にSSLの検証が通ればソース変更の必要はなし。
C#に関わらず、各WebSocketライブラリはWebSocketの規格に準拠して作られているはずなので、”SSL/TLS Support”とかライブラリのドキュメントに書いてあればSSLが使えるのだと思います。
SSLは通信が安全であるかを証明したうえで通信を行います。.NetFrameworkなどは検証を行う仕組みが存在するので、そこが通ってしまえばソースコードの改修は要らないはずです。

ちゃんとやろうとするとちょっと面倒だし、SSLを使った開発やテストなどの目的で検証を無理やり通してしまうやり方もあるので、ここでは無理やり突破してSSL通信を試します。

WebSocket4Net編
WebSocketインスタンスのAllowUnstrustedCertificateプロパティにtrueを設定します。

            var ws = new WebSocket("wss://192.168.1.22:7681/");
            ws.AllowUnstrustedCertificate = true; // 信頼されない検証を通す

System.Net.WebSockets.ClientWebSocket編
System.Net.WebSockets.ClientWebSocketはWindows8向けです。
下記の記事などを参照に通します。

@IT – SSL通信で信頼されない証明書を回避するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/867sslavoidverify/sslavoidverify.html

接続前に検証を通すコールバックを設定します。

                    ServicePointManager.ServerCertificateValidationCallback += (s, certificate, chain, sslPolicyError)=>true; // 信頼されない検証を通す

                    await _ws.ConnectAsync(new Uri(textBox1.Text), CancellationToken.None); // WebSocketの接続

ちなみにWebSocket4Netはソケットの接続部分がラップされているので、System.Net.WebSockets.ClientWebSocketと同じ方法ではダメでした。

実行画面(左上:WebSocket4Net,左下:ClientWebSocket,右:libwebsocketsサーバー)

Windows8上でブラウザでのWebSocket(SSL)接続ができず。。。
SSL通信を無理やり通している為か、Windows8上でChrome,FireFox,IEを使用してwssによる接続を試しましたが、どれも接続完了しませんでした。
IE10に関しては無理やり突破すらできないようです。
Img20130319172309

コメントを残す

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

CAPTCHA


This blog is kept spam free by WP-SpamFree.