【发布时间】:2013-07-02 13:39:51
【问题描述】:
我正在开发一个需要管理不同 SSL 服务的服务器应用程序。 每个服务都有自己的证书(当然,有不同的 CN)。 我想使用SNI 来提供正确的证书,但在对流进行身份验证之前,我正在努力阅读 ClientHello(SNI 扩展所在的位置)。
代码如下:
byte[] ClientHello = new byte[3000];
Stream TargetStream = TargetTcpClient.GetStream();
//Whatever I write here let me be unable to successfully authenticate
//If I don't read anything (like in this way), it works perfectly
int ClientHelloN = 0; //TargetStream.ReadByte();// TargetStream.Read(ClientHello, 0, 3000);
/*SNI Logic to extract Server-name*/
Certificate = new X509Certificate2(/*PATH TO CORRECT CERTIFICATE*/);
SslStream SSLStream = new SslStream(TargetStream);
SSLStream.AuthenticateAsServer(Certificate);
如果我直接使用前缀证书进行身份验证,则没有问题,但是当我尝试从流中读取一个字节时在身份验证之前,它会在 AuthenticateAsServer 方法中永远循环。
【问题讨论】: