Chrome fails to do client certificate authentication with Microsoft ADFS 2016
Reported by
steffen....@gmail.com,
Jul 31
|
||||||||
Issue descriptionUserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3508.0 Safari/537.36 Example URL: https://sts.muething.com/adfs/ls/IdpInitiatedSignon.aspx Steps to reproduce the problem: 1. Go to the web page 2. Click on sign in, then on use X.509 certificate 3. Select a valid certificate from your local store What is the expected behavior? The browser should authenticate with the server, receive a redirect and present a new page that confirms the successful login. What went wrong? The browser fails with ERR_CONNECTION_RESET. Did this work before? N/A Chrome version: 70.0.3508.0 Channel: canary OS Version: 10.0 Flash Version: When trying to implement certificate-based login for the current version of Active Directory Federation Services, I ran into a problem with Chrome where it fails to authenticate with the server. The basic flow in ADFS is this: - You go to the ADFS provider at sts.yourdomain.com and select that you want to log in with a certificate - The server issues a redirect to certauth.sts.yourdomain.com - The browser connects to the certauth endpoint, which requires certificate authentication - After authentication, the server issues another redirect back to sts.yourdomain.com This flow works with Firefox, IE and Edge, but fails with Chrome. I've captured some wireshark traces (attached) for Firefox and Chrome. They look very similar, the only real differences I can see are: - Chrome immediately resets the connection the first time the server requests client authentication - The TLS messages with the Certificate Verify from the client are slightly different. I'm absolutely no expert on TLS, but I can try stuff out if you need additional information.
,
Jul 31
The server logs state that the request does not contain a user certificate, but lists the hash of the CA certificate included in the request.
,
Jul 31
I've done some more testing: Chrome 68 also fails to authenticate on macOS, but it works on Linux (Ubuntu 18.04).
,
Jul 31
No idea if client certs is Internals>Network>SSL or Internals>Network>Certificates. Assuming the former.
,
Jul 31
I also looked at a wireshark trace of Chrome on Linux and could directly see one difference: Windows: Chrome sends both the user certificate and the CA certificate Linux: Chrome only sends the user certificate That might point to the area of the problem. On the other hand, sending the CA certificate along should not be a problem, Firefox also does it.
,
Jul 31
,
Aug 1
Hi, this sounds similar to issue 855155 , does comment 11 there address it? https://bugs.chromium.org/p/chromium/issues/detail?id=855155#c11
,
Aug 1
That's unlikely, the server is a fully updated Windows 2016 server instance that was only created a few weeks ago, but I can check whether the update referenced in the Microsoft article is installed. The website also doesn't always fail like in the other bug, other authentication flows (form-based, Kerberos (GSSAPI) and NTLM) all work without a problem. It's really the TLS setup when presenting the client certificate. According to the logs, the server thinks that there is no client certificate present.
,
Aug 1
Thank you for providing more feedback. Adding the requester to the cc list. For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
,
Aug 14
A Gentle ping... @mattm@chromium.org: Requesting you to can you please have a look in to it for further inputs on it. Thanks..!
,
Sep 5
The issue seems to be out of scope for us to triage it further from our end as this is related to SSL certificate authentication with Microsoft ADFS, hence adding label "TE-NeedsTriageHelp" and requesting someone from "Network" team to have a look into this and help in further triaging. Thanks!
,
Sep 5
To correct this point here: > The TLS messages with the Certificate Verify from the client are slightly different They differ only in the contents of the signature, which is, of course, expected to differ because the signature is different for each connection. If you gathered two traces in Firefox, you would see the same distinction. The server appears to be resetting the connection after the CertificateVerify, so it seems unhappy with it for some reason. I manually verified the signature against the transcript, and it's just fine. Honestly, I'm at a loss as to what could be different here. The certificates sent in the two pcaps are byte-for-byte identical. It's true that we discard the connection while waiting for the user prompt to resolve, but that shouldn't affect things with a correctly implemented TLS server. Is there anything useful in the server logs? Look specifically for the ones corresponding to the second connection, the one where we actually present a certificate. For some reason, the server is just resetting the connection on us.
,
Sep 18
Ping reporter: can you please respond to c#12?
,
Oct 17
[steffen.muething]: Last ping. Can you please response to comment 12?
,
Oct 26
Closing due to lack of feedback. |
||||||||
►
Sign in to add a comment |
||||||||
Comment 1 by steffen....@gmail.com
, Jul 3190.1 KB
90.1 KB Download
110 KB
110 KB Download
5.5 KB
5.5 KB View Download