Mon application C # .net utilise un service Web HTTPS. Alors que le certificat est sur le point d'expirer, j'essaie de le mettre à jour avec un nouveau qui m'a été attribué (un fichier .jks que j'ai converti en .p12 à l'aide du logiciel keytool de javasdks). Je pensais que ce serait facile, car je sais comment le faire, mais cela ne veut tout simplement pas coopérer.
Ce que j'ai fait jusqu'à présent:
en utilisant l’outil findprivatekey, j’ai également localisé le fichier de clé et lui a donné l’accès à apppoolidentity. (En désespoir de cause).
C:\Program Files (x86)\Kits de ressources Windows\Tools> winhttpcertcfg -l -c LOCAL_MACHINE\My -s "9000 - Blabla" Outil de configuration de certificat Microsoft (R) WinHTTP Copyright ( C) Microsoft Corporation 2001.
Certificat correspondant: CN = 9000 - Blabla C = NON L = "c/o Blabla AS, Blablaaddress" OU = 957839827 OID.1.2.240.111111.1.9.8 = 12345678 OID.1.2.240.111111.1.9.2 = Test Blabla O = BlaBla AS OU = MULTI-AUTORISÉ
Les comptes et groupes supplémentaires ayant accès à la clé privée incluent: BUILTIN\Administrators NT AUTHORITY\SYSTEM IIS APPPOOL\ASP.NET v4.0 BUILTIN\Utilisateurs NT AUTHORITY\NETWORK SERVICE DIGITROLLDMZ\IIS_WPG
L'URL que j'accède ressemble à ceci:
https://test.blabla.com/blabla-5.0/services/Blabla?wsdl
... Si j'y accède à partir du navigateur Web des serveurs, je sélectionne un certificat, je sélectionne le nouveau, et le message indique que tout va bien, vert et SSL dans l'ordre, 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;
}
N'émet que cette erreur:
The request was aborted: Could not create SSL/TLS secure channel.
... J'ai ajouté des informations de trace/débogage à web.config, et j'ai découvert l'erreur:
[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 donne l'impression que le bon utilisateur/identité n'a pas accès au certificat (à partir de winhttpcertcfg), mais je suis sûr que c'est le cas, c'est pourquoi je suis perdu ici,
en espérant que quelqu'un avec quelques compétences sérieuses en https-certificate/web-service puisse m'aider ici :-)
Merci.
Cordialement, Jørgen E.
edit1: modification du titre en quelque chose de plus précis. edit2: Nouvelle information:
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
Problème résolu, un certificat intermédiaire semblait manquant, importé dans des certificats intermédiaires dans MMC, et tout allait bien :-)
Peu de choses peuvent être extraites du journal, mais ...
Google-fu donne le résultat suivant: 0x80090010 est très probablement une erreur d'accès au certificat.
À partir de là, avec une forte probabilité, je conclus que vous devez définir des autorisations pour votre clé privée de certificat SSL - afin que IIS puisse 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
Réponse tardive, mais je me suis retrouvé coincé dans le même problème et la modification suivante a corrigé le problème pour moi. Essayez de modifier la ligne ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; Avec le mot un en dessous - ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072;
P.S - J'utilise .Net Framework 3.5 dans mon application.