[RADIATOR] Trust client certificates of a specific issuing CA

Philip Brusten philip.brusten at kuleuven.be
Fri Apr 21 14:11:58 UTC 2017


On 20/04/2017 9:44, Heikki Vatiainen wrote:
> On 19.4.2017 17.17, Philip Brusten wrote:
>
>> Assume you have a PKI like:
>>
>> root CA
>>    - intermediate CA 1
>>       - issuing CA 1
>>    - intermediate CA 2
>>       - issuing CA 2
>>
>> If you only want to trust endpoint certificates for EAP-TLS issued by 
>> "issuing CA 2", would it be sufficient to *only* trust "issuing CA 2" 
>> in EAPTLS_CAFile?
>
> Possibly yes. I think that in X.509 the trusted CAs, or trust anchors 
> as they are called, do not need to have subject and issuer that is 
> equal. This is what the current practice is with root CA certificates 
> (you need to put something in issuer so own name is used).
>
> In other words, you could try using any CA certificate as a trust 
> anchor by configuring it as trusted. What is unsure, the "possibly" 
> part, refers to the question if the software can be configured to do so.
Unfortunataly not.
Radiator returns: EAP TLS certificate verification failed: unable to get 
local issuer certificate,  29215: 1 - error:140890B2:SSL 
routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned

OpenSSL added a new feature in 1.0.2 to accept a partial chain.

It can be set using this flag X509_V_FLAG_PARTIAL_CHAIN which you could 
set using the Net::SSLeay::X509_STORE_set_flags

Perhaps you could make a EAPTLS-setting for this flag in Radiator?

>
> In addition to this, you could consider EAPTLS_CertificateVerifyHook 
> to see that the client certifcate's issuer is "issuing CA 2". This 
> could provide a good belt + suspenders configuration even if trusting 
> "issuing CA 2" would work by itself.
>
For now we will have to perform an extra check via the hook to validate 
the issuer of the client certificates.
>> Or is it required to trust the entire chain: "root CA" + 
>> "intermediate CA 2" + "issuing CA 2"?
>> If you do the latter and a supplicant device has a certificate issued 
>> by "issuing CA 1" and sends its entire certificate chain up to the 
>> root CA during the handshake, will it be validated as well?
>
> I'd say there's potential for this to happen. In this case you could 
> use the hook I mentioned above to see that everything else except of 
> certificates issued by "issuing CA 2" get grounded and rejected.
It does get validated if the client sends its chain up to the trusted 
root CA.
>
>> The documentation 
>> https://www.open.com.au/radiator/ref/EAPTLS_CAFile.html#EAPTLS_CAFile 
>> is not entirely clear on that.
> I think we'd need to say that TLS library manual would be the 
> canonical source of information for these options.
The sentence "So, EAPTLS_CAFile must contain all the CA root and 
intermediate certificates required to validate all the various client 
certificates that may be installed on your supplicant devices." is not 
entirely true. If you do not trust the intermediate certificates, but 
the client sends them along during the handshake, the trust can still be 
established. I agree that it is a best practice to add them, but it is 
not required. Otherwise you could falsely conclude that there is no 
trust when the entire chain is *not* present.

Regards,
Philip


More information about the radiator mailing list