(离线)验证SSL连接

时间:2015-01-27 08:28:34

标签: c# web-services ssl ssl-certificate x509certificate

假设您有一个只能连接到一个端点的Web客户端,即HTTPS网络服务器。使用的证书始终来自证书颁发机构(CA)。

我的动机是确保使用的证书是从trustet派对中发出的。 由于软件应该在没有更新的情况下运行并处理新证书,因此不能选择证书固定。

在C#中,您可以使用回调来使用我们自己的验证

ServicePointManager.ServerCertificateValidationCallback

我得到了用过的X509Certificate和X509Chain。

// Summary:
//     Verifies the remote Secure Sockets Layer (SSL) certificate used for authentication.
//
// Parameters:
//   sender:
//     An object that contains state information for this validation.
//
//   certificate:
//     The certificate used to authenticate the remote party.
//
//   chain:
//     The chain of certificate authorities associated with the remote certificate.
//
//   sslPolicyErrors:
//     One or more errors associated with the remote certificate.
//
// Returns:
//     A System.Boolean value that determines whether the specified certificate
//     is accepted for authentication.
public delegate bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors);

我的想法是使用常见CA根证书指纹列表注册软件。 然后测试X509Chain

  • 一个证书具有相同的指纹(作为通用CA根证书)
  • 从此CAs根证书到颁发的证书的链是vaid
  • 证书及时有效(忽略revoaktion,因为

我的问题

  • 有没有人有更好的主意?
  • 如何证明链条有效?

1 个答案:

答案 0 :(得分:0)

  

...带有常见CA根证书指纹列表。

     

...从此CAs根证书到颁发的证书的链是vaid

您可以检查证书是否与指纹匹配,但您无法仅通过指纹验证证书(链)之间的关系。链的验证是通过验证证书上的签名来完成的,为此,您需要签名者证书中包含的签名者公钥。

除此之外,我认为C#具有针对您自己的可信CA集验证证书链的必要方法,因此您不需要添加自己的验证回调。