【问题标题】:Trust a self-signed certificate to authenticate a server (.NET client on Windows)信任自签名证书来验证服务器(Windows 上的 .NET 客户端)
【发布时间】:2012-04-18 04:09:41
【问题描述】:

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

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

【问题讨论】:

    标签: .net windows ssl self-signed


    【解决方案1】:

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

    看看RemoteCertificateValidationCallback Delegate。在此回调中,您可以检查验证是否已成功 (sslPolicyErrors == SslPolicyErrors.None),然后您无需执行任何操作。否则,您可以检查给定证书是否等于您要在此上下文中信任的自定义证书。如果证书匹配,则返回 true。

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

    【讨论】:

    • 我宁愿避免在应用程序代码中对自签名证书进行任何黑客攻击。
    • AFAIK 只有这两个选项:将证书安装为受信任的根或通过代码手动信任它。顺便说一句:并非每个证书都可用于以 PKI 的方式颁发其他证书。
    猜你喜欢
    • 2020-01-11
    • 2014-06-07
    • 2021-03-16
    • 2011-06-11
    • 2010-11-13
    • 1970-01-01
    • 2012-07-03
    • 2010-09-13
    • 2016-10-24
    相关资源
    最近更新 更多