Configurare: o aplicație client .NET (4.6) se conectează la un serviciu SOAP la distanță prin HTTPS. Serviciul la distanță poate fi configurat să necesite sau nu un certificat de client.
Ceea ce caut ca răspuns este orice posibilă explicație a motivului pentru care scenariul #2 eșuează ... următoarele 3 scenarii au fost toate testate folosind exact aceeași bază de cod, schimbând doar certificatele implicate și dacă un certificat de client a fost cerut sau nu de către serviciu.
Scenariul #1 - nu este necesar un certificat de client
- clientul se conectează OK
Scenariul #2 - certificat client necesar, certificat A folosit
- certificatul A este instalat în Windows pe partea client (magazin local de computere)
- certificatul este valabil, 2048 de biți, non-wildcard, utilizat cu succes pentru autentificarea serverului într-un alt serviciu neaferent, emis de GoDaddy Secure Certificate Authority - G2
- certificatul este partajat cu partea de la distanță care par să știe ce fac
- când clientul încearcă să solicite, strângerea de mână eșuează. Pe partea clientului, excepția .NET este „Solicitarea a fost anulată: nu s-a putut crea canalul securizat SSL/TLS”. Pe partea de server eroarea este „clientul nu a reușit să prezinte un certificat”.
Scenariul #3 - certificat client necesar, certificat B folosit
- totul este exact la fel ca numărul 2, cu excepția utilizării unui certificat de client diferit (B)
- certificatul este valabil, 2048 biți, wildcard, utilizat cu succes pentru autentificarea serverului într-un alt serviciu neaferent, emis de GeoTrust RSA CA 2018
- clientul se conectează OK
Ceea ce putem vedea din jurnalele este că în ambele scenarii #2 și #3, clientul și serverul negociază pentru a utiliza TLS 1.2.
După ce am rulat de mai multe ori cele de mai sus, verificând totul, singura mea concluzie este că certificatul A nu este cumva compatibil cu configurarea - fie clientul .NET decide să nu-l prezinte, fie serviciul nu îl poate accepta. Dar ce ar putea fi diferit/ lipsă?