Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
06e8463
PYTHON-5040 Regenerate test TLS certificates with Authority Key Ident…
blink1073 Jun 4, 2026
5d18323
PYTHON-5040 Use test/certificates/ certs for SSL test client
blink1073 Jun 4, 2026
618acb8
PYTHON-5040 Export TLS cert paths from integration_tests/run.sh
blink1073 Jun 4, 2026
c3f98f1
PYTHON-5040 Use test/certificates/ certs for SSL integration test server
blink1073 Jun 4, 2026
d107450
PYTHON-5040 Use test/certificates/ certs for Evergreen SSL test client
blink1073 Jun 4, 2026
d16eb87
PYTHON-5040 Fix KMS mock server TLS for Python 3.13
blink1073 Jun 4, 2026
ca0b746
PYTHON-5040 Fix x509 auth username and CRL revocation in test certs
blink1073 Jun 4, 2026
afd411c
PYTHON-5040 Fix CSFLE TLS certs and configure-env for Python 3.13
blink1073 Jun 5, 2026
7ebc4c0
PYTHON-5040 Fix CA keyUsage and remove issuer from leaf cert AKI
blink1073 Jun 5, 2026
d113796
PYTHON-5040 Remove cRLSign from CA keyUsage to fix macOS CERT_SUSPENDED
blink1073 Jun 5, 2026
9e070b4
PYTHON-5040 Use cryptography library to generate certs with AKI but n…
blink1073 Jun 8, 2026
35d9660
PYTHON-5040 Add OCSPNoCheck to leaf certs and fix CA basicConstraints…
blink1073 Jun 8, 2026
aa6ecaa
PYTHON-5040 Switch AKI to issuer form and add CA keyUsage
blink1073 Jun 8, 2026
8aed47c
PYTHON-5040 Use self-generated Drivers Testing CA and separate KMS se…
blink1073 Jun 9, 2026
a163db5
PYTHON-5040 Disable TLS revocation check on macOS for SSL tests
blink1073 Jun 9, 2026
b4418cf
PYTHON-5040 Use keyid-form AKI for Python 3.14 compatibility
blink1073 Jun 9, 2026
628d1ce
PYTHON-5040 Fix CSFLE_TLS_CERT_FILE to use server-kms.pem
blink1073 Jun 9, 2026
f043fbd
PYTHON-5040 Make CA basicConstraints critical, regenerate certs
blink1073 Jun 9, 2026
62bc84f
PYTHON-5040 Add keyUsage to CA cert, regenerate certs
blink1073 Jun 10, 2026
0e8e7de
PYTHON-5040 Add SKI to KMS leaf certs, remove from CA
blink1073 Jun 10, 2026
3d56e35
PYTHON-5040 Use PROTOCOL_TLS_CLIENT in http_post for Python 3.14
blink1073 Jun 10, 2026
061b94d
PYTHON-5040 Update README and add run_server.py comment
blink1073 Jun 10, 2026
7bd8417
PYTHON-5040 Fix mypy typing errors in synchro.py and gen-certs.py
blink1073 Jun 10, 2026
977db57
PYTHON-5040 Clarify comments about macOS SecTrust and cert env vars
blink1073 Jun 11, 2026
c8a4a94
PYTHON-5040 Only use PROTOCOL_TLS_CLIENT in http_post on macOS
blink1073 Jun 11, 2026
9f61537
PYTHON-5040 Use uv run with PEP 723 inline metadata in gen-certs.py
blink1073 Jun 11, 2026
75e49b3
PYTHON-5040 Fix Windows KMS cert failures: issuer-form AKI, win32 guard
blink1073 Jun 11, 2026
75bf0e4
PYTHON-5040 Define AKI/SKI on first use, pin cryptography>=44.0.0
blink1073 Jun 11, 2026
febdef9
PYTHON-5040 Remove keyUsage from CA cert to fix Windows signature fai…
blink1073 Jun 11, 2026
b0219c1
PYTHON-5040 Switch to upstream drivers-evergreen-tools now that PR #7…
blink1073 Jun 11, 2026
afc448e
PYTHON-5040 Use create_default_context and clear X509_STRICT flag on …
blink1073 Jun 12, 2026
85c1802
PYTHON-5040 Update certificates README for keyUsage removal and VERIF…
blink1073 Jun 12, 2026
3d4fdb4
PYTHON-5040 Remove --tls-allow-invalid-certificates; update README wi…
blink1073 Jun 12, 2026
8442cec
PYTHON-5040 Rename KMS certs with kms- prefix for clarity
blink1073 Jun 12, 2026
3603e52
PYTHON-5040 Clarify that X509_V_FLAG_X509_STRICT is an OpenSSL flag s…
blink1073 Jun 13, 2026
f3f4d8b
PYTHON-5040 Add CA SKI, keyid-form AKI for KMS certs, restore macOS t…
blink1073 Jun 15, 2026
f95c1d4
PYTHON-5040 Add keyUsage to CA cert for Python 3.14 strict mode
blink1073 Jun 15, 2026
4abec61
PYTHON-5040 Trim gen-certs.py comments; refer to README for background
blink1073 Jun 15, 2026
4d24b1e
PYTHON-5040 Trim gen-certs.py and README for conciseness
blink1073 Jul 1, 2026
ebb90a4
PYTHON-5040 Define AKI and SKI in README Certificate details section
blink1073 Jul 2, 2026
1cef786
PYTHON-5040 Expand SANs acronym in CONTRIBUTING.md
blink1073 Jul 2, 2026
60e0ccd
PYTHON-5040 Clarify 'The generated MongoDB certs' in README Background
blink1073 Jul 2, 2026
e80fe4e
PYTHON-5040 Trim run_server.py macOS comment; refer to README
blink1073 Jul 2, 2026
f9c4639
PYTHON-5040 Extract CA_KEY_USAGE constant; simplify ca_errors tracking
blink1073 Jul 2, 2026
9dbf604
PYTHON-5040 Refactor gen-certs.py into functions with a main() entry …
blink1073 Jul 2, 2026
7e7542d
PYTHON-5040 gen_ca returns only ca_key; cert is unused by caller
blink1073 Jul 2, 2026
656864f
PYTHON-5040 Merge upstream/master
blink1073 Jul 2, 2026
dd24728
PYTHON-5040 Fix ruff-format: add blank line after module docstring
blink1073 Jul 2, 2026
3783d28
PYTHON-5040 Restore CERT_NONE for KMS failpoint server connection
blink1073 Jul 2, 2026
d18de55
PYTHON-5040 Explain why CERT_NONE is needed for failpoint server; dro…
blink1073 Jul 2, 2026
9b9afb0
PYTHON-5040 Point KMS failpoint server at our regenerated test certs
blink1073 Jul 8, 2026
a0dc629
Merge remote-tracking branch 'upstream/master' into PYTHON-5040
blink1073 Jul 8, 2026
f4eb63f
Add openssl cli to listed dependencies
blink1073 Jul 9, 2026
a44fe53
PYTHON-5040 Revert drivers-evergreen-tools checkout to mongodb-labs/m…
blink1073 Jul 9, 2026
bdb3d19
Merge remote-tracking branch 'origin/PYTHON-5040' into PYTHON-5040
blink1073 Jul 9, 2026
07d4bb8
Merge remote-tracking branch 'upstream/main' into PYTHON-5040
blink1073 Jul 28, 2026
789b8aa
PYTHON-5040 Fix repo_root typo in CONTRIBUTING.md
blink1073 Jul 28, 2026
0f5338c
Merge branch 'main' into PYTHON-5040
blink1073 Jul 28, 2026
aeee11c
PYTHON-5040 Remove "via" from PR comments/docs
blink1073 Jul 28, 2026
fbb4cfe
PYTHON-5040 Verify trusted-ca.pem extensions; clarify strict-mode wor…
blink1073 Jul 28, 2026
ae4ce86
Merge remote-tracking branch 'upstream/main' into PYTHON-5040
blink1073 Aug 21, 2026
37e08c8
PYTHON-5040 Clean up prose in cert-generation script and docs
blink1073 Aug 21, 2026
7cadfbc
Merge remote-tracking branch 'upstream/main' into PYTHON-5040
blink1073 Sep 9, 2026
1cc86c7
PYTHON-5040 Use PKCS8 for password-protected cert key
blink1073 Sep 9, 2026
e8e4f22
PYTHON-5040 Reorder prose in certificates README
blink1073 Sep 9, 2026
0f38506
PYTHON-5040 Tighten verify() cert checks
blink1073 Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .evergreen/scripts/run_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ def start_server():
set_env("TLS_CERT_KEY_FILE", certs / "client.pem")
set_env("TLS_PEM_KEY_FILE", certs / "server.pem")
set_env("TLS_CA_FILE", certs / "ca.pem")
if sys.platform == "darwin":
# macOS SecTrust requires a positive OCSP response but our test
# CA has no OCSP responder. See test/certificates/README.md.
extra_opts.append("--tls-allow-invalid-certificates")

