TLS Support using SPIFFE
Project description
spiffe-tls package (experimental)
Overview
The spiffe-tls package, part of the py-spiffe library, streamlines the
establishment of secure TLS connections using SPIFFE certificates. Powered
by pyOpenSSL, it provides straightforward utilities for configuring TLS clients
and servers. Currently experimental, spiffe-tls facilitates the seamless integration of SPIFFE for the automatic
management of X.509 certificates and CA trust bundles via X509Source from
the spiffe package.
Key Features
- TLS connections with SPIFFE ID validation.
- Mutual TLS (MTLS) support for authenticated client-server communication.
- Customizable server and client TLS configurations.
- Standard library-compatible SSL context with automatic certificate refresh.
Quick Start
Server Setup
# Create a TLS server with SPIFFE-based MTLS
from spiffetls import listen, ListenOptions
from spiffe import SpiffeId, X509Source
from spiffetls.mode import ServerTlsMode
from spiffetls.tlsconfig.authorize import authorize_id
x509_source = X509Source()
options = ListenOptions(
tls_mode=ServerTlsMode.MTLS,
authorize_fn=authorize_id(SpiffeId("spiffe://example.org/client-service")),
)
listener = listen("localhost:8443", x509_source, options)
Client Connection
# Establish a secure connection to a TLS server
from spiffetls import dial
from spiffe import SpiffeId, X509Source
from spiffetls.tlsconfig.authorize import authorize_id
x509_source = X509Source()
conn = dial(
"localhost:8443",
x509_source,
authorize_fn=authorize_id(SpiffeId("spiffe://example.org/server")),
)
Using with Standard HTTP Libraries
For integration with standard Python HTTP libraries (like requests, httpx, urllib3), use SpiffeSSLContext:
# Use SPIFFE authentication with httpx
from spiffetls import SpiffeSSLContext
from spiffe import X509Source
import httpx
x509_source = X509Source()
# Create an SSL context that automatically refreshes certificates
ssl_context = SpiffeSSLContext(x509_source, use_system_trusted_cas=True)
# Use with httpx
client = httpx.Client(verify=ssl_context)
response = client.get("https://api.example.org/data")
The SpiffeSSLContext provides a standard library-compatible interface that automatically refreshes X.509 SVIDs as they rotate, without requiring manual updates to the SSL context. This is particularly useful for long-running applications.
Authorization Functions
The package supports custom authorization functions for additional certificate validation:
authorize_any(): Accepts any SPIFFE ID.authorize_id(): Validates a specific SPIFFE ID.authorize_one_of(): Allows any ID from a set of allowed SPIFFE IDs.authorize_member_of(): Permits any ID from a specific trust domain.
Contributing
We welcome contributions to the spiffe-tls package! Please see
our contribution guidelines for more
details. For feedback and issues, please submit them through
the GitHub issue tracker.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spiffe_tls-0.3.1.tar.gz.
File metadata
- Download URL: spiffe_tls-0.3.1.tar.gz
- Upload date:
- Size: 21.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
acf1999f420259999def5e9d8108090c46ddfdbf307deadd7da309156685690b
|
|
| MD5 |
4e07fe4a761a0318ca045a9e7aa51eca
|
|
| BLAKE2b-256 |
24f49f5bd28c14404d791f9465a47cafdc8de6f499209c80d005a93a95e4c7e4
|
File details
Details for the file spiffe_tls-0.3.1-py3-none-any.whl.
File metadata
- Download URL: spiffe_tls-0.3.1-py3-none-any.whl
- Upload date:
- Size: 26.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7ea723548ff456d799c96c5a38d050b2f927a7afc00b114db30bdafd86de13c
|
|
| MD5 |
97741c5b11e66b44514a781f08f2f621
|
|
| BLAKE2b-256 |
e25aac1117b67f0c6268a6d2be943b051e9b24cd23d320ceafd525573da111e7
|