【发布时间】:2013-02-15 19:05:37
【问题描述】:
在我的代码中,我列举了所有本地 IIS 站点,并为每个站点尝试验证端口 443 的证书。
using( var sm = new ServerManager() ) {
foreach( var site in sm.Sites ) {
foreach( var binding in site.Bindings ) {
if( binding.EndPoint.Port == 443 ) {
var thumbprint = binding.CertificateHash;
var storeName = binding.CertificateStoreName;
//validation here...
}
}
}
}
此代码生成 storeName 是 "MY" 和 thumbprint 是一些字节数组,我将其转换为十六进制表示。
现在“验证”部分的工作方式如下:
var store = new X509Store("MY");
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates;
//find and validate my cert
store.Close();
并且这段代码产生一个空集合。然而,如果我改变了
var store = new X509Store("MY");
到
var store = new X509Store(StoreLocation.LocalMachine);
然后代码生成一个包含两个证书的集合,其中一个具有正确的指纹,我可以对其进行验证。
为什么Binding 返回一个证书存储名称,但我在存储中找不到任何具有该名称的证书?
【问题讨论】:
标签: c# .net iis certificate