C#中服务端调用SslStream.AuthenticateAsServer()方法的作用是什么?
服务端调用AuthenticateAsServer的作用说明
你对这个方法的功能存在误解,它并不是服务端对自身做身份验证,而是触发服务端侧的TLS握手流程,是建立加密TLS通道的必需步骤,核心作用有两个:
- 向连接的客户端发送服务端配置的证书,由客户端完成服务端身份的合法性校验,避免客户端连接到伪造的恶意服务端,这是TLS协议最基础的安全能力
- 和客户端协商出后续通信使用的对称加密会话密钥,之后所有通过
SslStream传输的数据都会自动用这个密钥做加密、解密、篡改校验,保证通信的安全性和完整性
示例代码逻辑补充说明
static void ProcessClient (TcpClient client) { // A client has connected. Create the // SslStream using the client's network stream. SslStream sslStream = new SslStream( client.GetStream(), false); // Authenticate the server but don't require the client to authenticate. try { sslStream.AuthenticateAsServer(serverCertificate, clientCertificateRequired: false, checkCertificateRevocation: true); // Display the properties and settings for the authenticated stream. DisplaySecurityLevel(sslStream); DisplaySecurityServices(sslStream); DisplayCertificateInformation(sslStream); DisplayStreamProperties(sslStream);
- 示例中参数
clientCertificateRequired: false表示使用的是单向TLS认证模式,这是最通用的TLS使用场景:只要求客户端校验服务端身份,服务端不需要校验客户端身份,日常访问所有HTTPS网站都是用的这个模式 - 如果你跳过这个方法调用,
SslStream不会完成TLS握手流程,后续的读写操作会直接报错,也无法实现加密通信的效果,完全没必要使用SslStream类,直接用原始的NetworkStream即可
内容的提问来源于stack exchange,提问作者ignoramus maximus
相关产品推荐
相关产品推荐

