IIS 7.5 on Windows 2008R2でホストされているTransport Securityを使用してWCFサービスを開発しています。IIS 7.5で生成された証明書がローカルフォルダに保存されています。
トランスポートセキュリティでBasicHttpBindingまたはWSHttpBindingを使用すると、すべてが正常に動作します。しかし、それをNetTcpに変更すると、例外が発生します。
CryptographicException 'Keyset does not exist'.
少しグーグルで調べたところ、NETSERVICE IISアカウントに証明書の秘密キーに対する権限がないため、問題が発生している可能性があることがわかりました。
解決策は、MMCでアクセス権を設定することです。証明書を右クリックして[プライベートキーの管理]オプションを選択します。ただし、選択メニューにそのようなオプションはありません!!!証明書は管理者アカウントの下で作成され、私がそれを開いたところ-秘密鍵を持っていると表示されています。
サーバーに移動->スタートをクリック->ファイル名を指定して実行->タイプmmc-> Enter->ローカルコンピューターオプションで証明書スナップインを選択->コンソールルートに移動->証明書->個人->証明書->証明書を選択->右クリック->すべてのタスクに移動->秘密鍵の管理->権限の追加
最初に証明書を追加しようとしたときに、秘密キーの管理オプションがありませんでした。最後に、2つの手順に従って修正しました。
Ran MMC管理者として。ファイル->スナップインの追加または削除->証明書の選択-> [追加]ボタンをクリックすると、ダイアログが開きます。このスナップインは、 :コンピューターアカウントを選択します。このスナップインで管理するコンピューターを選択します。:ローカルコンピューターを選択します。[完了]をクリックします。[OK]をクリックします。
個人用フォルダーに証明書(すべてのタスク->インポート)をインポートする場合は、.cerファイルではなく.pfxファイルをインポートしていることを確認してください。
これと同じ問題がありました(秘密キーの管理オプションがありません)。表示するには、デフォルトの「ユーザーアカウント」の代わりに「コンピュータアカウント」オプションを使用して証明書スナップインを追加する必要がありました。
Windows 10 1809では、秘密鍵の管理オプションは個人ストアの証明書でのみ使用できるようです。回避策は、証明書をそこにドラッグアンドドロップし、必要に応じてアクセス許可を追加して、必要な場所にドラッグして戻すことです。
私の場合、コンピューターアカウントにアクセスするように証明書スナップインを構成しているにもかかわらず、この問題が発生しました。さらに、 この答え で.PFX証明書を取得するという提案は、私にとってオプションではありません。
証明書リクエストの作成時に秘密鍵をエクスポート可能に指定することで問題を解決しました(これは、証明書MMCスナップインを使用して行います):
公開CAから取得した証明書は.CER
ファイル、[秘密キーの管理]メニューオプションが利用可能でした。証明書についてはよく知りませんが、秘密鍵をエクスポートできる場合にのみメニューオプションが表示されると思います。 この答え を考慮して、おそらく.PFX形式の証明書alwaysでこれを実行できます。それでも、他の証明書形式でも使用できることを知っておくとよいでしょう。
他に1つの問題がある可能性があるので、それについて触れます。 makecert.exeを使用して証明書を作成するときの-pe
引数を除いて、.pfx
ではなく.cer
ファイルをインポートしていることを確認してください。 .pfx
ファイルがない場合は、pvk2pfx.exe
などの追加ツールを使用して作成します。