在箱子/服务器上查找证书位置

时间:2012-05-25 15:59:18

标签: c# httpwebrequest

我试图找到证书存储在我的本地计算机上的位置,然后再找到我们的开发服务器。我可以去跑 - > MMC - >档案 - >添加/删除SnapIns并选择证书和当前用户并查看我的个人证书。但是,我正在尝试将此代码用于HttpWebRequest,但我找不到该URL。

string certPath = @"e:\mycertificate.cer"; //This Value
X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath);
request.ClientCertificates.Add(myCert);

在另一个区域,我们设置代理并按照这样做。

proxy.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, CertificateName);

所以显然有点不同的实现,我不确定在第一个例子中找到填写位置的位置/方式。

适用于我的解决方案

public WebRequest GetWebRequest(string address)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
    X509Certificate myCert = null;
    X509Store store = new X509Store("My");

    store.Open(OpenFlags.ReadOnly);

    foreach (X509Certificate2 mCert in store.Certificates)
    {
        if (mCert.FriendlyName.Contains("certname"))
        {
            myCert = mCert;
        }
    }

    if (myCert != null) { request.ClientCertificates.Add(myCert); }

    return request;
}

1 个答案:

答案 0 :(得分:2)

假设您想以某种方式选择证书,而不是真的关心它是否来自文件。在这种情况下,您可以使用证书存储对象并找到您需要的对象(即通过指纹)。查看Get list of certificates from the certificate store in C#X509Store.Certificates上包含示例的MSDN文章:

X509Store store = new X509Store("My");
store.Open(OpenFlags.ReadOnly);

foreach (X509Certificate2 mCert in store.Certificates){
    //TODO's
}