Windows Phone的SSL套接字支持


背景

image 如前所述 , Windows Phone Mango给Windows Phone应用 带来了套接字支持。 开发者。不幸的是,该平台并没有提供***接字 。 (SSL套接字)开箱即用。现在许多应用程序都需要SSL socket,例如,许多IRC服务器只允许***接字 连接。

解决方案

幸运的是,在一个优秀的OSS库的帮助下,有可能让Windows Phone支持SSL Socket " Bouncy Castle " . Bouncy Castle并没有正式用于Windows Phone,但它是 有可能修改代码,以便为SSL Socket .提供所需的部分。 支持。

我已经修改了代码,并将其与我不久前在博客中提到的 SocketEx -library 打包。下面是一个如何使用SocketEx打开SSL套接字的例子:

private SecureTcpClient CreateConnection()
{
    var connection = new SecureTcpClient(serverAddress, serverPort);
 
    return connection;
}

 

SecureTcpClient继承自TcpClient,所以你应该可以在需要的地方替换TcpClient。

高级用法

SecureTcpClient作为TcpClient和Bouncy Castle的包装物。 城堡。如果需要更多的控制,你可以通过TcpClient创建一个普通连接 然后将其 "提升 "为安全连接。

var connection = new TcpClient("server", 443);
 
var handler = new TlsProtocolHandler(connection.GetStream());
handler.Connect(new LegacyTlsClient(new AlwaysValidVerifyer()));

这样就有可能,例如在服务器发送的证书上添加一些验证。 服务器发送的证书添加一些验证。另一个选择是,将TlsClient 到SecureSockectConnection。

var tlsClient = new LegacyTlsClient(new AlwaysValidVerifyer());
var connection = new SecureTcpClient(serverAddress, serverPort, tlsClient);

支持的协议

SecureTcpClient支持TLS 1.0("SSL 3.1")协议。支持以下的密码套路。

TLS_DHE_ARSA_ WITH_AES_256_CBC_SHA
TLS_DHE_ARSA_ WITH_AES_128_CBC_SHA
TLS_DHE_ARSA_ WITH_3des_EDE_CBC_SHA
TLS_DHE_DSS_ WITH_3des_EDE_CBC_SHA
TLS_SASA_ WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA

客户端支持简单的TLS握手,其中服务器而不是客户端得到了认证。

样本和源代码

SocketEx 的 s 代码可从GitHub获得。它有两个例子。一个用于TcpClient,一个用于SecureTcpClient。

NuGet

SocketEx.SecureTcpClient也可以从NuGet获得包 SocketEx.SSL .