During the MTLS handshake, after ServerHello is done client sends the client certificate back to the server, I need to know if the client should only send the client certificate or is it required to send the client cert along with the entire CA chain ?

I have a situation where I am seeing a handshake failure post CertificateVerify. The client cert looks good and it is signed out of subCA which is signed out of a RootCA that the server also trusts (server only trusts root ca , not the subCA), in this situation we see the client only sending back the client cert without the chain, is that why I see the handshake failure ?? I am wondering if the client sent the entire CA chain back, the server would have know that the client is signed by SubCA which is then signed by a root CA that it trusts... I have googled and found lot of information around server sending cert with CA chain and acceptable CAs to client .. but not anything around what client should do..

any help is appreciated.


You are responsible for sending enough of the chain for the server to connect your certificate to a trusted root.

For TLS 1.2 this is discussed in RFC 5246. Client certificates are defined in §7.4.6, which (among other things) states:

Client certificates are sent using the Certificate structure defined in Section 7.4.2.

And if you look in §7.4.2 it describes the Certificate structure as including the certificate_list (emphasis mine):

This is a sequence (chain) of certificates. The sender's certificate MUST come first in the list. Each following certificate MUST directly certify the one preceding it. Because certificate validation requires that root keys be distributed independently, the self-signed certificate that specifies the root certificate authority MAY be omitted from the chain, under the assumption that the remote end must already possess it in order to validate it in any case.

In short, the server is expected to have the trusted root, but not required or expected to have any intermediate certificates that may be required. The client is required to provide them if it wants verification to proceed smoothly and reliably. (And the same is true for the certificates the server sends to the client).

  • Thanks a ton for your response, much appreciated.. gives me confidence that I am on the right track – Waazu14 Mar 31 '19 at 3:31

The server validating a client certificate is exactly like the client validating the server's certificate, except the server usually only trusts a single root CA and the server is usually unwilling to download missing intermediate certificates (something browsers do).

The server validating the client certificate needs to be able to build a chain from the certificate the server trusts (presumably your root CA) to the end entity certificate. If this requires an intermediate then the intermediate needs to be supplied, or the intermediate needs to be configured as a trusted root on the server, in addition to the real root.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.