if opts.auth:
extra_opts.append("--auth")
Expand Down
24 changes: 20 additions & 4 deletions .evergreen/scripts/setup_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,10 +373,8 @@ def handle_test_env() -> None:
run_command(cmd, cwd=DRIVERS_TOOLS)

if SSL != "nossl":
if not DRIVERS_TOOLS:
raise RuntimeError("Missing DRIVERS_TOOLS")
write_env("CLIENT_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/client.pem")
write_env("CA_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/ca.pem")
write_env("CLIENT_PEM", ROOT / "test/certificates/client.pem")
write_env("CA_PEM", ROOT / "test/certificates/ca.pem")

compressors = os.environ.get("COMPRESSORS") or opts.compressor
if compressors == "snappy":
Expand Down Expand Up @@ -429,6 +427,24 @@ def handle_test_env() -> None:
if not DRIVERS_TOOLS:
raise RuntimeError("Missing DRIVERS_TOOLS")
csfle_dir = Path(f"{DRIVERS_TOOLS}/.evergreen/csfle")

# Set CSFLE TLS cert paths to our AKI-enabled test/certificates/ before
# setup-secrets.sh runs. setup-secrets.sh uses ${VAR:-default} so
# pre-setting these vars causes them to flow into secrets-export.sh
# through csfle/setup_secrets.py (which reads os.environ for these keys).
# load_config_from_file then persists all vars from that file for the
# test runner, so no separate write_env calls are needed.
certs = ROOT / "test/certificates"
os.environ["CSFLE_TLS_CA_FILE"] = str(certs / "ca.pem")
os.environ["CSFLE_TLS_CERT_FILE"] = str(certs / "kms-server.pem")
os.environ["CSFLE_TLS_CLIENT_CERT_FILE"] = str(certs / "client.pem")
os.environ["CSFLE_TLS_WRONG_HOST_FILE"] = str(certs / "kms-wrong-host.pem")
os.environ["CSFLE_TLS_EXPIRED_FILE"] = str(certs / "kms-expired.pem")
# The KMS failpoint server (port 9003) must also present a cert signed
# by our test CA so the driver's own TLS verification succeeds.
os.environ["CSFLE_TLS_FAILPOINT_CERT_FILE"] = str(certs / "kms-server.pem")
os.environ["CSFLE_TLS_FAILPOINT_CA_FILE"] = str(certs / "ca.pem")

