是否有人知道如何根据WebBrowser
控件中的SSL打开“证书信息”屏幕?
答案 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 的CryptUIDlgSelectCertificateFromStore
,CryptUIDlgViewContext
等功能。 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或以其他方式调用该对话框。