クライアントの認証に証明書を使用するように WCF サービスをセットアップしようとしています。証明書の作成方法に関する多くの投稿を読みましたが、(最終的に) 作成することができました。
Windows 2008 R2 を実行するサーバーに Cert Authority と Cert をインストールしています。MMC 証明書スナップインを開くと、[コンピューター アカウント]を選択します。これは正しいです?私のWCFサービスはWindowsサービスで実行され、ユーザーがログインしていなくても実行されるため、これを行っています。しかし、確かに、3つのオプションの違いはわかりません。
- 私のユーザーアカウント
- サービス アカウント
- コンピューター アカウント
スナップインが読み込まれたら、Authority Cert をTrusted Root Certification Authoritiesにインポートします。次に、証明書をTrusted Publishersにインポートします。これを行うときにエラーは発生しません。Authority Cert とその機関によって署名された Cert の両方をインポートするとき、.pvk ファイルを参照しません。秘密鍵が証明書または機関証明書のいずれかに埋め込まれていることは理解しています。各証明書を作成するために使用するコマンドは次のとおりです。
MakeCert.exe
-n “CN=InternalCA”
-r
-sv InternalCA.pvk InternalCA.cer
-cy authority
MakeCert.exe
-sk InternalWebService
-iv InternalCA.pvk
-n “CN=InternalWebService”
-ic InternalCA.cer InternalWebService.cer
-sr localmachine
-ss root
-sky exchange
-pe
-ss root を使用したことに注意してください。-ss My を使用した多くの投稿を見てきました。違いが何であるか、または各値を使用するのが適切な場合はよくわかりません。
私の WCF サービスは、マネージド サービス (Windows サービス) 内のこのマシンで実行されます。WCF サービスをホストする Windows サービスを開始すると、すぐにクラッシュし、イベント ビューアーに一般的なエラーが報告されます。
System.ArgumentException: 証明書 'CN=TempCertName' に鍵交換が可能な秘密鍵がないか、プロセスに秘密鍵へのアクセス権がない可能性があります
サービスを実行しているユーザーにキーへのアクセス許可を付与する必要があるという投稿を見つけました。
これは、stackoverflow でよくある回答のようです: Grant access with All Tasks/Manage Private Keys
しかし、すべてのタスク/秘密鍵の管理のオプションがありません
しかし、私はそれを行う方法が明確ではありません。また、サービスは、管理者であり、証明書をインストールしたのと同じユーザーでもある私のドメイン アカウントで実行されています。
助けてください :)