Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
b0f4f97
inital commit
bhillkeyfactor Mar 16, 2026
61f111a
added in Template Params
bhillkeyfactor Mar 17, 2026
7dd14d8
added config changes
bhillkeyfactor Mar 17, 2026
73e8456
fixed await
bhillkeyfactor Mar 17, 2026
f55be6f
fixed field issues
bhillkeyfactor Mar 17, 2026
64dd60f
Removed outdated request
bhillkeyfactor Mar 17, 2026
680fd41
fixed serialization
bhillkeyfactor Mar 17, 2026
04cda51
fixed serialize issue
bhillkeyfactor Mar 17, 2026
64ba391
fixed date issue
bhillkeyfactor Mar 18, 2026
11a7a1c
delete unnneed files
bhillkeyfactor Mar 18, 2026
4ab1f57
fixed order issue
bhillkeyfactor Mar 18, 2026
2f29083
Merge branch 'restconversion' of https://github.com/Keyfactor/sslstor…
bhillkeyfactor Mar 18, 2026
3f0cab3
fixed external status
bhillkeyfactor Mar 18, 2026
6175950
fixed renewal window issues
bhillkeyfactor Mar 18, 2026
1c240ed
Merge branch 'restconversion' of https://github.com/Keyfactor/sslstor…
bhillkeyfactor Mar 18, 2026
c742f57
fixed everything to use CustomOrderId
bhillkeyfactor Mar 18, 2026
48a1311
changed to get end entity
bhillkeyfactor Mar 19, 2026
38d8ae7
fixed dns issue
bhillkeyfactor Mar 20, 2026
7be603c
Doc Updates
bhillkeyfactor Mar 20, 2026
e37c36d
Delete .claude/settings.local.json
bhillkeyfactor Mar 20, 2026
2489728
Delete .vscode/settings.json
bhillkeyfactor Mar 20, 2026
ed636ef
Update generated docs
Mar 20, 2026
6bd691b
Update integration-manifest.json
bhillkeyfactor Mar 20, 2026
6ef10e9
Update generated docs
Mar 20, 2026
6970e32
Update keyfactor-starter-workflow.yml
bhillkeyfactor Mar 20, 2026
c24d94b
Update keyfactor-starter-workflow.yml
bhillkeyfactor Mar 20, 2026
5d9fc96
Delete docs/ssl-validity-timeline.html
bhillkeyfactor Mar 20, 2026
0515a70
Update keyfactor-starter-workflow.yml
bhillkeyfactor Mar 20, 2026
d9f8ae0
Update keyfactor-starter-workflow.yml
bhillkeyfactor Mar 20, 2026
9d93899
Update configuration.md
bhillkeyfactor Mar 23, 2026
d3997a0
Update generated docs
Mar 23, 2026
94c15f8
adding .sln file
bhillkeyfactor Mar 23, 2026
ffc9ecd
removed file
bhillkeyfactor Mar 23, 2026
02a2638
added .sln
bhillkeyfactor Mar 23, 2026
69a7bfd
removed slnx
bhillkeyfactor Mar 23, 2026
19a46f9
added back slnx
bhillkeyfactor Mar 23, 2026
53548b4
removed old file
bhillkeyfactor Mar 23, 2026
7e27ab6
Update integration-manifest.json
bhillkeyfactor Mar 27, 2026
fe5b7e1
Update generated docs
Mar 27, 2026
8a13feb
fixed default status
bhillkeyfactor Mar 30, 2026
9be985e
fixed reissue issue
bhillkeyfactor Mar 31, 2026
fe3d445
undo fix
bhillkeyfactor Mar 31, 2026
9133420
fixe custom order id
bhillkeyfactor Mar 31, 2026
0bbe7e9
fixed order id
bhillkeyfactor Mar 31, 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
19 changes: 19 additions & 0 deletions .github/workflows/keyfactor-starter-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Keyfactor Bootstrap Workflow

