Microsoft AD CS certificate service client for Swarmauri
Project description
swarmauri_certservice_ms_adcs
Community plugin providing a certificate service client for Microsoft Active Directory Certificate Services (AD CS).
Features
- Generate RFC 2986-compliant PKCS#10 CSRs with rich subject, subject alternative name, and extension options.
- Parse and validate X.509 certificates per RFC 5280, including issuer matching and signature verification.
- Ready-to-use authentication helpers for NTLM, Kerberos, and HTTP basic auth while preserving TLS configuration.
- Typed
supports()metadata describing templates, key algorithms, and capabilities advertised to Swarmauri agents.
Prerequisites
- Python 3.10 or newer.
- Network access to an AD CS Web Enrollment endpoint (typically
https://<ca>/certsrv). - A private key for each CSR you plan to submit; software keys can be read from PEM while HSM-backed keys can be referenced via
KeyRefmetadata. - Optional authentication libraries: install
requests-ntlmfor NTLM flows andrequests-kerberosfor Kerberos/SPNEGO delegation.
Installation
Install the core package or include extras for the auth helpers your environment requires:
# pip
pip install "swarmauri_certservice_ms_adcs[ntlm,kerberos]"
# poetry
poetry add swarmauri_certservice_ms_adcs -E ntlm -E kerberos
# uv (pyproject-based projects)
uv add "swarmauri_certservice_ms_adcs[ntlm,kerberos]"
You can drop the extras if your AD CS deployment only needs anonymous access or HTTP basic authentication.
Quickstart: Build a CSR for AD CS
import asyncio
from pathlib import Path
from swarmauri_certservice_ms_adcs import MsAdcsCertService, _AuthCfg
from swarmauri_core.certs.ICertService import SubjectSpec
from swarmauri_core.crypto.types import ExportPolicy, KeyRef, KeyType, KeyUse
async def main() -> None:
service = MsAdcsCertService(
base_url="https://ca.example.com/certsrv",
default_template="WebServer",
auth=_AuthCfg(
mode="ntlm",
username="EXAMPLE\\svc-adcs",
password="s3cr3t!",
verify_tls=True,
),
)
key_bytes = Path("webserver.key.pem").read_bytes()
key_ref = KeyRef(
kid="webserver-key",
version=1,
type=KeyType.RSA,
uses=(KeyUse.SIGN,),
export_policy=ExportPolicy.PUBLIC_ONLY,
material=key_bytes,
)
subject: SubjectSpec = {
"C": "US",
"ST": "Texas",
"L": "Austin",
"O": "Example Corp",
"CN": "app.example.com",
}
csr_pem = await service.create_csr(
key=key_ref,
subject=subject,
san={"dns": ["app.example.com", "www.example.com"]},
)
Path("app.csr").write_bytes(csr_pem)
print("CSR saved to app.csr")
if __name__ == "__main__":
asyncio.run(main())
Submit app.csr through your AD CS Web Enrollment UI, automation, or a downstream Swarmauri agent responsible for certificate issuance.
Validate Issued Certificates
After AD CS returns a certificate, use the same service instance to confirm the chain and inspect metadata:
import asyncio
from pathlib import Path
from swarmauri_certservice_ms_adcs import MsAdcsCertService, _AuthCfg
async def verify_certificate() -> None:
service = MsAdcsCertService(
base_url="https://ca.example.com/certsrv",
auth=_AuthCfg(mode="none"),
)
issued_cert = Path("app.pem").read_bytes()
issuing_ca = Path("issuing-ca.pem").read_bytes()
verification = await service.verify_cert(
cert=issued_cert,
trust_roots=[issuing_ca],
)
if verification["valid"]:
print("Certificate is valid until", verification["not_after"])
else:
print("Validation failed:", verification["reason"])
parsed = await service.parse_cert(issued_cert)
print("Subject:", parsed["subject"])
print("Subject Alternative Names:", parsed.get("san"))
if __name__ == "__main__":
asyncio.run(verify_certificate())
verify_cert performs structural checks and signature validation when an issuer certificate is supplied, while parse_cert surfaces extension data for auditing or observability pipelines.
Authentication Modes
- NTLM – enable by installing
requests-ntlmand providing domain credentials via_AuthCfg(mode="ntlm", username="DOMAIN\\user", password="..." ). - Kerberos/SPNEGO – install
requests-kerberosand set_AuthCfg(mode="kerberos", spnego_delegate=True)when delegation is required. - HTTP Basic – provide
_AuthCfg(mode="basic", username=..., password=...)for AD CS deployments fronted by basic auth proxies. - Anonymous – set
_AuthCfg(mode="none")for environments that rely on IP allow lists or mutual TLS.
Best Practices
- Store AD CS credentials in a secure secrets manager and inject them via environment variables rather than hard-coding passwords.
- Capture issued certificates, verification results, and parsed metadata in your logging system so you can trace enrollment activity.
- Rotate key pairs and certificates regularly; regenerate CSRs ahead of expiry to leave time for manual approvals.
- Combine this plugin with Swarmauri certificate verification agents (CRL/OCSP) to maintain revocation visibility across the lifecycle.
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 swarmauri_certservice_ms_adcs-0.2.3.dev24.tar.gz.
File metadata
- Download URL: swarmauri_certservice_ms_adcs-0.2.3.dev24.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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 |
c192d521e8b6bafd4a03e9a2388f390dbddb43017aba75bbe0ec8048d02d3c0d
|
|
| MD5 |
afcc455af8cdefb8060aef1685d45996
|
|
| BLAKE2b-256 |
ce1dcbe3cb5c601f7cc19e624db67d44560ca98bea13b2e84c8535530ea8b3e4
|
File details
Details for the file swarmauri_certservice_ms_adcs-0.2.3.dev24-py3-none-any.whl.
File metadata
- Download URL: swarmauri_certservice_ms_adcs-0.2.3.dev24-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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 |
460acdbaca588243ca6a86ae22b4896b9edec365aa0dc881827843b828aafc8a
|
|
| MD5 |
d732b9d20783773e075337ffa198db72
|
|
| BLAKE2b-256 |
596172f1c0f5c3a0d9a1f94e941958b430c7f86336bd907781f04d2f44d611aa
|