如何以编程方式查找中间证书是否由Web服务器提供服务?

时间:2016-02-26 09:18:01

标签: c# .net ssl httpwebrequest x509

我的C#代码使用HttpWebRequest通过HTTP上的HTTP(https://前缀URL)向Web服务发送请求。该服务具有coolservice.example.com证书,该证书由证书颁发机构中间证书签名,证书颁发机构中间证书又由受信任的根证书颁发机构证书签名。后者必须位于调用者证书存储区中并标记为"受信任的root"否则所有SSL信任链都没有意义。但是,中间证书可能来自不同的来源:

  • 网络服务器可以与自己的证书一起提供服务(如在"这里是我的证书,顺便说一下,它是用这个证书签署的,这个证书是用您可能信任的东西签署的,请检查签名沿着信任链")
  • 调用者可以自动从证书颁发机构(AIA协议或其他东西)中检索中间件 - 我知道这一点,因为我已经安装了没有安装中间证书的Web服务和&# 34;它只是工作"
  • 调用者可能在其商店中安装了中间证书

我需要在SSL握手进行过程中检查Web服务器是否正确服务(不仅在信任存储中,而且实际上是服务证书)。 This test site甚至显示"由服务器发送"旁边的中间人。所以我想这样的检查是可能的。

如何使用C#和.NET Framework进行此类检查?

到目前为止,我只遇到HttpWebRequest.ServerCertificateValidationCallback,它接受​​了Web服务证书(X509Certificate对象)和信任链(X509Chain对象)。信任链列出了链中的所有证书,但我看不到任何详细说明证书获取位置的信息。

我如何通过Web服务器以编程方式查找中间证书是服务器还是从其他地方获取?

0 个答案:

没有答案