Since 2.7.9, Python verifies SSL certificates by default. Currently, even with security/ca_root_nss installed, Python fails certificate verification. See: https://unix.stackexchange.com/questions/176294/what-should-i-do-about-python-2-7-9-not-looking-for-ssl-certificates-in-the-righ Python uses OpenSSL's standard SSL_CTX_load_verify_locations to load a list of CA root certificates. Support was added to ca_root_nss for out-of-the-box certificate verification for a number of base utilities in r372629 [1], but this did not include support for software that uses OpenSSL's SSL_CTX_load_verify_locations function. [1] https://svnweb.freebsd.org/changeset/ports/372629 OpenSSL defaults to the following paths and filenames for the certificate and CAFile lookup: Base: SSL_CERT_DIR=/etc/ssl/certs SSL_CERT_FILE/etc/ssl/cert.pem Ports: SSL_CERT_DIR=/usr/local/openssl/certs SSL_CERT_FILE=/usr/local/openssl/cert.pem This change installs a symlink which points to the root certificate bundle in the location that OpenSSL from ports looks for them. This allows any and all software utilising SSL_CTX_load_verify_locations function to verify SSL certificates by default after installation of this package. Additionally, display a pkg-message to the user about the lack of warranty associated with these certificates. Note: This is *NOT* related to solving for SSL certificate verification for OpenSSL in Base, which is covered in bug 189811. While I'm here: - Use options helpers and OPTIONS_SUB portlint: OK porttest: OK testport: OK
Auto-assigned to maintainer gecko@FreeBSD.org
Created attachment 151202 [details] Fix broken SSL verification for software using Ports OpenSSL
+1
>+This enables SSL Certificate Verification by client software without manual >+intervention. >+ >+If you prefer to do this manually, remove the following symlinks: >+ >+ * /etc/ssl/cert.pem >+ * /usr/local/openssl/cert.pem This is unreliable: - the symlinks would be restored upon next update - pkg-check and pkg-delete would compalin about missing file - ignores user-maintained certificates (e.g. CA-less config) @sample keyword can fix them (see bug 196432) with the advice modified to: If you prefer to do this manually, replace the following symlinks with either an empty file or your site-local certificate bundle: /etc/ssl/cert.pem /usr/local/etc/ssl/cert.pem /usr/local/openssl/cert.pem
Agreed, thanks for the review & feedback Jan. I'll v2 the patch
Created attachment 151211 [details] Fix SSL verification for ports OpenSSL v2 Patch v2, adds: - Use @sample for LOCALBASE/etc/ssl and LOCALBASE/openssl symlinks - Add LICENSE (MPL) - Add pkg-message to SUB_LIST and variable'ise PREFIX - Tweak pkg-message
Created attachment 152293 [details] Port diff to have valid SSL with openssl port (option PORT_ETCSYMLINK)
wowi42, please create a separate issue for your patch introducing a dependency on OpenSSL.
A commit references this bug: Author: koobs Date: Mon Feb 9 09:44:29 UTC 2015 New revision: 378720 URL: https://svnweb.freebsd.org/changeset/ports/378720 Log: security/ca_root_nss: Fix SSL verification for ports OpenSSL consumers Since 2.7.9, Python verifies SSL certificates by default. Currently, even with security/ca_root_nss installed, Python fails certificate verification. Upon investigation, Python uses OpenSSL's standard SSL_CTX_load_verify_locations function to load a list of CA root certificates. Support was added to ca_root_nss for "out of the box" certificate verification for a number of base utilities in r372629 [1], but this did not include support for software that uses OpenSSL's SSL_CTX_load_verify_locations function. [1] https://svnweb.freebsd.org/changeset/ports/372629 OpenSSL defaults (at compile time) to the following paths and filenames for certificate and CAFile lookup: Base: SSL_CERT_DIR=/etc/ssl/certs SSL_CERT_FILE/etc/ssl/cert.pem Ports: SSL_CERT_DIR=/usr/local/openssl/certs SSL_CERT_FILE=/usr/local/openssl/cert.pem This change installs a symlink which points to the root certificate bundle in the location that OpenSSL from ports looks for them. This allows any and all software utilising SSL_CTX_load_verify_locations function to verify SSL certificates by default after installation of this package. Additionally, display a pkg-message to the user about the lack of warranty associated with these certificates. Note: This is *NOT* related to solving for SSL certificate verification for OpenSSL in Base, which is covered in bug 189811. While I'm here: - Add LICENSE - Use options helpers and OPTIONS_SUB - Fix typo in !!! message !!! PR: 196431 Submitted by: koobs Reviewed by: jbeich Approved by: maintainer timeout (1 month) Changes: head/security/ca_root_nss/Makefile head/security/ca_root_nss/files/pkg-message.in head/security/ca_root_nss/pkg-plist
Committed, with minor changes.