ACMEOW v1.1.6
Release Date: May 22, 2026
Version: v1.1.6
Commits: 726a5ed, 2377f20
Production-grade ACME protocol client library for Python.
What's New
Fix: verify_ssl=False Now Works Through CONNECT Proxies
With requests 2.34+ / urllib3 2.x, setting session.verify=False no longer
propagates an ssl_context to the ProxyManager, so the environment's default
SSLContext (which validates certificates) was silently used for tunnelled HTTPS
connections. This broke interception proxies such as Burp Suite when paired with
a custom CA or when operating against non-public ACME endpoints.
A custom _NoVerifyAdapter is now mounted on the session whenever
verify_ssl=False, injecting an explicit non-verifying SSLContext into both
the PoolManager (direct connections) and the ProxyManager (CONNECT-tunnelled
connections).
client = AcmeClient(
server_url="https://acme.internal/directory",
email="admin@example.com",
storage_path=Path("./acme_data"),
verify_ssl=False, # now reliably skips verification through CONNECT proxies
)The verify_ssl parameter on both AcmeClient and AcmeHttpClient now accepts
a str in addition to bool, allowing a path to a custom CA bundle to be
passed directly:
client = AcmeClient(
server_url="https://acme.internal/directory",
email="admin@example.com",
storage_path=Path("./acme_data"),
verify_ssl="/path/to/burp-ca.pem", # custom CA bundle
)Behaviour details:
verify_ssl=True(default) — unchanged, uses the system CA bundleverify_ssl=False— mounts_NoVerifyAdapter; suppressesInsecureRequestWarningviaurllib3verify_ssl="/path/to/ca.pem"— passed through torequestsas before- No change to default behaviour for callers that do not set
verify_ssl
Fix: Finalization No Longer Stalls on CAs That Keep Orders in pending
Some CAs never transition an order from pending to ready, even after all
authorizations are validated — they accept the CSR directly and respond with the
certificate. The finalize_order() polling loop previously waited for the
ready state exclusively, causing an AcmeOrderError timeout against these
CAs.
The loop now also breaks on pending (in addition to ready) once
authorizations are validated, letting the server accept or reject the CSR
submission. If the CA considers the order not actually ready, it will return an
appropriate ACME error at that point.
Behaviour details:
readyandpendingare both treated as "proceed to CSR submission" statesinvalidstill raisesAcmeOrderErrorimmediately- Fully backwards-compatible — CAs that do transition to
readyare unaffected
Installation
pip install acmeow
pip install acmeow[dns-route53] # AWS Route53
pip install acmeow[all] # All optional dependencies
Requirements
- Python 3.10+
- cryptography >= 41.0.0
- requests >= 2.31.0
- requests[socks] >= 2.31.0
Testing & Quality Metrics
- 433 tests passing
- Tested on Python 3.10, 3.11, 3.12, 3.13
- Cross-platform support (Linux, macOS, Windows)
License
Apache License 2.0