クライアントが証明書を介して認証する必要があるACSで保護されたAzureWCFサービスを構築しています。
クライアント(およびサーバー)に、ファイルシステムからではなく、X509Storeからそれぞれのパスワード証明書をロードしてもらいたいのですが。
私はこのコードを使用しています:
private static X509Certificate2 GetCertificate(string thumbprint)
{
var certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(
X509FindType.FindByThumbprint,
thumbprint, false);
certStore.Close();
if (certCollection.Count == 0)
{
throw new System.Security.SecurityException(string.Format(CultureInfo.InvariantCulture, "No certificate was found for thumbprint {0}", thumbprint));
}
return certCollection[0];
}
問題は、認証に必要な秘密鍵がロードされていないことです。私はreturnステートメントをこれに変更しようとしました:
return new X509Certificate2(certCollection[0].Export(X509ContentType.Pfx, "password"));
ただし、これはCryptographicException「指定されたネットワークパスワードが正しくありません」で失敗します。
編集: でパスワード引数を渡さない場合、.Export()メソッドは正しく機能します。
これについて何か助けはありますか?