从Web浏览器控件打开证书信息

有谁知道如何根据WebBrowser控件中的SSL打开“证书信息”屏幕?

这可以通过使用名为X509Certificate2UI的类来实现。

要使此类可用,您需要添加对System.Security.dll的引用

X509Certificate2UI类中,您有一个名为DisplayCertificate()的meyhod,它将X509Certificate2对象作为参数。 调用时,此方法显示一个对话框,显示所有证书信息,包括链接,与您在IE中找到的对话框完全相同。

webbrowser控件只能返回一个X509Certificate ,然后可以将其传递给X509Certificate2类的构造函数。

所以代码看起来像这样:

 //includes on top using System.Security; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; //Do webrequest to get info on secure site HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://securesite.com"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Close(); //retrieve the ssl cert and assign it to an X509Certificate object X509Certificate cert = request.ServicePoint.Certificate; //convert the X509Certificate to an X509Certificate2 object by passing it into the constructor X509Certificate2 cert2 = new X509Certificate2(cert); //display the cert dialog box X509Certificate2UI.DisplayCertificate(cert2); 

如果我理解你是正确的,你应该搜索不在WebBrowser但在CryptoAPI内的这些信息。 存在来自Cryptui.dll的 CryptUIDlgSelectCertificateFromStoreCryptUIDlgViewContext等function。 WINTRUST.DLL中有一些函数,比如WinVerifyTrustEx ,它们也可以显示一些对话框。

你能详细描述我如何在Internet Explore中显示你想要的对话框吗? 您是否已经使用WebBrowser控件,然后您可以在BeforeNavigate2事件内跟踪Internet Explorer所具有的URL。 有了这个URL,你可以下载SSL证书,如果有关于CryptUIDlgViewContext 。 要下载或获取证书,您可以使用带有INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT或INTERNET_OPTION_CLIENT_CERT_CONTEXT标志的InternetQueryOption。 来自INTERNET_OPTION_SECURITY_CERTIFICATE,INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT(请参阅http://support.microsoft.com/kb/251347 )的信息就足够了。

虽然它不使用.NET WebBrowser,但您可以针对标准WebBrowser利用此C#包装器代码,而不会对您的项目产生太大影响:

http://code.google.com/p/csexwb2/

然后它只需要你说ShowCertificateDialog()

否则无法执行ExecWB或调用该对话框。