大家,我想写一些关于SSL和这里的问题:SslStream认证失败
我已经建立了下面的事情:
- CA证书(自制CA)
- 服务器PFX,服务器证书,服务器密钥(由自制CA为“localhost”签署)
现在我使用的.Net SslStream来测试连接:(客户端和服务器都在不同的线程,和TCP连接离子已建成)
客户:
sslStream.AuthenticateAsClient("localhost");
服务器:
sslStream.AuthenticateAsServer(serverCert);
//serverCert is X509Certificate2 built from "server.pfx"
客户的AuthenticateAsClient方法将抛出一个异常
“根据验证过程的远程证书无效“。
我想是因为服务器的证书是由不可信的CA签名的,所以身份验证失败了,那我该如何将CA证书添加到我的信任列表中呢?
我尝试添加下面的客户端代码的代码,但它不会工作
X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
store.Add(new X509Certificate2(Resources.CACertPath));
store.Close();
sslStream.AuthenticateAsClient("localhost");
一种方法是完全丢弃CA并编写验证回调函数,将证书指纹与硬编码值进行比较。 – CodesInChaos
@CodesInChaos是的,我可以实现RemoteCertificateCallback并设法返回true,但这种方法是有限的,因为如果我们想要信任一个新的证书,我必须修改代码。我想知道是否有一种方法可以在C#代码中加载CA证书? – Jerrylk