【发布时间】:2013-10-06 07:37:27
【问题描述】:
大家,我正在尝试写一些关于 SSL 的内容,问题是:
我在下面构建了一些东西:
- CA 证书(自制 CA)
- Server pfx、Server cert、Server key(自制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 是的,我可以实现 RemoteCertificateCallback 并设法返回 true,但是这种方法是有限的,因为如果我们想信任一个新证书,我必须修改代码。我想知道有没有办法在 C# 代码中加载 CA 证书?