J'ai utilisé la fonction PowerShell suivante pour importer PFX dans le magasin de certificats de mon serveur 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
}
L'appelant de la fonction ressemble à $importedPfxCert = Import-PfxCertificate $pfxFile "LocalMachine" "My" $password
Je l'ai installé dans le My store de la machine locale. J'ai ensuite accordé le droit de lecture à mon pool d'applications IIS.
J'ai un service WCF qui doit l'utiliser.
<behaviors>
<serviceBehaviors>
<behavior>
<serviceCredentials>
<serviceCertificate findValue="MyCertName" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyValidator" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Quand j'utilise un client pour appeler le service, je reçois une exception de 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.
Si je le supprime de la MMC, et que j'importe manuellement le même fichier PFX depuis la MMC du certificat, dans le même magasin et que j'accorde la même permission, mon client peut appeler le service sans problème.
Cela m'amène à penser que, pour une raison quelconque, si j'utilise PowerShell, la clé privée est foutue d'une manière ou d'une autre.
Ce qui est amusant, c'est que dans les deux cas, si je vais dans MMC et que je double-clique sur mon certificat installé, je vois que You have a private key that corresponds to the certificate.
il semble donc que la clé privée soit chargée même dans PowerShell. les paramètres de permission sont identiques.
Un indice ou une expérience ?