2

クライアントの認証に証明書を使用するように WCF サービスをセットアップしようとしています。証明書の作成方法に関する多くの投稿を読みましたが、(最終的に) 作成することができました。

Windows 2008 R2 を実行するサーバーに Cert Authority と Cert をインストールしています。MMC 証明書スナップインを開くと、[コンピューター アカウント]を選択します。これは正しいです?私のWCFサービスはWindowsサービスで実行され、ユーザーがログインしていなくても実行されるため、これを行っています。しかし、確かに、3つのオプションの違いはわかりません。

  1. 私のユーザーアカウント
  2. サービス アカウント
  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

しかし、すべてのタスク/秘密鍵の管理のオプションがありません

しかし、私はそれを行う方法が明確ではありません。また、サービスは、管理者であり、証明書をインストールしたのと同じユーザーでもある私のドメイン アカウントで実行されています。

助けてください :)

4

2 に答える 2

1

セルフホステッド SSL WCF サービスを独自のカスタム CA/証明書で動作させるのに役立つ最適なリンクは次のとおりです: SSL with Self-hosted WCF Service

上記のガイドに従って動作するようになったら、インストール時に適切な証明書を使用するようにプログラムでサービスをセットアップすることをお勧めします。

コマンドライン/コマンドを使用するよりも、 HTTPCfgUIツールを使用して HTTP.SYS 構成を確認する方が簡単であることがわかりました。httpcfgnetsh

次に、それでもエラーが発生する場合は、WCF Tracingを使用してさらにデバッグできます。さらに、WCF メッセージ トレースも有効にする必要があります。WCF トレースで十分な情報が得られない場合は、.NET ネットワーク スタックもトレースできます。

サービスの証明書/CA ペアが機能しているかどうかをテストするには、別のマシンのブラウザーでサービス URL にアクセスします。最初に、証明書が無効であることを示す必要があります。次に、マシン上の CA を信頼されたルートにインポートし、サービス URL をもう一度ヒットします。今回は、警告なしで、通常どおりサービスの説明ページが表示されるはずです。

于 2011-03-16T18:05:42.867 に答える