SSL Webservice: impossible de créer le canal sécurisé SSL/TLS
Mon C# .net application à l'aide d'un HTTPS webservice. Comme le cerificate est maintenant sur le point d'expirer, je suis en train de le mettre à jour avec un nouveau que j'ai reçu (un .jks fichier que j'ai converti .p12 à l'aide de javasdks' keytool). Je pensais que ce serait facile, je sais comment le faire, mais il ne veut pas coopérer.
Ce que j'ai fait jusqu'à présent:
- Certificat importé à CURRENT_USER\Personnels
- Certificat importé à LOCAL_MACHINE\Personnels
- Donné le bon utilisateur (apppoolidentity) l'accès à la clé privée du certificat par l'intermédiaire de la winhttpcertcfg outil.. ci-Dessous est une liste de droits
pour le certificat. - à l'aide de findprivatekey outil, j'ai aussi trouve la réelle fichier de clé, et compte tenu de la apppoolidentity accès. (En désespoir de cause).
C:\Program Files (x86)\Windows Resource Kits\Tools>winhttpcertcfg -l-c LOCAL_MACHINE\Mon -s "9000 - Blabla"
Microsoft (R) WinHTTP Outil De Configuration De Certificat
Copyright (C) Microsoft Corporation 2001.Certificat correspondant:
CN=9000 - Blabla
C=NON
L="c/o Blabla QUE, Blablaaddress"
OU=957839827
OID.1.2.240.111111.1.9.8=12345678
OID.1.2.240.111111.1.9.2=Blabla De Test
O=BlaBla COMME
OU=MULTI-PERMISD'autres comptes et des groupes ayant accès à la clé privée comprennent:
BUILTIN\Administrateurs
NT AUTHORITY\SYSTEM
IIS APPPOOL\ASP.NET v4.0
BUILTIN\Utilisateurs
NT AUTHORITY\NETWORK SERVICE
DIGITROLLDMZ\IIS_WPG
L'url je suis accéder ressemble à quelque chose comme ceci:
https://test.blabla.com/blabla-5.0/services/Blabla?wsdl
... Si j'y accéder à partir de serveurs web-navigateur, j'arrive à sélectionner un certificat, je sélectionne la nouvelle, et il dit que c'est ok, le vert et le SSL dans l'ordre et tout, mais mon code d'application, qui ressemble à ceci:
public static blabla.service.NettforhandlerService getNettforhandlerService(string applicationPath)
{
blabla.service.NettforhandlerService service = new blabla.service.NettforhandlerService();
if (System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"] != null && System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"].Length > 0)
{
string serviceurl = service.Url;
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySerialNumber, System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"], true);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.CertificatePolicy = new TrustHBSCertificatePolicy();
service.ClientCertificates.Add(col[0]);
}
return service;
}
Ne renvoie cette erreur:
The request was aborted: Could not create SSL/TLS secure channel.
... J'ai ajouté un peu de trace/debug info sur le web.config, et que j'ai trouvé à partir de l'erreur était:
[Public Key]
Algorithm: RSA
Length: 2048
Key Blob: 30 82 01 0a 02 82 01 01 00 8e a6 72 c2 e1 67 16 e2 be be c3 30 89 8d bb 57 0b 48 f8 1d 09 b1 e3 26 42 c9 45 9e 02 b2 43 49 16 81 94 1b 18 d6 6d ef ....
System.Net Information: 0 : [15624] SecureChannel#32061089 - Certificate is of type X509Certificate2 and contains the private key.
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc = System.Net.SecureCredential)
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D.
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc = System.Net.SecureCredential)
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D.
System.Net.Sockets Verbose: 0 : [15624] Socket#38259205::Dispose()
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071:: - The request was aborted: Could not create SSL/TLS secure channel.
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071::GetResponse - The request was aborted: Could not create SSL/TLS secure channel.
System.Net Verbose: 0 : [15624]
Je sais que cela ressemble à l'utilisateur/l'identité n'a pas été donné l'accès au certificat (à partir de winhttpcertcfg), mais je suis très sûr qu'il a, c'est pourquoi je suis à la perte ici,
en espérant que quelqu'un avec un peu de sérieux https-certificat/web-service-des compétences pourrait m'aider ici 🙂
Grâce.
Ce qui concerne,
Jørgen E.
edit1: modification du titre pour quelque chose de plus précis.
edit2: de Nouvelles informations:
In EventViewer/Windows Logs/Security there is an event "Audit Failure" connected to this:
Cryptographic operation.
Subject:
Security ID: IIS APPPOOL\ASP.NET v4.0
Account Name: ASP.NET v4.0
Account Domain: IIS APPPOOL
Logon ID: 0x32498
Cryptographic Parameters:
Provider Name: Microsoft Software Key Storage Provider
Algorithm Name: Not Available.
Key Name: {00E1A3F5-7400-41CA-8290-02983473AEAF}
Key Type: Machine key.
Cryptographic Operation:
Operation: Open Key.
Return Code: 0x80090010
OriginalL'auteur Jørgen Eide | 2012-11-16
Vous devez vous connecter pour publier un commentaire.
Pas beaucoup peut être extraite du journal, mais...
Google-fu donne le résultat suivant: 0x80090010 est le plus probable d'un certificat d'erreur d'accès.
Avec un haut niveau de probabilité-je en conclure que vous devez définir des autorisations pour votre certificat SSL privé - clés afin qu'IIS peuvent y accéder.
Voir:
http://www.dotnetnoob.com/2011/01/how-to-give-iis-access-to-private-keys.html
Question similaire avec une autre option: La demande a été abandonnée: impossible de créer le canal sécurisé SSL/TLS
Vous pouvez utiliser un outil par Microsoft, FindPrivateKey.exe. Ou tout simplement supprimer votre clé, écrivez la liste de fichiers et ré-importer le certificat/clé (si vous avez le PFX), en notant le nouveau fichier créé. Ref: msdn.microsoft.com/ru-ru/library/ms732026.aspx (FindPrivateKey)
FindPrivateKey et la technique que vous avez spécifié le contraire de ce que je veux réaliser 🙂 je sais que le nom de fichier de la machinekeys-fichier, et veulent savoir ce certificat ce fichier est attaché, parce qu'il n'est pas le certificat que j'utilise, j'ai identifié le certificat, je suis en utilisant avec findprivatekey.
Eh bien .. je savais ce certificat je l'utilise, et j'ai pu trouver le correspondant machinekeys-fichier, mais il y avait un AUTRE machinekeys fichier nécessaire l'accès en lecture pour "IIS APPPOOL\ASP.NET v4.0" pour que cela fonctionne.. (ai eu de travail par l'ajout de l'accès à tous les fichiers un par un manuellement) .. je ne sais pas ce que ce fichier est pour, c'est ce que je voulais savoir. De toute façon, je l'ai eu à travailler maintenant, donc pas de problème - merci pour votre aide 🙂
"vous devez définir des autorisations pour votre certificat SSL clé privée" - qui m'a aidé, ont revenir deux fois pour elle maintenant 🙂 Merci
OriginalL'auteur DarkWanderer
Problème résolu, Semble un Certificat Intermédiaire manquait, Importé dans les Certificats Intermédiaires dans la console MMC, et tout était bon 🙂
OriginalL'auteur Jørgen Eide
Réponse tardive, mais j'ai été coincé dans le même problème et la modification suivante résolu le problème pour moi.
Essayez de changer la ligne
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
avec celle-ci-dessous -
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
P. S - je suis à l'aide .Net framework 3.5 dans mon application.
OriginalL'auteur skhan247386