Some problems with TLS 1.3 and PSK
Alejandro Pérez Méndez
alex at um.es
Mon Jan 14 20:16:49 CET 2019
>> Waking up in 0.6 seconds.
>> (0) <<< recv TLS 1.3 [length 0002]
>> (0) ERROR: TLS Alert read:fatal:internal error
>> (0) TLS_accept: Need to read more data: error
> That's an error produced by OpenSSL. We're trying to read from the BIO (memory buffer), and OpenSSL is saying "nope, that failed, and you shouldn't retry".
>
>> Note that
>> openssl s_server -psk
>> 03592CFAD91DB9E6DBDC022A80E14D15B62493C7D6D114272FD70374EA920E75DEB5DFC760487D96F8E1D4310FC617167DD539CB4245BEFE083BE71CA28F937A13EE3ECA0EBC4FC6687A948CE0F32FBF99AAF2B9024EAEF5688B1CA054F3DDA54D65277223ED25FB3C2D7F39FDE1FE1D2EF1D8B6F04F97121095A077A33784CD2754E0E6A8511F5DC334A0394E41B7300ED7ACCC62F8903B9092A0CD40FA12F8DC825852BD080292519450F37C80D96033704E86E36874635D800F0AD4230E9C9343060E25343BF9D33A12B979EF6318A6F32FCE9791423C82DE8DCF17634247592D86F4F5029CFF258D6DDC8ADDFB6223E02C8B7843C991686966775B9044D3
>> -psk_identity key-2378d1 -cert /usr/local/etc/raddb/certs/server.pem
>> -key /usr/local/etc/raddb/certs/server.key -msg -port 2083
>>
>> Does work perfectly fine using the very same client command.
> So it's one of 1000 OpenSSL calls, or one of 1000 parameters pass to OpenSSL.
>
> The OpenSSL API is rather too magical for my liking.
I know what you mean...
>
>> Also note that hardcoding "psk_hexphase" and "psk_identity", and
>> disabling any certificate configuration on the server works as well
>> (even keeping the psk_query parameter).
> That should help narrow it down a bit more. It looks like the various code paths aren't *quite* the same.
>
> I've pushed some changes which complain if both psk_identity && psk_query are set. They shouldn't both be set. I've also pushed changes which complain if any PSK && CA config are used at the same time. Again, both shouldn't be set.
Well.... (see below)
>
>> So it seems that somehow it has to do with how certificate stuff is
>> initialised.
> Which shouldn't be there if you're using PSK...
>
> From the EAP module config:
>
> #
> # If OpenSSL supports TLS-PSK, then we can use
> # a PSK identity and (hex) password. When the
> # following two configuration items are specified,
> # then certificate-based configuration items are
> # not allowed. e.g.:
> #
> # private_key_password
> # private_key_file
> # certificate_file
> # ca_file
> # ca_path
>
>
> The code enforced that for psk_identity, but allowed them for psk_query.
>
> And from your original message:
>
>> In 3.0.17, problems only arise when psk_query is used with the
>> certificate TLS configuration parameters.
> The solution, then, is to *not* use psk_query && certs at the same time. I don't think they were ever intended to be used at the same time, due to the restrictions on psk_identity.
But when psk_query you don't need to specify psk_identity. It is just
used in the query as a parameter.
psk_query = "%{psksql:select hex(key) from psk_keys
where keyid = '%{TLS-PSK-Identity}'}"
>
> If the goal is to allow psk_query && certs at the same time, then I'd like to know why / how this works. It may then also be useful to allow psk_identity && certs at the same time, too.
>
> See the latest code. It should forbid the offending configuration, and therefore work by default. If you need PSK && certs, then there's one check which can be deleted or commented out. And then PSK && certs should be allow for *both* psk_query && psk_identity.
Having a TLS server supporting both, PSK and certs, at the same time is
very convenient. In our case, Trust Router-based connections (that is,
inter-realm ones), are always PSK based.
But we offer a RADSEC-based proxy to our services, and that connection
is based on certificates, not in Moonshot.
So, with the same "listen" directive we handle both. (see the abfab-tls
site as an example where both are configured at the same time).
I guess that we could split them using different ports for each, but
then we'd need to use a non-standard port for one of them.
Best regards,
Alex
>
> Alan DeKok.
>
>
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/devel.html
More information about the Freeradius-Devel
mailing list