1

クライアント証明書によって要求を認証するように asp.net Web API サービスを構成する際に問題があります

Pro ASP.NET Web Api Security で説明されている手順を実行します。

  1. makecert.exe を使用して証明書を作成し makecert.exe -r -n "CN=MobileTradeDataGateway" -pe -sv MobileTradeDataGateway.pvk -a sha256 -cy authority MobileTradeDataGateway.cermakecert.exe -iv MobileTradeDataGateway.pvk -ic MobileTradeDataGateway.cer -n "CN=DataGateway1" -pe -sv DataGateway1.pvk -a sha256 -sky exchange DataGateway1.cer -eku 1.3.6.1.5.5.7.3.2
  2. サーバーの信頼されたルート証明機関とクライアントにも MobileTradeDataGateway 証明書をインストールします。DataGateway1 をクライアント個人権限にインストールします。
  3. 証明書を受け入れて有効にするようにサイトを構成します。匿名認証を有効にします。
  4. DelegatingHandler を作成し、それを mvc の messagehandlers コレクションに追加して、証明書を確認します。
  5. Web API メソッドを呼び出す

    var certStore = new X509Store(StoreLocation.CurrentUser); certStore.Open(OpenFlags.ReadOnly); var collection = certStore.Certificates.Find(X509FindType.FindByIssuerName, "MobileTradeDataGateway", true); var cert = コレクション [0]; certStore.Close(); var messageHandler = new WebRequestHandler(); messageHandler.ClientCertificates.Add(証明書); var client = new HttpClient(messageHandler) { BaseAddress = new Uri("...") }; var res = client.GetAsync("/api/orderuploader?number=5").Result;

.

私のマシンがサーバーであるローカルマシンとネットワークでは、すべてが正常に機能します。しかし、Azure クラウド サービスにデプロイすると var cert = request.GetClientCertificate(); // here is null 、カスタム委任ハンドラーでnull が取得されます

もちろん、IIS が証明書を受け入れ、信頼されたルート証明機関に証明書を正しく配置できるようにします。

何か案は?

4

3 に答える 3

0

また、「拇印」で証明書を取得しようとしましたか。証明書ストアから証明書を読み取ろうとするサンプル コードを次に示します。

private X509Certificate2 FindCertificate()
{
    X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    certificateStore.Open(OpenFlags.ReadOnly);
    X509Certificate2Collection certificates = certificateStore.Certificates;
    X509Certificate2Collection matchingCertificates = certificates.Find(X509FindType.FindByThumbprint, "CertThumbprint", false);
    if (matchingCertificates != null && matchingCertificates.Count > 0)
    {
        return matchingCertificates[0];
    }
    throw new ArgumentException("Unable to find a matching certificate in the certificate store. Please modify the search criteria.");
}

このリンクには、web /worker ロールから証明書を読み取る方法の詳細が記載されています

于 2013-08-05T19:31:10.687 に答える