on:
workflow_dispatch:
pull_request:
types: [opened, closed, synchronize, edited, reopened]
push:
create:
branches:
- 'release-*.*'

jobs:
call-starter-workflow:
uses: keyfactor/actions/.github/workflows/starter.yml@v4
secrets:
token: ${{ secrets.V2BUILDTOKEN}}
gpg_key: ${{ secrets.KF_GPG_PRIVATE_KEY }}
gpg_pass: ${{ secrets.KF_GPG_PASSPHRASE }}
scan_token: ${{ secrets.SAST_TOKEN }}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -416,3 +416,5 @@ FodyWeavers.xsd
*.msix
*.msm
*.msp
.claude/settings.local.json
.claude/settings.json
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# v2.0.0
* Converted from AnyCA Gateway (DB) to AnyCA Gateway REST plugin architecture
* Migrated from CAProxy.AnyGateway (BaseCAConnector) to IAnyCAPlugin interface
* Fully async operations throughout (no more Task.Run().Result blocking)
* Self-describing plugin configuration with annotations (no external template JSON files)
* Built-in product registry with 80+ certificate products
* Smart renewal vs. reissue logic with configurable renewal window
* Uses CustomOrderId for stable order tracking
* End-entity certificate extraction using X509Utilities.ExtractEndEntityCertificateContents
* GetSingleRecord now downloads and returns the actual certificate
* Connection validation with required field checks
* Enable/disable toggle for CA connector lifecycle management
* Removed Keyfactor API client dependency (no more direct template updates)

# v1.1.1
* SSL Store Api Changed Encoding Rules, needed to fix integration to match

# v1.1.0
* Added new AutoWWW field for single domain SSL Store products

