Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

Python module to extract CA and CRL certs from Windows' cert store (ctypes based).

Project Description

wincertstore provides an interface to access Windows’ CA and CRL certificates. It uses ctypes and Windows’s sytem cert store API through crypt32.dll.

Warning

Security Fix

wincertstore 0.1 used to return all certificates although some are not suitable to verify TLS/SSL server certificates. wincertstore 0.2 only returns certificates for SERVER_AUTH enhanced key usage by default.

Example

import wincertstore
for storename in ("CA", "ROOT"):
    with wincertstore.CertSystemStore(storename) as store:
        for cert in store.itercerts(usage=wincertstore.SERVER_AUTH):
            print(cert.get_pem().decode("ascii"))
            print(cert.get_name())
            print(cert.enhanced_keyusage_names())

SERVER_AUTH is the default enhanced key usage. In order to get all certificates for any usage, use None. The module offers more OIDs like CLIENT_AUTH, too.

For Python versions without the with statement:

for storename in ("CA", "ROOT"):
    store = wincertstore.CertSystemStore(storename)
    try:
        for cert in store.itercerts():
            print(cert.get_pem().decode("ascii")
    finally:
        store.close()

See CertOpenSystemStore

CertFile helper:

import wincertstore
import atexit
import ssl

certfile = wincertstore.CertFile()
certfile.addstore("CA")
certfile.addstore("ROOT")
atexit.register(certfile.close) # cleanup and remove files on shutdown)

ssl_sock = ssl.wrap_socket(sock,
                           ca_certs=certfile.name,
                           cert_reqs=ssl.CERT_REQUIRED)

Requirements

License

Copyright (c) 2013, 2014 by Christian Heimes <christian@python.org>

Licensed to PSF under a Contributor Agreement.

See http://www.python.org/psf/license for licensing details.

References

ChangeLog

wincertstore 0.2

Release date: 26-Feb-2013

  • By default CertSystemStore.itercerts() is now limited to return only certs that are suitable for SERVER_AUTH – that is to validate a TLS/SSL’s server cert from the perspective of a client.
  • Add CERT_CONTEXT.get_name() to get a human readable name of a certificate.
  • Add CERT_CONTEXT.enhanced_keyusage() to get enhanced key usage and trust settings from registry. The method returns either True or a frozenset of OIDs. True means that the certificate is valid for any purpose.
  • CERT_CONTEXT.enhanced_keyusage_names() maps OIDs to human readable names.
  • Add commin OIDs for enhanced key usages like SERVER_AUTH and CLIENT_AUTH.
  • Add support for universal wheels.
  • Add tox for testing Python 2.6 to 3.3. Python 2.4 and 2.5 are tested manually.
  • Use pypi.python.org:443 for TLS tests.

wincertstore 0.1

Release date: 22-Mar-2013

  • Initial release
Release History

Release History

This version
History Node

0.2

History Node

0.1

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
wincertstore-0.2-py2.py3-none-any.whl (8.8 kB) Copy SHA256 Checksum SHA256 2.7 Wheel Feb 26, 2014
wincertstore-0.2.zip (15.0 kB) Copy SHA256 Checksum SHA256 Source Feb 26, 2014

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting