Hi, I've trying to understand a windows specific problem regarding certificates.
I'd like to use the SChannel backend. I'm enforcing the usage of SChannel via environment variable PS C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin> [System.Environment]::SetEnvironmentVariable('CURL_SSL_BACKEND','schannel',[System.EnvironmentVariableTarget]::Process) PS C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin> .\curl.exe -iv https://tfs.de.kworld.kpmg.com -debug * Trying 10.145.235.171:443... * Connected to tfs.de.kworld.kpmg.com (10.145.235.171) port 443 (#0) * schannel: disabled automatic use of client certificate * ALPN: offers h2 * ALPN: offers http/1.1 * schannel: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted. * Closing connection 0 curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted. More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above. ---- My problem is now the following. Windows validates the certificate perfectly fine. If I use Internet Explorer to browse the site I'll get a perfectly valid chain and same for Powershell ---- PS C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\curl-7.84.0_9-win64-mingw\bin> Invoke-WebRequest -UseBasicParsing "https://tfs.de.kworld.kpmg.com" -UseDefaultCredentials StatusCode : 200 StatusDescription : OK ---- If I revert back to openssl backend, the corporate CA is missing (expected) PS C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin> [System.Environment]::SetEnvironmentVariable('CURL_SSL_BACKEND','',[System.EnvironmentVariableTarget]::Process) PS C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin> .\curl.exe -iv https://tfs.de.kworld.kpmg.com -debug * Trying 10.145.235.171:443... * Connected to tfs.de.kworld.kpmg.com (10.145.235.171) port 443 (#0) * ALPN: offers h2 * ALPN: offers http/1.1 * TLSv1.0 (OUT), TLS header, Certificate Status (22): * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS header, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS header, Unknown (21): * TLSv1.2 (OUT), TLS alert, unknown CA (560): * SSL certificate problem: unable to get local issuer certificate * Closing connection 0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above. ---- I export the root CA certificate $header="-----BEGIN CERTIFICATE-----`n" $footer="`n-----END CERTIFICATE-----`n" $kpmgrootcerts=Get-Childitem -Path Cert:\LocalMachine\root | where {$_.thumbprint -eq "9F3978578CDA894B03A0E94BA60BCD35BA1090B3"} $output='' foreach ($cert in $kpmgrootcerts) { $formattedcert=$header $formattedcert+=[convert]::tobase64string($cert.RawData) -replace ".{64}" , "$&`n" $formattedcert+=$footer $formattedcert=$formattedcert -replace "(`r?`n){2}","`n" $output+=$formattedcert } $output | Out-File -FilePath 'C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin\curl-ca-bundle.crt' -Append -Encoding ascii -NoNewline ---- Now curl with openssl backend is working It makes no sense for me that curl with SChannel backend is telling me that the authority is not trusted. It's the same authority that is working for IE and Invoke-Webrequest and the same that is working for OpenSSL if I export it. Do you have any ideas how to debug this? ---- PS C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin> PS C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin> .\curl.exe -iv https://tfs.de.kworld.kpmg.com -debug * Trying 10.145.235.171:443... * Connected to tfs.de.kworld.kpmg.com (10.145.235.171) port 443 (#0) * ALPN: offers h2 * ALPN: offers http/1.1 * CAfile: C:\Users\ckruegeradi\curl-7.84.0_9-win64-mingw\bin\curl-ca-bundle.crt * CApath: none * TLSv1.0 (OUT), TLS header, Certificate Status (22): * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS header, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS header, Finished (20): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS header, Finished (20): * TLSv1.2 (IN), TLS header, Certificate Status (22): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 * ALPN: server accepted h2 * Server certificate: * subject: C=DE; ST=Germany; L=Berlin; O=KPMG; OU=KPMG ITS; CN=defr2app274.de.kworld.kpmg.com * start date: Apr 1 06:10:07 2021 GMT * expire date: Apr 1 06:10:07 2023 GMT * subjectAltName: host "tfs.de.kworld.kpmg.com" matched cert's "tfs.de.kworld.kpmg.com" * issuer: C=GO; ST=England; L=London; O=KPMG Internal Certificate Services; OU=KPMG High Assurance CA; CN=KPMG Internal Issuing CA GO06; emailAddress=go-fmitsglobalcer...@kpmg.com * SSL certificate verify ok. * Using HTTP2, server supports multiplexing * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * h2h3 [:method: POST] * h2h3 [:path: /] * h2h3 [:scheme: https] * h2h3 [:authority: tfs.de.kworld.kpmg.com] * h2h3 [user-agent: curl/7.84.0] * h2h3 [accept: */*] * h2h3 [content-length: 4] * h2h3 [content-type: application/x-www-form-urlencoded] * Using Stream ID: 1 (easy handle 0x1934bd4f320) * TLSv1.2 (OUT), TLS header, Supplemental data (23): > POST / HTTP/2 > Host: tfs.de.kworld.kpmg.com > user-agent: curl/7.84.0 > accept: */* > content-length: 4 > content-type: application/x-www-form-urlencoded > * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * We are completely uploaded and fine * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.2 (IN), TLS header, Supplemental data (23): < HTTP/2 401 HTTP/2 401 -- KPMG IT Service GmbH Sitz/Registergericht: Berlin/Amtsgericht Charlottenburg, HRB 87521 B Geschäftsführer: Hans-Christian Schwieger, Helmar Symmank Aufsichtsratsvorsitzender: WP StB Klaus Becker Allgemeine Informationen zur Datenverarbeitung im Rahmen unserer allgemeinen Geschäftstätigkeit sowie im Mandatsverhältnis gemäß EU Datenschutz-Grundverordnung sind hier <https://assets.kpmg/content/dam/kpmg/de/pdf/Themen/2022/07/datenschutzinformationen-fuer-betroffene-kpmg-it-service-gmbh.pdf> abrufbar. Die Information in dieser E-Mail ist vertraulich und kann dem Berufsgeheimnis unterliegen. Sie ist ausschließlich für den Adressaten bestimmt. Jeglicher Zugriff auf diese E-Mail durch andere Personen als den Adressaten ist untersagt. Sollten Sie nicht der für diese E-Mail bestimmte Adressat sein, ist Ihnen jede Veröffentlichung, Vervielfältigung oder Weitergabe wie auch das Ergreifen oder Unterlassen von Maßnahmen im Vertrauen auf erlangte Information untersagt. In dieser E-Mail enthaltene Meinungen oder Empfehlungen unterliegen den Bedingungen des jeweiligen Mandatsverhältnisses mit dem Adressaten. The information in this e-mail is confidential and may be legally privileged. It is intended solely for the addressee. Access to this e-mail by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful. Any opinions or advice contained in this e-mail are subject to the terms and conditions expressed in the governing KPMG client engagement letter. -- Unsubscribe: https://lists.haxx.se/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html