Puncte:0

Autentificarea reciprocă (clientul WCF care se conectează la serviciul SOAP) eșuează cu un certificat de client, dar funcționează cu altul (dar ambele sunt de încredere pe partea serverului)

drapel hr

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ă?

drapel hr
Corect, dar ce ar face ca un certificat să fie incompatibil sau nerecunoscut, atunci când același certificat funcționează cu succes pentru autentificarea serverului într-un alt serviciu care nu are legătură?
drapel hr
Bănuiesc că #1 și #2 s-ar putea aplica aici - voi verifica. Certificatul nu a expirat, deci nu #3. Conform postării, eroarea apare în timpul strângerii de mână între clientul WCF și serviciul SOAP, deci nu există pagini web implicate aici.
Steeeve avatar
drapel fr
Doar o presupunere: ați verificat dacă contul de utilizator al clientului are acces la citire la cheia privată a certificatului A?
drapel hr
Mulțumesc @Steeeve, dar permisiunile de citire pentru cheile private cert A și B sunt identice și se află în același folder de magazin Windows.
drapel cn
O captură de pachet pe client poate confirma dacă este prezentat un certificat. De asemenea, activat și verificați jurnalul de evenimente Windows CAPI.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.