在我的代码中,我枚举了所有本地 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
返回证书存储名称但我在存储中找不到任何具有该名称的证书?