# v1.0.4
* Original Release Version
471 changes: 471 additions & 0 deletions README.md

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions SslStoreCaProxy.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Solution>
<Project Path="SslStoreCaProxy/SslStoreCaProxy.csproj" />
</Solution>
10 changes: 10 additions & 0 deletions SslStoreCaProxy/Client/Models/AddSan.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Keyfactor.AnyGateway.SslStore.Interfaces;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class AddSan : IAddSan
{
public string OldValue { get; set; }
public string NewValue { get; set; }
}
}
23 changes: 23 additions & 0 deletions SslStoreCaProxy/Client/Models/AdminContact.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Keyfactor.AnyGateway.SslStore.Interfaces;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class AdminContact : IAdminContact
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string SubjectFirstName { get; set; }
public string SubjectLastName { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public string Email { get; set; }
public string Title { get; set; }
public string OrganizationName { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string Region { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
}
}
22 changes: 22 additions & 0 deletions SslStoreCaProxy/Client/Models/AuthRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using Keyfactor.AnyGateway.SslStore.Interfaces;
using Newtonsoft.Json;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class AuthRequest : IAuthRequest
{
public string PartnerCode { get; set; }
public string AuthToken { get; set; }
public string ReplayToken { get; set; }
public string UserAgent { get; set; }

[JsonProperty("TokenID")] public string TokenId { get; set; }

public string TokenCode { get; set; }

[JsonProperty("IPAddress")] public string IpAddress { get; set; }

public bool IsUsedForTokenSystem { get; set; }
public string Token { get; set; }
}
}
16 changes: 16 additions & 0 deletions SslStoreCaProxy/Client/Models/AuthResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.Collections.Generic;
using Keyfactor.AnyGateway.SslStore.Interfaces;
using Newtonsoft.Json;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class AuthResponse : IAuthResponse
{
[JsonProperty("isError")] public bool IsError { get; set; }

public List<string> Message { get; set; }
public string Timestamp { get; set; }
public string ReplayToken { get; set; }
public string InvokingPartnerCode { get; set; }
}
}
11 changes: 11 additions & 0 deletions SslStoreCaProxy/Client/Models/AuthenticationStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using Keyfactor.AnyGateway.SslStore.Interfaces;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class AuthenticationStatus : IAuthenticationStatus
{
public string AuthenticationStep { get; set; }
public string Status { get; set; }
public string LastUpdated { get; set; }
}
}
8 changes: 8 additions & 0 deletions SslStoreCaProxy/Client/Models/Certificate.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class Certificate
{
public string FileContent { get; set; }
public string FileName { get; set; }
}
}
8 changes: 8 additions & 0 deletions SslStoreCaProxy/Client/Models/DeleteSan.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class DeleteSan
{
public string OldValue { get; set; }
public string NewValue { get; set; }
}
}
27 changes: 27 additions & 0 deletions SslStoreCaProxy/Client/Models/DomainAuthVettingStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System;
using Keyfactor.AnyGateway.SslStore.Interfaces;
using Newtonsoft.Json;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class DomainAuthVettingStatus : IDomainAuthVettingStatus
{
[JsonProperty("domain")] public string Domain { get; set; }

[JsonProperty("dcvMethod")] public string DcvMethod { get; set; }

[JsonProperty("dcvStatus")] public string DcvStatus { get; set; }

public string FileName { get; set; }
public string FileContents { get; set; }

[JsonProperty("DNSName")] public string DnsName { get; set; }

[JsonProperty("DNSEntry")] public string DnsEntry { get; set; }

public string PollStatus { get; set; }

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime LastPollDate { get; set; }
}
}
12 changes: 12 additions & 0 deletions SslStoreCaProxy/Client/Models/DownloadCertificateRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Keyfactor.AnyGateway.SslStore.Interfaces;
using Newtonsoft.Json;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class DownloadCertificateRequest : IDownloadCertificateRequest
{
public AuthRequest AuthRequest { get; set; }
[JsonProperty("TheSSLStoreOrderID", NullValueHandling = NullValueHandling.Ignore)] public string TheSslStoreOrderId { get; set; }
[JsonProperty("CustomOrderID", NullValueHandling = NullValueHandling.Ignore)] public string CustomOrderId { get; set; }
}
}
27 changes: 27 additions & 0 deletions SslStoreCaProxy/Client/Models/DownloadCertificateResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Collections.Generic;
using Keyfactor.AnyGateway.SslStore.Interfaces;
using Newtonsoft.Json;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class DownloadCertificateResponse : IDownloadCertificateResponse
{
public AuthResponse AuthResponse { get; set; }
public string CertificateEndDate { get; set; }

[JsonProperty("CertificateEndDateInUTC")]
public string CertificateEndDateInUtc { get; set; }

public string CertificateStartDate { get; set; }

[JsonProperty("CertificateStartDateInUTC")]
public string CertificateStartDateInUtc { get; set; }

public string CertificateStatus { get; set; }
public List<Certificate> Certificates { get; set; }
[JsonProperty("PartnerOrderID")] public string PartnerOrderId { get; set; }
[JsonProperty("TheSSLStoreOrderID")] public object TheSslStoreOrderId { get; set; }
public string ValidationStatus { get; set; }
[JsonProperty("VendorOrderID")] public object VendorOrderId { get; set; }
}
}
8 changes: 8 additions & 0 deletions SslStoreCaProxy/Client/Models/EditSan.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class EditSan
{
public string OldValue { get; set; }
public string NewValue { get; set; }
}
}
16 changes: 16 additions & 0 deletions SslStoreCaProxy/Client/Models/EmailApproverRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Keyfactor.AnyGateway.SslStore.Interfaces;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class EmailApproverRequest : IEmailApproverRequest
{
public AuthRequest AuthRequest { get; set; }
public string ProductCode { get; set; }
public string DomainName { get; set; }
}
}
18 changes: 18 additions & 0 deletions SslStoreCaProxy/Client/Models/EmailApproverResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Keyfactor.AnyGateway.SslStore.Interfaces;
using Newtonsoft.Json;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class EmailApproverResponse : IEmailApproverResponse
{
public List<string> ApproverEmailList { get; set; }
public AuthResponse AuthResponse { get; set; }
[JsonProperty("baseDomainName", NullValueHandling = NullValueHandling.Ignore)]
public string BaseDomainName { get; set; }
}
}
17 changes: 17 additions & 0 deletions SslStoreCaProxy/Client/Models/EnrollmentField.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Keyfactor.AnyGateway.SslStore.Interfaces;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class EnrollmentField : IEnrollmentField
{
public int Id { get; set; }
public string Name { get; set; }
public List<string> Options { get; set; } = new List<string>();
public int DataType { get; set; }
}
}
96 changes: 96 additions & 0 deletions SslStoreCaProxy/Client/Models/NewOrderRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
using System.Collections.Generic;
using Keyfactor.AnyGateway.SslStore.Interfaces;
using Newtonsoft.Json;

