Bug 196431

Summary: security/ca_root_nss: Fix broken SSL verification for software (and Python) using OpenSSL from ports
Product: Ports & Packages Reporter: Kubilay Kocak <koobs>
Component: Individual Port(s)Assignee: Kubilay Kocak <koobs>
Status: Closed FIXED    
Severity: Affects Many People CC: alfred, gecko, jbeich, koobs, possnfiffer, wowi
Priority: Normal Keywords: easy, feature, patch
Version: Latest   
Hardware: Any   
OS: Any   
See Also: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196432
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=189811
Bug Depends on:    
Bug Blocks: 196357    
Attachments:
Description Flags
Fix broken SSL verification for software using Ports OpenSSL
none
Fix SSL verification for ports OpenSSL v2
none
Port diff to have valid SSL with openssl port (option PORT_ETCSYMLINK) none

Description Kubilay Kocak freebsd_committer freebsd_triage 2015-01-02 06:44:17 UTC
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
Comment 1 Bugzilla Automation freebsd_committer freebsd_triage 2015-01-02 06:44:17 UTC
Auto-assigned to maintainer gecko@FreeBSD.org
Comment 2 Kubilay Kocak freebsd_committer freebsd_triage 2015-01-02 06:45:13 UTC
Created attachment 151202 [details]
Fix broken SSL verification for software using Ports OpenSSL
Comment 3 Alfred Perlstein freebsd_committer freebsd_triage 2015-01-02 07:23:53 UTC
+1
Comment 4 Jan Beich freebsd_committer freebsd_triage 2015-01-02 10:00:19 UTC
>+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
Comment 5 Kubilay Kocak freebsd_committer freebsd_triage 2015-01-02 10:31:52 UTC
Agreed, thanks for the review & feedback Jan.

I'll v2 the patch
Comment 6 Kubilay Kocak freebsd_committer freebsd_triage 2015-01-02 14:01:10 UTC
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
Comment 7 Roller 2015-01-02 15:32:33 UTC
+1
Comment 8 wowi42 2015-01-28 06:30:21 UTC
Created attachment 152293 [details]
Port diff to have valid SSL with openssl port (option PORT_ETCSYMLINK)
Comment 9 Kubilay Kocak freebsd_committer freebsd_triage 2015-01-28 10:28:56 UTC
wowi42, please create a separate issue for your patch introducing a dependency on OpenSSL.
Comment 10 commit-hook freebsd_committer freebsd_triage 2015-02-09 09:45:07 UTC
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
Comment 11 Kubilay Kocak freebsd_committer freebsd_triage 2015-02-09 09:49:57 UTC
Committed, with minor changes.