Skip to main content

Access your OS root certificates with utmost ease

Project description

Wassima 🔒

I named this library after my wife, whom I trust the most. ❤️

Download Count Total

This project offers you a great alternative to the MPL licensed certifi.

This project allows you to access your original operating system trust store, thus helping you to verify the remote peer certificates. It automatically fallback to an embedded trust store generated from the CCADB trusted source.

It works as-is out-of-the-box for any operating systems out there. Available on PyPy and Python 3.7+

✨ Installation

Using pip:

pip install wassima -U

Get started

A) Create a SSLContext

import wassima

ctx = wassima.create_default_ssl_context()
# ... The context magically contain your system root CAs, the rest is up to you!

B) Retrieve individually root CAs in a binary form (DER)

import wassima

certs = wassima.root_der_certificates()
# ... It contains a list of certificate represented in bytes

C) Retrieve individually root CAs in a string form (PEM)

import wassima

certs = wassima.root_pem_certificates()
# ... It contains a list of certificate represented in string

D) Retrieve a single bundle (concatenated) list of PEM certificates like certifi does

import wassima

bundle = wassima.generate_ca_bundle()
# ... It contains a string with all of your root CAs!
# It is not a path but the file content itself.

E) Register your own CA in addition to the system's

import wassima

# register CA only accept string PEM (one at a time!)
wassima.register_ca(open("./myrootca.pem", "r").read())
bundle = wassima.generate_ca_bundle()
# ... It contains a string with all of your root CAs, PLUS your own 'myrootca.pem'.
# It is not a path but the file content itself.

F) Use a hybrid trust store (OS + embedded CCADB bundle)

import wassima

# By default, only your OS trust store is used (with the embedded CCADB
# bundle as a fallback when the OS exposes nothing). Pass `hybrid_store=True`
# to force concatenating the embedded CCADB bundle in addition to the OS
# trust store. Useful in containers or appliances that ship with a slim or
# outdated system trust store.
ctx = wassima.create_default_ssl_context(hybrid_store=True)

# Available on every public top-level entry point:
wassima.root_der_certificates(hybrid_store=True)
wassima.root_pem_certificates(hybrid_store=True)
wassima.generate_ca_bundle(hybrid_store=True)

On Linux/BSD, when the system trust store has not been updated for at least 3 years, hybrid_store=True is implicitly applied so that the result is never silently outdated.

The output of root_der_certificates() (and the upper helpers built on top of it) is always deduplicated: a given DER certificate is guaranteed to appear at most once in the resulting list, regardless of how many OS stores or directories it lives in.

⏱️ Cache invalidation

For performance reasons the result of root_der_certificates() / root_pem_certificates() is cached. By default, the cache automatically expires every 12 hours so that any change to the OS trust store (e.g. a CA rotated overnight by your IT department) is picked up without having to restart the process.

You can override the TTL at runtime, pass 0 to disable caching entirely:

import wassima

# Force a refresh every hour:
wassima.set_cache_ttl(3600)

# Disable caching (every call recomputes):
wassima.set_cache_ttl(0)

# Restore the default (12 hours):
wassima.set_cache_ttl(wassima.DEFAULT_CACHE_TTL_SECONDS)

Setting a new TTL invalidates any pending cached result immediately.

Project details


Download files

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

Source Distribution

wassima-2.1.1.tar.gz (140.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wassima-2.1.1-py3-none-any.whl (131.4 kB view details)

Uploaded Python 3

File details

Details for the file wassima-2.1.1.tar.gz.

File metadata

  • Download URL: wassima-2.1.1.tar.gz
  • Upload date:
  • Size: 140.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for wassima-2.1.1.tar.gz
Algorithm Hash digest
SHA256 9c6ad4aa3cfbe91fd75f9eae315ba563bbc7d9d2479aef0c288fa7f1ca3b0c53
MD5 f7609447838a899c96eea0ceeec9feb5
BLAKE2b-256 b83468ab01470c1cef170e8370a8a05e598d621d3657bf925b62bc9a18b4509a

See more details on using hashes here.

Provenance

The following attestation bundles were made for wassima-2.1.1.tar.gz:

Publisher: CI.yml on jawah/wassima

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wassima-2.1.1-py3-none-any.whl.

File metadata

  • Download URL: wassima-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 131.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for wassima-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ab0f12c091ff697f111eea5f925aafd83736909a1c9c764a8bbf874b2e4d4a42
MD5 69c5965ec106da954004af553c4a6717
BLAKE2b-256 549e472991fc66d940d3ba3268fc8c2866a44b6870a9711ab74fcf1f29e817e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for wassima-2.1.1-py3-none-any.whl:

Publisher: CI.yml on jawah/wassima

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page