運用Webサーバー(IIS6)でホストしようとしているWCFサービスがあります。私はウェブをセットアップし、証明書をウェブに結び付けました。サービスのURLを参照しようとすると、イベントログに次のエラーが表示されます。
例外メッセージは次のとおりです:証明書 'CN = 。mydomain、OU = Secure Link SSL Wildcard、OU = IT、C = US' may not have a private key that's can key exchange or the process秘密鍵へのアクセス権がない可能性があります。詳細については、内部の例外を参照してください。---> System.ArgumentException:証明書 'CN =。mydomain.com、OU = Secure Link SSL Wildcard、OU = IT、O = mydomain、C = US 'には、鍵交換が可能な秘密鍵がないか、プロセスに秘密鍵のアクセス権がない可能性があります。詳細については、内部の例外を参照してください。 ---> System.Security.Cryptography.CryptographicException:ハンドルが無効です。
ASP.Net 1.1、2、および4がすべて「Webサービス拡張」で「許可」に設定されていることを確認しました。証明書がiisに設定されていることも確認しました。「この証明書に対応する秘密鍵があります」と表示されます。また、実行権限は「スクリプトと実行可能ファイル」に設定されています。
この問題があり、サービスを実行しているアカウントに、証明書の秘密鍵にアクセスする権限がないことがわかりました。
これを解決するために使用した手順は次のとおりです。
証明書は署名用に作成されたもので、鍵交換用ではないようです。SSL証明書の場合、私は通常そうです。
makecert documentation を見ると、-skyスイッチを使用して、証明書を署名または鍵交換のどちらに使用するかを指定できることがわかります。タイプ交換を使用して自己署名証明書を作成し、例外が引き続き発生するかどうかをテストできます。証明書が無効であるという例外を回避するために、自己署名証明書をマシンの信頼されたルート証明機関フォルダーに配置することを忘れないでください。
ここでも同じ問題。問題を修正するために、web.configの<system.web>
ノードに次の行を追加しました。
<httpRuntime targetFramework="4.7.2"/>
また、証明書にアクセスする必要のあるアカウント名またはグループが、証明書が存在するフォルダー階層にアクセスできることも確認してください。たとえば、証明書が 'C:\ ProgramData\Microsoft\Crypto\RSA\MachineKeysに隠れている場合'、およびそれにアクセスする必要があるアカウントは' NETWORK SERVICE 'である場合、' NETWORK SERVICE 'はそのフルパスへのアクセスが必要です。ファイルに権限を割り当てるだけでは不十分です。