Skip to content

Add support for EV, OV Wildcard, and DV Wildcard multi-name certificate products - #18

Open
bhillkeyfactor wants to merge 11 commits into
release-1.2from
feature/ev-ov-dv-multiname-certs
Open

bhillkeyfactor wants to merge 11 commits into
release-1.2from
feature/ev-ov-dv-multiname-certs

Conversation

@bhillkeyfactor

Copy link
Copy Markdown
Contributor

Summary

  • Adds three new CSC TrustedSecure certificate products: EV Multiple Names (type 7), OV Wildcard Multiple Names (type 8), and DV Wildcard Multiple Names (type 9), per CSC certificate type table.
  • Type 7 sends both evCertificateDetails and subjectAlternativeNames since it is EV plus multi-name; types 8 and 9 send subjectAlternativeNames only.
  • Updated integration-manifest.json, docsource/configuration.md, and CHANGELOG.md.

Test plan

  • dotnet build succeeds with no new errors
  • Verify enrollment against each new product/template in a test AnyGateway REST instance

bhillkeyfactor and others added 11 commits September 9, 2026 14:23
…te products

CSC TrustedSecure EV, Multiple Names (7), CSC TrustedSecure OV Wildcard,
Multiple Names (8), and CSC TrustedSecure DV Wildcard, Multiple Names (9)
per CSC's certificate type table. Type 7 requires both EvCertificateDetails
and SubjectAlternativeNames since it is EV plus multi-name; 8 and 9 only
need SubjectAlternativeNames.
Introduce a step-oriented FlowLogger for tracing Enroll, Revoke, and
Synchronize pipelines end to end, and add logging throughout
RequestManager (previously had none) and CscGlobalClient (missing
error/warning branches, wrong logger category on CscGlobalClient).
…s unset

Only look up the optional additional-SAN-emails field when the domain
control validation method is EMAIL, and use TryGetValue instead of the
indexer so a missing/blank value no longer throws.
…no 'dnsname' key

UC certificate enrollments with zero SANs supplied threw KeyNotFoundException
from the sans["dnsname"] indexer. Use TryGetValue and treat a missing key as
no SANs instead of throwing.
Registration/Renewal/Reissue/Revoke calls only handled CSC Global's
400 error-body case; any other failure status (e.g. 404) fell through
to deserializing an empty/unexpected body, leaving Result and
RegistrationError both null and causing a downstream
NullReferenceException in RequestManager instead of a clear error.
Add null and bounds guards throughout the enrollment, revoke, and sync
paths: CSC Global responses (Result/RegistrationError/Status may be
null even on a 200), optional ProductParameters lookups that were
using the strict indexer, CARequestID substring truncation, and
config/dictionary lookups in Initialize and the CscGlobalClient
constructor. Replaces silent NREs with clear, logged failures.
Previously the CSC Global list request filtered to status=in=(ACTIVE,REVOKED)
and SyncCertificates only forwarded GENERATED/REVOKED records, so any
pending or failed request was never reported back to Command on any
sync cycle. Command eventually treats a request it hasn't seen in
recent syncs as outdated and tries to prune it, which can trigger an
internal Command cleanup bug for requests with no staged private key.
Now every request CSC Global returns is forwarded to Command each
sync, with certificate content attached only when actually issued or
revoked.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant