在我的代码枚举所有本地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...
}
}
}
}
此代码yeilds的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
返回证书商店名称,但我找不到具有该名称的商店中的任何证书?
大,但我不知道证书主题。 – sharptooth 2013-03-01 10:55:26