- Implemented the GostKeyValue class for handling public key parameters in ГОСТ Р 34.10 digital signatures. - Created the GostSignedXml class to manage XML signatures using ГОСТ 34.10, including methods for computing and checking signatures. - Developed the GostSignedXmlImpl class to encapsulate the signature computation logic and public key retrieval. - Added specific key value classes for ГОСТ Р 34.10-2001, ГОСТ Р 34.10-2012/256, and ГОСТ Р 34.10-2012/512 to support different signature algorithms. - Ensured compatibility with existing XML signature standards while integrating ГОСТ cryptography.
4.5 KiB
4.5 KiB
Ubuntu CSAF connector runbook
Updated 2025-11-09 alongside sprint 110/120 trust-provenance work.
Purpose
- Ingest Ubuntu USN/CSAF statements via the restart-only connector (
StellaOps.Excititor.Connectors.Ubuntu.CSAF). - Preserve Aggregation-Only Contract guarantees while surfacing issuance provenance (
vex.provenance.*) for VEX Lens and Policy Engine. - Allow operators to tune trust weighting (tiers, fingerprints, cosign issuers) without recompiling the connector.
Configuration keys
| Key | Default | Notes |
|---|---|---|
Excititor:Connectors:Ubuntu:IndexUri |
https://ubuntu.com/security/csaf/index.json |
Ubuntu CSAF index. Override only when mirroring the feed. |
...:Channels |
["stable"] |
List of channel names to poll. Order preserved for deterministic cursoring. |
...:MetadataCacheDuration |
4h |
How long to cache catalog metadata before re-fetching. |
...:PreferOfflineSnapshot / OfflineSnapshotPath / PersistOfflineSnapshot |
false / null / true |
Enable when running from Offline Kit bundles. Snapshot path must be reachable/read-only under sealed deployments. |
...:TrustWeight |
0.75 |
Baseline trust weight (0–1). Lens multiplies this by freshness/justification modifiers. |
...:TrustTier |
"distro" |
Friendly tier label surfaced via vex.provenance.trust.tier (e.g., distro-trusted, community). |
...:CosignIssuer / CosignIdentityPattern |
null |
Supply when Ubuntu publishes cosign attestations (issuer URL and identity regex). Required together. |
...:PgpFingerprints |
[] |
Ordered list of trusted PGP fingerprints. Emitted verbatim as vex.provenance.pgp.fingerprints. |
Example appsettings.json
{
"Excititor": {
"Connectors": {
"Ubuntu": {
"IndexUri": "https://mirror.example.com/security/csaf/index.json",
"Channels": ["stable", "esm-apps"],
"TrustWeight": 0.82,
"TrustTier": "distro-trusted",
"CosignIssuer": "https://issuer.ubuntu.com",
"CosignIdentityPattern": "spiffe://ubuntu/vex/*",
"PgpFingerprints": [
"0123456789ABCDEF0123456789ABCDEF01234567",
"89ABCDEF0123456789ABCDEF0123456789ABCDEF"
],
"PreferOfflineSnapshot": true,
"OfflineSnapshotPath": "/opt/stella/offline/ubuntu/index.json"
}
}
}
}
Environment variable cheatsheet
Excititor__Connectors__Ubuntu__TrustWeight=0.9
Excititor__Connectors__Ubuntu__TrustTier=distro-critical
Excititor__Connectors__Ubuntu__PgpFingerprints__0=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Excititor__Connectors__Ubuntu__PgpFingerprints__1=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
Excititor__Connectors__Ubuntu__CosignIssuer=https://issuer.ubuntu.com
Excititor__Connectors__Ubuntu__CosignIdentityPattern=spiffe://ubuntu/vex/*
Operational checklist
- Before enabling – import the Ubuntu PGP bundle (Offline Kit provides
certificates/ubuntu-vex.gpg) and set the fingerprints so provenance metadata stays deterministic. - Validate provenance output – run
dotnet test src/Excititor/__Tests/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests --filter FetchAsync_IngestsNewDocumentto ensure the connector emits thevex.provenance.*fields expected by VEX Lens. - Monitor Lens weights – Grafana panels
VEX Lens / Trust Inputsshow the weight/tier captured per provider. Ubuntu rows should reflect the configuredTrustWeightand fingerprints. - Rotate fingerprints – update
PgpFingerprintswhen Canonical rotates signing keys. Apply the change, restart Excititor workers, verify the provenance metadata, then trigger a targeted Lens recompute for Ubuntu issuers. - Offline mode – populate
OfflineSnapshotPathvia Offline Kit bundles before togglingPreferOfflineSnapshot. Keep snapshots in the sealed/opt/stella/offlinehierarchy for auditability.
Troubleshooting
- Connector refuses to start – check logs for
InvalidOperationExceptionreferencingCosignIssuer/CosignIdentityPatternor missing snapshot path; the validator enforces complete pairs and on-disk paths. - Lens still sees default weights – confirm the Excititor deployment picked up the new settings (view
/excititor/healthJSON →connectors.providers[].options). Lens only overrides when the provenance payload includesvex.provenance.trust.*fields. - PGP mismatch alerts – if Lens reports fingerprint mismatches, ensure the list ordering matches Canonical’s published order; duplicates are trimmed, so provide each fingerprint once.