qtbase ssl discovery of root certificates

Andriy Gapon avg at FreeBSD.org
Wed Dec 17 08:21:51 GMT 2025


QSslSocketPrivate::unixRootCertDirectories provides a list of directories to 
scan for individual certificate files.
Only /etc/ssl/certs/ is relevant to FreeBSD, other directories do not exist.

It might be a good idea to add /usr/local/etc/ssl/certs/ there.
And maybe some other directories where either FreeBSD base or FreeBSD ports 
install certificate files.
E.g., /usr/share/certs/trusted.

That wouldn't be needed because /etc/ssl/certs/ is supposed to have symbolic 
links to all trusted certificates.  And it does.
But QSslSocketPrivate::systemCaCertificates sets a filter on the certificate 
file names and the filter allows only *.crt and *.pem files while the symbolic 
links do not have an extension (they have .N suffixes, e.g., .0, to resolve 
potential fingerprint conflicts).

So, the current combination of directory paths and file name filters means that 
no individual certificates are loaded by the Qt SSL code.

Things are not broken only because the code also loads certificate bundle files.
QSslSocketPrivate::systemCaCertificates has hardcoded paths 
/etc/pki/tls/certs/ca-bundle.crt and /usr/local/share/certs/ca-root-nss.crt.
The former is not used on FreeBSD, the latter is there specifically for FreeBSD.
It works, but I think that it would be better to use /etc/ssl/cacert.pem (which 
is typically a symbolic link to ca-root-nss.crt).
Maybe /usr/local/etc/ssl/cert.pem as well.
Those paths seem to be "canonical" while ca-root-nss.crt is a detail of 
ca_root_nss port.

In summary.
Qt SSL does not load any individual root certificate files at all.
Qt SSL does load a root certificate bundle file but it could be done through a 
better path (or paths).

-- 
Andriy Gapon



More information about the kde-freebsd mailing list