我正在尝试连接基于Java netty的服务器,它自动为自己生成证书(服务器人告诉我,现在接受来自客户端的任何证书).
我的任务是将TcpSocket连接迁移到Tls加密连接.
首先,我将TcpSocket转换为NetworkStream:
using (var client = new NetworkStream(connection.TcpSocket))
{
if (client.CanRead)
{
client.BeginRead(recvState.DataBuffer, 0, recvState.DataBuffer.Length, ReceiveCallback,
recvState);
}
}
Run Code Online (Sandbox Code Playgroud)
这是完美的.那么,我决定构建SslAuthentication - 就像这里:
using (var client = new NetworkStream(connection.TcpSocket))
using (var sslStream = new SslStream(client, false, App_CertificateValidation))
{
var clientCertificate = new X509Certificate2("client.pfx");
var clientCertificateCollection = new X509Certificate2Collection(new[] { clientCertificate });
sslStream.AuthenticateAsClient("MyServer", clientCertificateCollection, SslProtocols.Tls, false);
if (sslStream.CanRead)
{
sslStream.BeginRead(recvState.DataBuffer, 0, recvState.DataBuffer.Length, ReceiveCallback,
recvState);
}
}
Run Code Online (Sandbox Code Playgroud)
哪里client.pfx是没有密码随机证书,如在项目中的文件,并导入到Current User Certificates > Personal > Certificates的certmgr.msc.
问题是AuthenticateAsClient抛出一个
System.IO.IOException:身份验证失败,因为远程方已关闭传输流异常.
另外,如果AuthenticateAsCtlient方法中的主机名意味着什么,如果服务器接受每个证书?我应该把重点放在哪里吗?
我仍然可以联系服务器人员,所以我可以向他们询问一切 - 我们是否需要任何其他信息?
| 归档时间: |
|
| 查看次数: |
12051 次 |
| 最近记录: |