2

サーバー側の証明書と秘密鍵の両方を必要とするこの外部 REST Web サービスを取得しようとしています (どちらも発行者から*.pemそのサービスのファイルとして取得しました)。

私のテストでは、これら 2 つの部分を 1 つの*.pfxファイルに結合する方法をググって見つけました。ディスク上のそのバイナリ ファイルからインスタンスを読み込むと、X509Certificate2問題なく動作します。

今、これを本番環境の Windows Server 2008 の証明書ストアに入れようとしていました。

X509Certificate2C#コードで証明書ストアから取得できます-問題ありません:

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);

X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, "serial-number-here", false);

if (certs.Count > 0)
{
    X509Certificate2 cert = certs[0];

    // set the certificate on the RestClient to call my REST service
    _restClient.ClientCertificates.Add(cert);
}

store.Close();

しかし、私がこれを行うと、Web サービスは「SSL 証明書」が必要だと主張して私を怒らせます...

またX509Certificate2、ディスクから、その*.pfxファイルからロードしていたとき、パスワードを提供する必要がありました - 証明書ストアからロードするとき、ここでは何も提供する必要はありません....奇妙な....

サーバー側の証明書と秘密鍵の両方を含むをインポートしたにもかかわらず*.pfx、どういうわけか証明書ストアから両方を取得できないようです...

どうすればこれを機能させることができますか?2 番目のステップで証明書ストアから秘密鍵をロードする必要がありますか? どのように?

これらの証明書は、私にとって依然として主にブードゥー教のような大きな謎のままです....誰か私を啓発できますか?

4

2 に答える 2

4

最初に確認することは、証明書ストアに秘密鍵があるかどうかを確認することです。

  1. 証明書管理スナップピンを開き、証明書を見つけてダブルクリックし、下の画像のように赤色で強調表示されたセクションがあることを確認します。 ここに画像の説明を入力

次に、秘密鍵がストアにある場合は、証明書にアクセスするアカウントに秘密鍵に対するアクセス許可がない可能性があります。これを確認するには、次の 2 つの方法があります。

  1. 証明書管理スナップピンで、証明書を右クリックし、[すべてのタスク] > [秘密鍵の管理] をクリックします。(ここでアクセス許可を確認および編集できるはずです)
  2. コードでは、PrivateKey プロパティにアクセスできます (つまり、var privateKey = cert.PrivateKey を実行して、それが返されるかどうかを確認します)。
于 2015-05-08T09:00:31.120 に答える
0

Web サービスがどのように実装されているかを書いていません。

  1. IIS に展開されている場合
  2. セルフホストの場合

ストアから証明書を取得するコードは正しいです。問題は、pfx - CurrentUser または LocalMachine ストアをどこにインポートしたかです。コード例では CurrentUser ストアを使用しています。証明書を LocalMachine ストアにインポートした場合、証明書は見つかりません。また、X509Store のコンストラクターでストア名 - StoreName.My (MMC または certmgr.msc では Personal を意味します) を指定してください (デフォルトである可能性がありますが、とにかくすべてのデフォルトを知っている人:) )

しかし、私がこれを行うと、Web サービスは「SSL 証明書」が必要だと主張して私を怒らせます...

Client Authentication証明書の拡張キーの使用法に含まれていることを確認する必要があります。

また、X509Certificate2 をディスクからロードしていたとき、その *.pfx ファイルから、パスワードを提供する必要がありました。証明書ストアからロードするときは、ここで何も提供する必要はありません....奇妙な....

それがどのように機能するかです。pfx がある場合、その中の秘密鍵はパスワードで保護/暗号化されます (パスワードは空の文字列にすることができます)。pfx を証明書ストアにインポートすると、秘密鍵は他の鍵で保護/暗号化されます (どの鍵かは正確にはわかりません)。ただし、pfx をストアにインポートするときに強力な保護を指定することで、秘密キーに別のレベルの保護を追加できます (ASP.NET、Web サービス、またはデスクトップを持たないもので使用する場合はお勧めしません)。ただし、電子メールに署名するのが個人証明書である場合は、有効にすることをお勧めします。アプリケーションが秘密鍵を使用しようとするたびに、Windows はウィンドウをポップアップ表示します。

@DanLは、秘密鍵と彼の権利について正しいかもしれません

1) - 秘密鍵に権利を設定し、

2) - X509Certificate2 の秘密鍵へのアクセス

OKと書かれています。1) ASP.NET アプリケーションまたは IIS 上の別の Web サービスから REST サービスに接続しようとしている場合、アクセス許可を追加する必要があるアカウントの名前はIIS APPPOOL\name_of_the_apppool_your_app_runs_underです。

于 2015-05-08T10:42:17.833 に答える