2017-10-13 7 views
0

J'ai développé une application de service Windows en C# .NET et essaie maintenant d'appeler un service web à partir de ce service Windows développé en Java. Mon client m'a fourni le certificat avec le type .cert et la clé privée dans le type .pkcs8. Quand je tente d'appeler le service Web alors je reçois l'erreur suivante:Pourquoi obtenir une erreur La clé privée n'est pas présente dans le certificat X.509

The private key is not present in the X.509 certificate.

Voici mon code pour se connecter avec wsdl:

<clientCredentials> 
<serviceCertificate> 
    <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" /> 
</serviceCertificate> 
<clientCertificate storeLocation="CurrentUser" storeName="Root" findValue="176455DB76886FF2BA3C122F8B36322F647CB2FD" x509FindType="FindByThumbprint"/>      
</clientCredentials> 

Je vous serais reconnaissant plus si vous pouviez me suggérer au-dessus savoir comment inclure la clé privée avec ce certificat pour appeler le service Web à partir de mon code. Merci d'avance.

+1

Pouvez-vous nous montrer une pièce d'appel? – SeM

+1

Utilisez OpenSSL pour fusionner le certificat et sa clé privée dans un fichier PFX. Ensuite, importez-le dans votre magasin de certificats. Actuellement, vous avez importé uniquement le certificat qui a déclenché l'erreur. –

Répondre

0

Le problème est dû au fait que vous avez importé votre certificat dans le magasin de certificats Windows, mais que vous ne l'avez pas associé à une clé privée. Vous devez fusionner les fichiers .cer et .pkcs8 dans le conteneur PFX. Vous pouvez utiliser certutil.exe aussi pour cela:

certutil -mergepfx path\mycert.cer path\mycert.pfx 

Remarque: renommer votre fichier clé pour avoir correspondant au nom de fichier de certificat et l'extension de changement à .key. Autrement dit, les deux fichiers doivent être dans le même dossier et avoir des noms, comme ceci: mycert.cer, mycert.key.