次の PowerShell 関数を使用して、PFX を Windows 2008 R2 サーバーの証明書ストアにインポートしました
function Import-PfxCertificate ([String]$certPath,[String]$certificateStoreLocation = "CurrentUser",[String]$certificateStoreName = "My",$pfxPassword = $null)
{
$pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($certPath, $pfxPassword, "Exportable,PersistKeySet")
$store = new-object System.Security.Cryptography.X509Certificates.X509Store($certificateStoreName,$certificateStoreLocation)
$store.open("MaxAllowed")
$store.add($pfx)
$store.close()
return $pfx
}
関数の呼び出し元は、$importedPfxCert = Import-PfxCertificate $pfxFile "LocalMachine" "My" $password
ローカル マシンのマイ ストアにインストールしたようです。次に、IIS アプリケーション プールに読み取りアクセス許可を付与しました。
それを使用する必要があるWCFサービスがあります
<behaviors>
<serviceBehaviors>
<behavior>
<serviceCredentials>
<serviceCertificate findValue="MyCertName" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyValidator" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
クライアントを使用してサービスを呼び出すと、WCF から例外が発生しましたIt is likely that certificate 'CN=MyCertName' may not have a private key that is capable of key exchange or the process may not have access rights for the private key.
MMC から削除し、証明書 MMC から同じ PFX ファイルを手動でインポートして、同じストアに同じアクセス許可を付与すると、クライアントは問題なくサービスを呼び出すことができます。
ですから、PowerShellを使用すると、何らかの理由で秘密鍵がねじ込まれていると思います。
おもしろいことに、MMC に移動して、インストール済みの証明書をダブルクリックするとYou have a private key that corresponds to the certificate.
、PowerShell でも秘密鍵が読み込まれているように見えます。パーミッション設定は同じです。
手がかりや経験はありますか?