信任自签名证书以验证服务器(Windows上的.NET客户端)

问题描述:

我有一个通过SSL连接到远程服务器的.NET应用程序。在测试环境中,远程服务器使用自签名证书。默认情况下,SSL连接失败。如果我将证书安装到受信任的根证书颁发机构存储中,则连接成功。信任自签名证书以验证服务器(Windows上的.NET客户端)

但是,由于它现在是受信任的证书颁发机构,因此此证书可用于为任何其他站点签署证书,并且我的计算机上的应用程序(如Internet Explorer)将信任这些证书。我希望这个证书被信任来验证一个特定的网站,但不作为一个证书颁发机构。有没有办法做到这一点?

您可以实施您自己的证书验证机制,该机制还允许额外使用某些自签名或自定义证书。

看看RemoteCertificateValidationCallback Delegate。在这个回调中,你可以检查验证是否已经成功(sslPolicyErrors == SslPolicyErrors.None),那么你不必做任何事情。否则,您可以检查给定的证书,如果它等于您想要在此上下文中信任的自定义证书。如果证书匹配返回true。

使用您自己的RemoteCertificateValidationCallback可以完成面向连接的代理(使用例如SslStream constructor)。

+0

我宁愿避免在应用程序代码中使用任何自签名证书。 – Alla 2012-04-04 15:46:53

+1

AFAIK只有这两个选项:将证书安装为受信任的根或通过代码手动信任它。 BTW:并不是每个证书都可以用作PKI的方式颁发其他证书。 – Robert 2012-04-04 18:51:31