# Opt in to corporate Azure credentials (DRIVERS-3392)
os.environ["FLE_AZURE_USE_CORPORATE"] = "YES"
run_command(f"bash {csfle_dir.as_posix()}/setup-secrets.sh", cwd=csfle_dir)
Expand Down
8 changes: 7 additions & 1 deletion .github/workflows/test-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -193,12 +193,18 @@ jobs:
- id: setup-mongodb
uses: mongodb-labs/drivers-evergreen-tools@master
- name: Run tests
run: |
run: |
just integration-tests
- id: setup-mongodb-ssl
uses: mongodb-labs/drivers-evergreen-tools@master
with:
ssl: true
env:
# drivers-evergreen-tools invokes run-mongodb.sh directly (not
# through run_server.py), so cert paths must be provided explicitly here.
TLS_PEM_KEY_FILE: ${{ github.workspace }}/test/certificates/server.pem
TLS_CA_FILE: ${{ github.workspace }}/test/certificates/ca.pem
TLS_CERT_KEY_FILE: ${{ github.workspace }}/test/certificates/client.pem
- name: Run tests
run: |
just integration-tests
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ repos:
# - test/test_bson.py:267: isnt ==> isn't
# - test/versioned-api/crud-api-version-1-strict.json:514: nin ==> inn, min, bin, nine
# - test/test_client.py:188: te ==> the, be, we, to
args: ["-L", "fle,fo,infinit,isnt,nin,te,aks"]
args: ["-L", "fle,fo,infinit,isnt,nin,te,aks", "--skip", "test/certificates/*.pem"]
exclude: ^pymongo/public_suffix_list\.dat$

