Skip to content
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
52eee75
fix for smime profile type
dgaley Oct 8, 2025
70fe240
template parameter to include client auth eku
dgaley Oct 8, 2025
f9e1564
Update generated docs
Oct 8, 2025
516d230
Merge pull request #31 from Keyfactor/hotfix
dgaley Oct 8, 2025
844a7e1
changelog and logging
dgaley Oct 13, 2025
b0819c4
Merge branch 'hotfix' of https://github.com/Keyfactor/digicert-certce…
dgaley Oct 13, 2025
db730d5
Merge pull request #34 from Keyfactor/hotfix
dgaley Oct 13, 2025
aceca2d
Merge pull request #32 from Keyfactor/dev-2.1
spbsoluble Oct 20, 2025
a4dfbe2
check for duplicate PEMs
dgaley Nov 6, 2025
d0e5a80
Merge pull request #36 from Keyfactor/hotfix
dgaley Nov 6, 2025
cd8fd90
change default start sync date for first incremental sync
dgaley Nov 18, 2025
19fae71
Merge pull request #38 from Keyfactor/hotfix
dgaley Nov 18, 2025
fe7e05d
removing caching of product type list
dgaley Nov 18, 2025
8850680
Merge pull request #39 from Keyfactor/prodtypecache
dgaley Nov 18, 2025
d195faf
change default incremental sync range
dgaley Nov 19, 2025
1b14604
version
dgaley Nov 19, 2025
a64934c
changelog
dgaley Nov 19, 2025
03a5fa5
Merge pull request #40 from Keyfactor/hotfix
dgaley Nov 19, 2025
208fece
shorten incremental sync if it is too long
dgaley Dec 2, 2025
509ad46
Merge pull request #41 from Keyfactor/hotfix
dgaley Dec 2, 2025
c3a719f
Merge pull request #37 from Keyfactor/dev-2.1
spbsoluble Dec 17, 2025
880f85a
add duplicate support
dgaley Feb 12, 2026
1d8ade4
Update generated docs
Feb 12, 2026
c01f0ce
Merge pull request #42 from Keyfactor/duplicates
dgaley Feb 12, 2026
d534241
feat: release v2.2.0
dgaley Feb 17, 2026
1276cd5
treat needs_approval the same as pending on enrollments and don't ret…
dgaley Jun 1, 2026
01665b5
Update generated docs
Jun 1, 2026
56f8d13
Merge pull request #46 from Keyfactor/needsapproval
dgaley Jun 1, 2026
a22a63e
Dev 2.2 (#47)
dgaley Jun 2, 2026
0ca0beb
add option for kdc/smartcardlogon eku, fix template validation
dgaley Jun 11, 2026
d80c399
Update generated docs
Jun 11, 2026
26c0c52
merge from main
dgaley Jun 11, 2026
0559e1e
Merge branch 'smartcardeku' of https://github.com/Keyfactor/digicert-…
dgaley Jun 11, 2026
2926f4f
changelog
dgaley Jun 11, 2026
1f51e8a
Merge pull request #52 from Keyfactor/smartcardeku
dgaley Jun 11, 2026
63b5935
merge from release branch
dgaley Jun 11, 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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,6 @@

### 2.2.1
* Properly mark 'needs_approval' status as Pending rather than Failed

### 2.3.0
* Add configuration flag to support adding KDC/SmartCardLogon EKU to ssl cert requests
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ An API Key within your Digicert account that has the necessary permissions to en
* **Organization-Name** - OPTIONAL: For requests that will not have a subject (such as ACME) you can use this field to provide the organization name. Value supplied here will override any CSR values, so do not include this field if you want the organization from the CSR to be used.
* **RenewalWindowDays** - OPTIONAL: The number of days from certificate expiration that the gateway should do a renewal rather than a reissue. If not provided, default is 90.
* **CertType** - OPTIONAL: The type of cert to enroll for. Valid values are 'ssl' and 'client'. The value provided here must be consistant with the ProductID. If not provided, default is 'ssl'. Ignored for secure_email_* product types.
* **IncludeClientAuthEKU** - OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the Client Authentication EKU added to the request. NOTE: This feature is currently planned to be removed by DigiCert in May 2026.
* **IncludeClientAuthEKU** - OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the Client Authentication EKU added to the request. NOTE: This feature is currently planned to be removed by DigiCert in March 2027.
* **IncludeKDCSmartCardLogonEKU** - OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the KDC/SmartCardLogon EKU added to the request.
* **EnrollDivisionId** - OPTIONAL: The division (container) ID to use for enrollments against this template.
* **CommonNameIndicator** - Required for secure_email_sponsor and secure_email_organization products, ignored otherwise. Defines the source of the common name. Valid values are: email_address, given_name_surname, pseudonym, organization_name
* **ProfileType** - Optional for secure_email_* types, ignored otherwise. Valid values are: strict, multipurpose. Use 'multipurpose' if your cert includes any additional EKUs such as client auth. Default if not provided is dependent on product configuration within Digicert portal.
Expand Down
51 changes: 43 additions & 8 deletions digicert-certcentral-caplugin/CertCentralCAPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -299,10 +299,23 @@ public async Task<EnrollmentResult> Enroll(string csr, string subject, Dictionar
string priorCertSnString = null;
string priorCertReqID = null;

if (typeOfCert.Equals("ssl") && Convert.ToBoolean(productInfo.ProductParameters[CertCentralConstants.Config.INCLUDE_CLIENT_AUTH]))
if (typeOfCert.Equals("ssl"))
{
orderRequest.Certificate.ProfileOption = "server_client_auth_eku";
_logger.LogWarning($"{CertCentralConstants.Config.INCLUDE_CLIENT_AUTH}: Ability to include client auth EKU in SSL certs is currently planned to cease in May 2026. Make sure any workflows that depend on this feature are updated before then to avoid interruptions.");
bool clientAuth = Convert.ToBoolean(productInfo.ProductParameters[CertCentralConstants.Config.INCLUDE_CLIENT_AUTH]);
bool kdc = Convert.ToBoolean(productInfo.ProductParameters[CertCentralConstants.Config.INCLUDE_KDC]);
if (clientAuth && kdc)
{
throw new Exception($"Cannot enroll for cert with both Client Auth and KDC/SmartCardLogon EKU set to 'true'");
}
Comment on lines +304 to +309
if (clientAuth)
{
orderRequest.Certificate.ProfileOption = "server_client_auth_eku";
_logger.LogWarning($"{CertCentralConstants.Config.INCLUDE_CLIENT_AUTH}: Ability to include client auth EKU in SSL certs is currently planned to cease in March 2027. Make sure any workflows that depend on this feature are updated before then to avoid interruptions.");
}
else if (kdc)
{
orderRequest.Certificate.ProfileOption = "kdc_smart_card";
}
}

bool dupe = false;
Expand Down Expand Up @@ -620,7 +633,14 @@ public Dictionary<string, PropertyConfigInfo> GetTemplateParameterAnnotations()
},
[CertCentralConstants.Config.INCLUDE_CLIENT_AUTH] = new PropertyConfigInfo()
{
Comments = "OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the Client Authentication EKU added to the request. NOTE: This feature is currently planned to be removed by DigiCert in May 2026.",
Comments = "OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the Client Authentication EKU added to the request. NOTE: This feature is currently planned to be removed by DigiCert in March 2027.",
Hidden = false,
DefaultValue = false,
Type = "Boolean"
},
[CertCentralConstants.Config.INCLUDE_KDC] = new PropertyConfigInfo()
{
Comments = "OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the KDC/SmartCardLogon EKU added to the request.",
Hidden = false,
DefaultValue = false,
Type = "Boolean"
Expand Down Expand Up @@ -1068,9 +1088,9 @@ public async Task ValidateProductInfo(EnrollmentProductInfo productInfo, Diction
CertificateTypeDetailsRequest detailsRequest = new CertificateTypeDetailsRequest(product.NameId);

detailsRequest.ContainerId = null;
if (connectionInfo.ContainsKey(CertCentralConstants.Config.DIVISION_ID))
if (productInfo.ProductParameters.ContainsKey(CertCentralConstants.Config.ENROLL_DIVISION_ID))
{
string div = connectionInfo[CertCentralConstants.Config.DIVISION_ID].ToString();
string div = productInfo.ProductParameters[CertCentralConstants.Config.ENROLL_DIVISION_ID].ToString();
if (!string.IsNullOrWhiteSpace(div))
Comment on lines 1090 to 1094
{
if (int.TryParse($"{div}", out int divId))
Expand All @@ -1092,15 +1112,30 @@ public async Task ValidateProductInfo(EnrollmentProductInfo productInfo, Diction

if (!Constants.ProductTypes.SMIME_CERT.Contains(productInfo.ProductID, StringComparer.OrdinalIgnoreCase))
{
if (connectionInfo.ContainsKey(CertCentralConstants.Config.CERT_TYPE))
if (productInfo.ProductParameters.ContainsKey(CertCentralConstants.Config.CERT_TYPE))
{
var typeOfCert = (string)connectionInfo[CertCentralConstants.Config.CERT_TYPE];
var typeOfCert = (string)productInfo.ProductParameters[CertCentralConstants.Config.CERT_TYPE];
if (!(typeOfCert.Equals("ssl") || typeOfCert.Equals("client")))
{
throw new AnyCAValidationException("Invalid Cert Type specified. Valid options are 'ssl' or 'client'");
}
}
}

bool clientAuth = false, kdc = false;
if (productInfo.ProductParameters.ContainsKey(CertCentralConstants.Config.INCLUDE_CLIENT_AUTH))
{
clientAuth = Convert.ToBoolean(productInfo.ProductParameters[CertCentralConstants.Config.INCLUDE_CLIENT_AUTH]);
}
if (productInfo.ProductParameters.ContainsKey(CertCentralConstants.Config.INCLUDE_KDC))
{
kdc = Convert.ToBoolean(productInfo.ProductParameters[CertCentralConstants.Config.INCLUDE_KDC]);
}
Comment on lines +1125 to +1133
if (clientAuth && kdc)
{
throw new AnyCAValidationException($"Unable to use both {CertCentralConstants.Config.INCLUDE_CLIENT_AUTH} and {CertCentralConstants.Config.INCLUDE_KDC} in the same certificate.");
}

_logger.MethodExit(LogLevel.Trace);
}

Expand Down
1 change: 1 addition & 0 deletions digicert-certcentral-caplugin/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public class Config
public const string SYNC_EXPIRATION_DAYS = "SyncExpirationDays";
public const string CERT_TYPE = "CertType";
public const string INCLUDE_CLIENT_AUTH = "IncludeClientAuthEKU";
public const string INCLUDE_KDC = "IncludeKDCSmartCardLogonEKU";
public const string ENROLL_DIVISION_ID = "EnrollDivisionId";
public const string COMMON_NAME_INDICATOR = "CommonNameIndicator";
public const string PROFILE_TYPE = "ProfileType";
Expand Down
6 changes: 5 additions & 1 deletion integration-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,11 @@
},
{
"name": "IncludeClientAuthEKU",
"description": "OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the Client Authentication EKU added to the request. NOTE: This feature is currently planned to be removed by DigiCert in May 2026."
"description": "OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the Client Authentication EKU added to the request. NOTE: This feature is currently planned to be removed by DigiCert in March 2027."
},
{
"name": "IncludeKDCSmartCardLogonEKU",
"description": "OPTIONAL for SSL certs, ignored otherwise. If set to 'true', SSL certs enrolled under this template will have the KDC/SmartCardLogon EKU added to the request."
},
{
"name": "EnrollDivisionId",
Expand Down
Loading