Re: ktls-utils: question about certificate verification

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 26/06/2024 2:04 am, Rick Macklem wrote:
On Tue, Jun 25, 2024 at 12:48 PM Calum Mackay <calum.mackay@xxxxxxxxxx> wrote:

On 25/06/2024 6:31 pm, Olga Kornievskaia wrote:
On Fri, Jun 21, 2024 at 1:39 PM Calum Mackay <calum.mackay@xxxxxxxxxx> wrote:

On 21/06/2024 4:33 pm, Olga Kornievskaia wrote:
Hi Calum,

My surprise was to find that having the DNS name in CN was not
sufficient when a SAN (with IP) is present. Apparently it's the old
way of automatically putting the DNS name in CN and these days it's
preferred to have it in the SAN.

If the infrastructure doesn't require pnfs (ie mounting by IP) then it
doesn't matter where the DNS name is put in the certificate whether it
is in CN or the SAN. However, I found out that for pnfs server like
ONTAP, the certificate must contain SAN with ipAddress and dnsName

Noted, thanks very much Olga, that's useful.

extensions regardless of having DNS in CN. I have not tried doing
wildcards (in SAN for the DNS name) but I assumed gnuTLS would accept
them. I should try it.

Wildcard didn't seem to work for me in CN, but I may not have tried it
in SAN; I'll do that too.

I have tried to use a wildcard in the SAN and that didn't work for me.
How about you? Specifically, I tried in the SAN
"DS:netapp*.linux.fake" and tried to mount netapp119.linux.fake which
failed with "certificate owner unexpected" (meaning certificate didnt
find anything match to netapp119.linux.fake.
I don't know if this helps, but at least for the OpenSSL libraries, wildcards
can optionally match a component in a DNS name or multiple components.
For example:
*.linux.fake could match netapp119.linux.fake, but not
netapp119.subnet.linux.fake
OR
*.linux.fake could match both netapp119.linux.fake and
netapp119.subnet.linux.fake
OR
*.linux.fake does not match anything.

Which of the above is true depends on whether an argument to X509_check_host()
is set to X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS, 0, or
X509_CHECK_FLAG_NO_WILDCARDS.
- I made X509_CHECK_FLAG_NO_WILDCARDS the default in FreeBSD, but it
   can optionally be set to either of the other values.

I don't know if you guys use a similar call? rick

Thanks Rick.

The Linux handshake implementation (tlshd, in pkg ktls-utils) uses the gnutls library, rather than openssl. gnutls does consider wildcards when hostname matching by default, and tlshd doesn't disable that.


I've just noticed, in the gnutls docs:

https://gnutls.org/manual/gnutls.html#X509-certificate-API
gnutls_x509_crt_check_hostname2
… [wildcards] are only considered if the domain name consists of three components or more, and the wildcard starts at the leftmost position

tlshd uses gnutls_certificate_verify_peers3() rather than gnutls_x509_crt_check_hostname2(), and the …peers3() function does check the hostname, so presumably the same restriction applies.


That would suggest that Olga's example ["netapp*.linux.fake"] wouldn't be expected to work, since the wildcard isn't at the leftmost position.

However, my testing was using "*.dept.domain.com", which appears to follow the rule above.


gnutls doesn't seem to have quite the same level of option granularity that you show above for openssl.


I'll test further later today.

cheers,
calum.



hi Olga, yes, exactly the same here. Wildcards don't work for me in
either CN or SAN.

What I've been doing in my testing, when the host full DNS name is > 64
chars, is to use the simple hostname as the CN (for ease of
identification in e.g. "trust list") and the full DNS name in a SAN DNS:
extension, and that is working well.

thanks,
calum.



--
Calum Mackay
Linux Kernel Engineering
Oracle Linux and Virtualisation

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux