我的C#代码使用HttpWebRequest
通过HTTP上的HTTP(https://
前缀URL)向Web服务发送请求。该服务具有coolservice.example.com证书,该证书由证书颁发机构中间证书签名,证书颁发机构中间证书又由受信任的根证书颁发机构证书签名。后者必须位于调用者证书存储区中并标记为"受信任的root"否则所有SSL信任链都没有意义。但是,中间证书可能来自不同的来源:
我需要在SSL握手进行过程中检查Web服务器是否正确服务(不仅在信任存储中,而且实际上是服务证书)。 This test site甚至显示"由服务器发送"旁边的中间人。所以我想这样的检查是可能的。
如何使用C#和.NET Framework进行此类检查?
到目前为止,我只遇到HttpWebRequest.ServerCertificateValidationCallback
,它接受了Web服务证书(X509Certificate
对象)和信任链(X509Chain
对象)。信任链列出了链中的所有证书,但我看不到任何详细说明证书获取位置的信息。
我如何通过Web服务器以编程方式查找中间证书是服务器还是从其他地方获取?