- repo: local
Expand Down
12 changes: 11 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,17 @@ client = MongoClient(
```

If you want to use the actual certificate file then set `tlsCertificateKeyFile` to the local path
to `<repo_roo>/test/certificates/client.pem` and `tlsCAFile` to the local path to `<repo_roo>/test/certificates/ca.pem`.
to `<repo_root>/test/certificates/client.pem` and `tlsCAFile` to the local path to `<repo_root>/test/certificates/ca.pem`.

#### Regenerating test certificates

If the test certificates in `test/certificates/` need to be regenerated (e.g. after expiry or to add missing extensions), run:

```bash
cd test/certificates && uv run gen-certs.py
```

See `test/certificates/README.md` for full details and constraints on certificate subjects/Subject Alternative Names that must be preserved.

### Encryption tests

Expand Down
2 changes: 0 additions & 2 deletions test/asynchronous/test_encryption.py
Original file line number Diff line number Diff line change
Expand Up @@ -3102,8 +3102,6 @@ async def http_post(self, path, data=None):
# each request because the server is single threaded.
ctx = ssl.create_default_context(cafile=CA_PEM)
ctx.load_cert_chain(CLIENT_PEM)
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
conn = http.client.HTTPSConnection("127.0.0.1:9003", context=ctx)
try:
if data is not None:
Expand Down
83 changes: 83 additions & 0 deletions test/certificates/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Test TLS Certificates

These certificates are used by the PyMongo test suite for TLS/SSL integration tests.

## Regenerating certificates

Run the generation script from this directory:

```bash
uv run gen-certs.py
```

**Prerequisites:** Python 3, [uv](https://docs.astral.sh/uv/), and the OpenSSL CLI (`openssl`) available on PATH (used by the script’s verification step). The script declares its own dependency on `cryptography` using PEP 723 inline metadata, so `uv` installs it automatically.

## Certificate details

Two classes of leaf certificate are generated, with different extension profiles to satisfy
conflicting requirements from Python's ssl module and macOS's SecTrust framework.
AKI (Authority Key Identifier) and SKI (Subject Key Identifier) are X.509 extensions that
identify the key used to sign a certificate and the certificate's own key, respectively.

**MongoDB certs**: presented to MongoDB Enterprise, verified by Apple SecTrust on macOS.
No AKI or SKI. Adding AKI triggers SecTrust OCSP checks; our CA has no OCSP responder, so those
fail with `CSSMERR_TP_CERT_SUSPENDED`. See Background below.

**KMS certs**: presented by KMS mock servers and verified by Python's ssl module (OpenSSL).
Carry both AKI (keyid form) and SKI. These extensions are required by the strict mode that
`ssl.create_default_context()` enables on Python 3.13+; see Background below for the full
version history.

| File | Subject | Signed by | Extensions | Purpose |
|---|---|---|---|---|
| `ca.pem` | `CN=Drivers Testing CA, ...` | Self (CA) | basicConstraints critical, keyUsage critical, SKI | Root CA for all test certs |
| `server.pem` | `CN=localhost, ...` + SAN | Drivers Testing CA | SAN only | MongoDB server cert (key + cert) |
| `client.pem` | `CN=client, O=MDB, ...` | Drivers Testing CA | keyUsage, extKeyUsage | Client auth cert (key + cert) |
| `password_protected.pem` | Same as client | Drivers Testing CA | keyUsage, extKeyUsage | Client cert with AES-256 encrypted key |
| `crl.pem` | N/A | Drivers Testing CA | N/A | CRL revoking serial 1 (server.pem) |
| `kms-server.pem` | `CN=localhost, ...` + SAN | Drivers Testing CA | SAN, AKI, SKI | KMS mock server cert (key + cert) |
| `kms-wrong-host.pem` | `CN=wronghost.example.com` | Drivers Testing CA | SAN, AKI, SKI | KMS wrong-host test cert |
| `kms-expired.pem` | `CN=localhost, ...` + SAN | Drivers Testing CA | SAN, AKI, SKI | KMS expired cert (validity 2000–2001) |
| `trusted-ca.pem` | `CN=Trusted Kernel Test CA, ...` | Self (CA) | basicConstraints critical, keyUsage critical | Separate CA for CA-bundle tests |

**Password** for `password_protected.pem`: `qwerty`

## Important constraints

The following values are hardcoded in tests and **must not change**:

- Client cert subject: `C=US,ST=New York,L=New York City,O=MDB,OU=Drivers,CN=client`
(used as the MongoDB X.509 username in `test/test_ssl.py`)
- Server cert SAN: `DNS:localhost, IP:127.0.0.1, IP:::1`
- The `server` hostname alias for `127.0.0.1` must be present in `/etc/hosts` for SSL tests to pass
(added automatically by `.evergreen/scripts/setup-system.sh`)

## Background

Certificates were regenerated for PYTHON-5040 to fix `ssl.SSLCertVerificationError` failures on
macOS and Windows with Python 3.13+. The root causes were:

1. Python 3.13 enables `X509_V_FLAG_X509_STRICT` in `ssl.create_default_context()`, which
requires **AKI** on non-root certs. The KMS mock-server connection (`http_post`) used
`create_default_context()`, so the original 2019 KMS certs (no AKI) started failing.
2. Python 3.14 sets `ssl.VERIFY_X509_STRICT` (OpenSSL's `X509_V_FLAG_X509_STRICT`) in
`ssl.create_default_context()`, which additionally requires **SKI** on non-root certs and
**keyUsage** on CA certs.

The generated MongoDB certs carry no AKI: AKI on any leaf cert triggers Apple SecTrust OCSP checks, which fail
(`CSSMERR_TP_CERT_SUSPENDED`) because our CA has no OCSP responder. MongoDB Enterprise on macOS
uses `kSecRevocationRequirePositiveResponse`, so even without AKI the server startup fails; that is
why `.evergreen/scripts/run_server.py` passes `--tls-allow-invalid-certificates` on macOS. The CA
carries SKI (but no AKI), which enables keyid-form AKI on KMS leaf certs without re-triggering
macOS OCSP. As long as `pymongo.ssl_support.get_ssl_context` uses `PROTOCOL_SSLv23` (not
`create_default_context`), `X509_V_FLAG_X509_STRICT` is not set and no AKI is required on MongoDB
leaf certs.

KMS connections use `ssl.create_default_context()`, which sets `X509_V_FLAG_X509_STRICT`.
OpenSSL 3.3+ strict mode requires the `keyIdentifier` field within AKI; issuer/serial form is not
sufficient, so KMS leaf certs use keyid-form AKI derived from the CA's SKI.

> **If the driver is changed to use `ssl.create_default_context()` for MongoDB connections**, the
> MongoDB certs will need AKI and SKI. Adding AKI will re-trigger macOS SecTrust OCSP failures;
> to resolve that, either add `--tls-allow-invalid-certificates` to the server startup in
> `run_server.py`, or install the test CA into the macOS system keychain in the CI setup.
39 changes: 20 additions & 19 deletions test/certificates/ca.pem
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
88 changes: 44 additions & 44 deletions test/certificates/client.pem
Original file line number Diff line number Diff line change
@@ -1,48 +1,48 @@
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDgzCCAmugAwIBAgIDAxOUMA0GCSqGSIb3DQEBCwUAMHkxGzAZBgNVBAMTEkRy
aXZlcnMgVGVzdGluZyBDQTEQMA4GA1UECxMHRHJpdmVyczEQMA4GA1UEChMHTW9u
Z29EQjEWMBQGA1UEBxMNTmV3IFlvcmsgQ2l0eTERMA8GA1UECBMITmV3IFlvcmsx
CzAJBgNVBAYTAlVTMB4XDTE5MDUyMjIzNTU1NFoXDTM5MDUyMjIzNTU1NFowaTEP
MA0GA1UEAxMGY2xpZW50MRAwDgYDVQQLEwdEcml2ZXJzMQwwCgYDVQQKEwNNREIx
FjAUBgNVBAcTDU5ldyBZb3JrIENpdHkxETAPBgNVBAgTCE5ldyBZb3JrMQswCQYD
VQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALDUvFBLop+/
ytvY13yDi6SKIdYxMllasYontjp8e7iSSnKCqJIQN13lJ1TdJOl+TMGFnDedsXJ7
Oy2LcrdOp0aUxtv3pqFeOMPbik7h7L1G4jsElZv06CkEOBVBWaKqK1x/mZibiKST
X6FvtwpBNbxAwiHnCKugTYOckrD7b0rkiRxo6ZnO/+WVA7xRNmifEGyVN1rNB14h
G+spotOPC5cxC9lSl98Opqqofu3XGRgMu6mJNuRWfZLSrwnkGru5k8lNYbD6yhYi
rTDfENmQCLV9d2rMOfyHkk6ti4CxR5W4+SqauBpi3TQrIcx+V+xMNyGDPBB5rF/H
Zg+pob+76VcCAwEAAaMkMCIwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
BwMCMA0GCSqGSIb3DQEBCwUAA4IBAQAqRcLAGvYMaGYOV4HJTzNotT2qE0I9THNQ
wOV1fBg69x6SrUQTQLjJEptpOA288Wue6Jt3H+p5qAGV5GbXjzN/yjCoItggSKxG
Xg7279nz6/C5faoIKRjpS9R+MsJGlttP9nUzdSxrHvvqm62OuSVFjjETxD39DupE
YPFQoHOxdFTtBQlc/zIKxVdd20rs1xJeeU2/L7jtRBSPuR/Sk8zot7G2/dQHX49y
kHrq8qz12kj1T6XDXf8KZawFywXaz0/Ur+fUYKmkVk1T0JZaNtF4sKqDeNE4zcns
p3xLVDSl1Q5Gwj7bgph9o4Hxs9izPwiqjmNaSjPimGYZ399zcurY
MIIDgTCCAmmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADB5MRswGQYDVQQDDBJEcml2
ZXJzIFRlc3RpbmcgQ0ExEDAOBgNVBAsMB0RyaXZlcnMxEDAOBgNVBAoMB01vbmdv
REIxFjAUBgNVBAcMDU5ldyBZb3JrIENpdHkxETAPBgNVBAgMCE5ldyBZb3JrMQsw
CQYDVQQGEwJVUzAeFw0yNjA5MDgxMzQzMzlaFw00NjA5MDQxMzQzMzlaMGkxDzAN
BgNVBAMMBmNsaWVudDEQMA4GA1UECwwHRHJpdmVyczEMMAoGA1UECgwDTURCMRYw
FAYDVQQHDA1OZXcgWW9yayBDaXR5MREwDwYDVQQIDAhOZXcgWW9yazELMAkGA1UE
BhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDgYJwM5oNfwL3K
yV3Cu1Cf6vGsVLLOULOqHXk4EVM3yApwLY98dpmx6nU2Xjth/Avy9DCH2u9jJZ/T
O7R2RfcLMl1FbyLmO3UU4bbSfptAiOo4drpaswFTzC9radylFpsZZnOLJKoOypFn
LCBnOsptMgu5KJ/OMUusY6ZkiFPoyOB9zB+VIuQs4ejykllc0CY5XbDrf/Xrmmg/
UTClSRKrJZmdktNcAsGEAYPfaUVV/MTfij463PKJelMHQyCCp+DkkuCqN584OS0w
MpVnfTeh40GY46m5zIsnCs8DwzouesdJkh9k14/LdJ1NiGW+zRJqNtev3hqxPvJQ
9TkpWFWtAgMBAAGjJDAiMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
AjANBgkqhkiG9w0BAQsFAAOCAQEAedO3g7tzgmhg/hnJMxH88OTd757o2zZSJnLH
0tzfLqz961gKt2KnBKYXg1i5CMnew1hCxkwUIXYWhzwACgJwv8x79uRlrvq3j0DE
OqXeMdFBIHQhkEV2vipaNGq3VTMurvL0EHghi9M1/YGcmdMuHNPIq/882n1B6yet
wGviRON2OMkKa65J4t31HGq5FeGOAWuyOuRGqgg8uexN55AzYjvd7VYWblrjsxm1
W3HDQWaZYyv1cwbpfWYrJpnUBHcYYApvJBJpJPnM8EDpNA0HtTd/cBQiFvp0P4ss
SyyhFXDMJT9OpgTotIKPHdhZvOuy2pzRrQj2xSTUPWrRnKMJPQ==
-----END CERTIFICATE-----
21 changes: 10 additions & 11 deletions test/certificates/crl.pem
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
-----BEGIN X509 CRL-----
MIIB6jCB0wIBATANBgkqhkiG9w0BAQsFADB5MRswGQYDVQQDExJEcml2ZXJzIFRl
c3RpbmcgQ0ExEDAOBgNVBAsTB0RyaXZlcnMxEDAOBgNVBAoTB01vbmdvREIxFjAU
BgNVBAcTDU5ldyBZb3JrIENpdHkxETAPBgNVBAgTCE5ldyBZb3JrMQswCQYDVQQG
EwJVUxcNMTkwNTIyMjI0NTUzWhcNMTkwNjIxMjI0NTUzWjAVMBMCAncVFw0xOTA1
MjIyMjQ1MzJaoA8wDTALBgNVHRQEBAICEAAwDQYJKoZIhvcNAQELBQADggEBACwQ
W9OF6ExJSzzYbpCRroznkfdLG7ghNSxIpBQUGtcnYbkP4em6TdtAj5K3yBjcKn4a
hnUoa5EJGr2Xgg0QascV/1GuWEJC9rsYYB9boVi95l1CrkS0pseaunM086iItZ4a
hRVza8qEMBc3rdsracA7hElYMKdFTRLpIGciJehXzv40yT5XFBHGy/HIT0CD50O7
BDOHzA+rCFCvxX8UY9myDfb1r1zUW7Gzjn241VT7bcIJmhFE9oV0popzDyqr6GvP
qB2t5VmFpbnSwkuc4ie8Jizip1P8Hg73lut3oVAHACFGPpfaNIAp4GcSH61zJmff
9UBe3CJ1INwqyiuqGeA=
MIIB2DCBwQIBATANBgkqhkiG9w0BAQsFADB5MRswGQYDVQQDDBJEcml2ZXJzIFRl
c3RpbmcgQ0ExEDAOBgNVBAsMB0RyaXZlcnMxEDAOBgNVBAoMB01vbmdvREIxFjAU
BgNVBAcMDU5ldyBZb3JrIENpdHkxETAPBgNVBAgMCE5ldyBZb3JrMQswCQYDVQQG
EwJVUxcNMjYwOTA5MTM0MzM5WhcNNDYwOTA0MTM0MzM5WjAUMBICAQEXDTI2MDkw
OTEzNDMzOVowDQYJKoZIhvcNAQELBQADggEBAB59jdr1fKfc8oUUrCe+JfcDyEEO
Xf8gKSj4y+0O+QiybzWRJsyk6etTIxCPVQR1YlTJ38mBhFNFloaz1vdpBW2u2qpY
Jm2G1qeeUsDPHHK6e5oJydzgulhQgEkkXxPzUv/cMv2b2XVZ3kpLjBZaXynKwdlu
DtFq3f5LYcYluQCeUrsaIhdgTx+W12vDEQCyaRya5Z5WDwOjUhQYxpi4jb+a8+Y5
s1eGP1SrdXqwHBGGJ/ONGksZwHSZXTv+JU7EX8lb6C1hZ5WY+vRYykKJ1sG7hOWw
q4CJ7kNFGkSa5bfI5+41gIc8/dxtVq2q4EmoUbLm/VVNyl/eWIg/oX23qYQ=
-----END X509 CRL-----
Loading
Loading