如何对自定义套接字 TCP 协议使用证书身份验证?
How to use certificate authentication for custom sockets TCP protocol?
我知道WCF有证书认证。我怎样才能为我的自定义套接字协议做同样的事情?我应该使用什么 类 来验证证书?我应该在各方之间传输哪些数据?需要哪些步骤?
假设您要使用 SSL:
在服务器端,您可以将 NetworkStream
包装在 SslStream
中并使用 X509Certificate
:
进行身份验证
SslStream stream = new SslStream(networkStream, false);
stream.AuthenticateAsServer(certificate, false, SslProtocols.Default, false);
第二次调用中的 false
控制服务器是否要求客户端也有证书。
This link 包含生成自签名证书的代码,在开发过程中很方便。
在客户端,您必须提供验证回调:
SslStream stream = new SslStream(networkStream, false, ValidateRemoteCertificate);
stream.AuthenticateAsClient(RemoteHost);
如果需要,您可以在 AuthenticateAsClient 重载中提供客户端证书。
private bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}
// Here you decide whether self-signed certificates are OK
if (allowAnyCertificateAnyway)
{
return true;
}
return false;
}
我希望这会有所帮助,它使用 NetworkStream
,它最终只是 Socket
的包装器。这些都内置在框架中,您可以 read/write from/to SslStream
就好像它是常规的 NetworkStream
.
我知道WCF有证书认证。我怎样才能为我的自定义套接字协议做同样的事情?我应该使用什么 类 来验证证书?我应该在各方之间传输哪些数据?需要哪些步骤?
假设您要使用 SSL:
在服务器端,您可以将 NetworkStream
包装在 SslStream
中并使用 X509Certificate
:
SslStream stream = new SslStream(networkStream, false);
stream.AuthenticateAsServer(certificate, false, SslProtocols.Default, false);
第二次调用中的 false
控制服务器是否要求客户端也有证书。
This link 包含生成自签名证书的代码,在开发过程中很方便。
在客户端,您必须提供验证回调:
SslStream stream = new SslStream(networkStream, false, ValidateRemoteCertificate);
stream.AuthenticateAsClient(RemoteHost);
如果需要,您可以在 AuthenticateAsClient 重载中提供客户端证书。
private bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}
// Here you decide whether self-signed certificates are OK
if (allowAnyCertificateAnyway)
{
return true;
}
return false;
}
我希望这会有所帮助,它使用 NetworkStream
,它最终只是 Socket
的包装器。这些都内置在框架中,您可以 read/write from/to SslStream
就好像它是常规的 NetworkStream
.