在我的代碼枚舉所有本地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