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

时间:2010-04-22 10:48:40

标签: c# .net browser ssl-certificate

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

3 个答案:

答案 0 :(得分:8)

这可以通过使用名为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);

答案 1 :(得分:1)

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

您是否可以准确描述如何在Internet Explorer中显示您想要的对话框?您是否已经使用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)就足够了。

答案 2 :(得分:1)

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

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

然后,您只需要说ShowCertificateDialog()

无法执行ExecWB或以其他方式调用该对话框。