On Fri, Nov 20, 2015 at 04:53:18PM +0100, Daniel Pocock wrote:
> Package: nagios-check-xmppng
> Version: 0.1.2-1~bpo8+1
> Severity: important
> 
> It doesn't seem to work if no CA root argument is specified.  It should
> automatically use the correct location for a Debian system (based on
> SSLContext.set_default_verify_paths()):
> 
> 
> # /usr/lib/nagios/plugins/check_xmppng \
>              -H thp003 --servername pocock.pro
> XMPP CRITICAL - time is unknown (no CA certificates found) | time=unknown
> 
> 
> If I tell it to use a directory (capath) it fails too:
> 
> 
> # /usr/lib/nagios/plugins/check_xmppng \
>     -H thp003 --servername pocock.pro \
>     -r /etc/ssl/certs
> XMPP CRITICAL - time is unknown (no CA certificates found) | time=unknown
> 
> 
> 
> If I give it a bundle filename it works:
> 
> 
> # /usr/lib/nagios/plugins/check_xmppng \
>     -H thp003 --servername pocock.pro \
>     -r /etc/ssl/certs/ca-certificates.crt
> XMPP OK - time is 0.4267s | daysvalid=152d time=0.426693s;;;0

This seems to be a more general issue with the Python 3 interpreter.
check_xmppng already uses ssl.SSLContext.load_default_certs() which calls
set_default_verify_paths() internaly. Unfortunately
/etc/ssl/certs/ca-certificates.crt is not considered by
set_default_verify_paths by default. I tried the following to check the
behaviour:

1.) Find out where set_default_verify_paths is looking for certificates:

  $ python3
  >>> import ssl
  >>> ssl.get_default_verify_paths()
  DefaultVerifyPaths(cafile=None, capath='/usr/lib/ssl/certs',
  openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/lib/ssl/cert.pem',
  openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/lib/ssl/certs')

2.) Try whether load_default_certs/set_default_verify_paths works:

  $ python3
  >>> import ssl
  >>> context = ssl.create_default_context()
  >>> context.load_default_certs()
  >>> context.cert_store_stats()
  {'x509_ca': 0, 'x509': 0, 'crl': 0}

this is obviously not loading any certificate and is the same sequence used
in check_xmppng.

3.) Try setting SSL_CERT_DIR (guessed from the result of
get_default_verify_paths()):

  $ SSL_CERT_DIR=/etc/ssl/certs/ python3
  >>> import ssl
  >>> context = ssl.create_default_context()
  >>> context.load_default_certs()
  >>> context.cert_store_stats()
  {'crl': 0, 'x509': 0, 'x509_ca': 0}

still no certificates loaded. I expected that the certificates from
/etc/ssl/certs should be loaded, this is not the case though.

4.) Try setting SSL_CERT_FILE (again guessed from the result of
get_default_verify_paths()):

  $ SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt python3
  >>> import ssl
  >>> context = ssl.create_default_context()
  >>> context.load_default_certs()
  >>> context.cert_store_stats()
  {'x509': 175, 'crl': 0, 'x509_ca': 175}

In this case the certificates are loaded. Now back to check_xmppng:

  $ SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
  /usr/lib/nagios/plugins/check_xmppng -H xmpp.gnuviech-server.de --servername 
dittberner.info --starttls
  XMPP OK - request took 0.406091s, certificate valid for 34 days |
  daysvalid=34d time=0.406091s;;;0

seems to work. From my point of view this is an issue with how the Python
interpreter handles the default paths and not an issue with check_xmppng
itself.

Daniel what do you think?


Best regards
Jan

-- 
Jan Dittberner - Debian Developer
GPG-key: 4096R/558FB8DD 2009-05-10
         B2FF 1D95 CE8F 7A22 DF4C  F09B A73E 0055 558F B8DD
https://portfolio.debian.net/ - https://people.debian.org/~jandd/

Attachment: signature.asc
Description: Digital signature

Reply via email to