0

証明書がローカルマシンのどこに保存されているか、そして開発サーバーのどこに保存されているかを見つけようとしています。[実行]->[MMC]->[ファイル]->[スナップインの追加と削除]に移動し、証明書と[現在のユーザー]を選択して、個人の証明書を確認できます。ただし、このコードを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;
}
4

1 に答える 1

2

どういうわけか証明書を選びたいと仮定し、それがファイルからのものであるかどうかは本当に気にしません。この場合、証明書ストアオブジェクトを使用して、必要なものを見つけることができます(つまり、指紋によって)。C#の証明書ストアからの証明書の取得リストとX509Store.CertificatesのMSDN記事を確認してください。これには、サンプルも含まれています。

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

foreach (X509Certificate2 mCert in store.Certificates){
    //TODO's
}
于 2012-05-25T16:06:36.823 に答える