namespace Keyfactor.AnyGateway.SslStore.Client.Models
{
public class NewOrderRequest : INewOrderRequest
{
public AuthRequest AuthRequest { get; set; }

[JsonProperty("CustomOrderID", NullValueHandling = NullValueHandling.Ignore)]
public string CustomOrderId { get; set; }

public string ProductCode { get; set; }

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string ExtraProductCodes { get; set; }

public OrganizationInfo OrganizationInfo { get; set; }

[JsonProperty("TSSOrganizationId", NullValueHandling = NullValueHandling.Ignore)]
public long TssOrganizationId { get; set; }

public long ValidityPeriod { get; set; }

public long ServerCount { get; set; }

[JsonProperty("CSR")] public string Csr { get; set; }

public string DomainName { get; set; }

public string WebServerType { get; set; }

[JsonProperty("DNSNames", NullValueHandling = NullValueHandling.Ignore)]
public List<string> DnsNames { get; set; }

[JsonProperty("isCUOrder")] public bool IsCuOrder { get; set; }

[JsonProperty("AutoWWW", NullValueHandling = NullValueHandling.Ignore,DefaultValueHandling =DefaultValueHandling.Ignore)]
public bool? AutoWWW { get; set; }

[JsonProperty("isRenewalOrder")] public bool IsRenewalOrder { get; set; }

public string SpecialInstructions { get; set; }

[JsonProperty("RelatedTheSSLStoreOrderID", NullValueHandling = NullValueHandling.Ignore)]
public string RelatedTheSslStoreOrderId { get; set; }

[JsonProperty("isTrialOrder")] public bool IsTrialOrder { get; set; }

public AdminContact AdminContact { get; set; }

public TechnicalContact TechnicalContact { get; set; }

public string ApproverEmail { get; set; }

[JsonProperty("ReserveSANCount", NullValueHandling = NullValueHandling.Ignore)]
public long ReserveSanCount { get; set; }

public bool AddInstallationSupport { get; set; }

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string EmailLanguageCode { get; set; }

[JsonProperty("FileAuthDVIndicator")] public bool? FileAuthDvIndicator { get; set; }

[JsonProperty("CNAMEAuthDVIndicator", NullValueHandling = NullValueHandling.Ignore)]
public bool? CnameAuthDvIndicator { get; set; }

[JsonProperty("HTTPSFileAuthDVIndicator", NullValueHandling = NullValueHandling.Ignore)]
public bool HttpsFileAuthDvIndicator { get; set; }

public string SignatureHashAlgorithm { get; set; }

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public bool CertTransparencyIndicator { get; set; }

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public long RenewalDays { get; set; }

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string DateTimeCulture { get; set; }

[JsonProperty("CSRUniqueValue", NullValueHandling = NullValueHandling.Ignore)]
public string CsrUniqueValue { get; set; }

[JsonProperty("isPKCS10", NullValueHandling = NullValueHandling.Ignore)]
public bool IsPkcs10 { get; set; }

[JsonProperty("WildcardReserveSANCount", NullValueHandling = NullValueHandling.Ignore)]
public long WildcardReserveSanCount { get; set; }

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string ProvisioningMethod { get; set; }
}
}
Loading
Loading