假设您有一个只能连接到一个端点的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
我的问题
答案 0 :(得分:0)
...带有常见CA根证书指纹列表。
...从此CAs根证书到颁发的证书的链是vaid
您可以检查证书是否与指纹匹配,但您无法仅通过指纹验证证书(链)之间的关系。链的验证是通过验证证书上的签名来完成的,为此,您需要签名者证书中包含的签名者公钥。
除此之外,我认为C#具有针对您自己的可信CA集验证证书链的必要方法,因此您不需要添加自己的验证回调。