Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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-bootstrap-workflow-v3.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@v5
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 CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
### 1.0.0
* Initial Release
108 changes: 107 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,107 @@
# globalsign-atlas-caplugin
<h1 align="center" style="border-bottom: none">
GlobalSign Atlas AnyCA Gateway REST Plugin
</h1>

<p align="center">
<!-- Badges -->
<img src="https://img.shields.io/badge/integration_status-production-3D1973?style=flat-square" alt="Integration Status: production" />
<a href="https://github.com/Keyfactor/globalsign-atlas-caplugin/releases"><img src="https://img.shields.io/github/v/release/Keyfactor/globalsign-atlas-caplugin?style=flat-square" alt="Release" /></a>
<img src="https://img.shields.io/github/issues/Keyfactor/globalsign-atlas-caplugin?style=flat-square" alt="Issues" />
<img src="https://img.shields.io/github/downloads/Keyfactor/globalsign-atlas-caplugin/total?style=flat-square&label=downloads&color=28B905" alt="GitHub Downloads (all assets, all releases)" />
</p>

<p align="center">
<!-- TOC -->
<a href="#support">
<b>Support</b>
</a>
·
<a href="#requirements">
<b>Requirements</b>
</a>
·
<a href="#installation">
<b>Installation</b>
</a>
·
<a href="#license">
<b>License</b>
</a>
·
<a href="https://github.com/orgs/Keyfactor/repositories?q=anycagateway">
<b>Related Integrations</b>
</a>
</p>

The GlobalSign Atlas AnyCA Gateway REST plugin extends the capabilities of GlobalSign Atlas to Keyfactor Command via the Keyfactor AnyCA Gateway REST. The plugin has the following capabilities:
* SSl Certificate Synchronization
* SSL Certificate Enrollment
* SSL Certificate Revocation

## Compatibility

The GlobalSign Atlas AnyCA Gateway REST plugin is compatible with the Keyfactor AnyCA Gateway REST 24.2.0 and later.

## Support
The GlobalSign Atlas AnyCA Gateway REST plugin is supported by Keyfactor for Keyfactor customers. If you have a support issue, please open a support ticket via the Keyfactor Support Portal at https://support.keyfactor.com.

> To report a problem or suggest a new feature, use the **[Issues](../../issues)** tab. If you want to contribute actual bug fixes or proposed enhancements, use the **[Pull requests](../../pulls)** tab.

## Requirements

To use the GlobalSign Atlas AnyCA Gateway, you must generate a set of API Credentials (key/secret) within the Atlas portal, as well as an mTLS certificate linked to those credentials.

## Installation

1. Install the AnyCA Gateway REST per the [official Keyfactor documentation](https://software.keyfactor.com/Guides/AnyCAGatewayREST/Content/AnyCAGatewayREST/InstallIntroduction.htm).

2. On the server hosting the AnyCA Gateway REST, download and unzip the latest [GlobalSign Atlas AnyCA Gateway REST plugin](https://github.com/Keyfactor/globalsign-atlas-caplugin/releases/latest) from GitHub.

3. Copy the unzipped directory (usually called `net8.0` or `net10.0`) to the Extensions directory:


```shell
Depending on your AnyCA Gateway REST version, copy the unzipped directory to one of the following locations:
Program Files\Keyfactor\AnyCA Gateway\AnyGatewayREST\net8.0\Extensions
Program Files\Keyfactor\AnyCA Gateway\AnyGatewayREST\net10.0\Extensions
```

> The directory containing the GlobalSign Atlas AnyCA Gateway REST plugin DLLs (`net8.0` or `net10.0`) can be named anything, as long as it is unique within the `Extensions` directory.

4. Restart the AnyCA Gateway REST service.

5. Navigate to the AnyCA Gateway REST portal and verify that the Gateway recognizes the GlobalSign Atlas plugin by hovering over the ⓘ symbol to the right of the Gateway on the top left of the portal.

## Configuration

1. Follow the [official AnyCA Gateway REST documentation](https://software.keyfactor.com/Guides/AnyCAGatewayREST/Content/AnyCAGatewayREST/AddCA-Gateway.htm) to define a new Certificate Authority, and use the notes below to configure the **Gateway Registration** and **CA Connection** tabs:

* **Gateway Registration**

In order to enroll for certificates the Keyfactor Command server must trust the trust chain. Once you configure your Root and/or Subordinate CA in your Atlas account, make sure to download and import the certificate chain into the Command Server certificate store

* **CA Connection**

Populate using the configuration fields collected in the [requirements](#requirements) section.

* **ApiKey** - The API key for the Atlas credentials the gateway will use.
* **ApiSecret** - The corresponding API secret value that matches with the ApiKey.
* **ClientCertificate** - The client auth certificate to use with the Atlas API
* **SyncStartDate** - The earliest date to go back when doing a full sync.

2. When defining templates, the product ID should just be defined as "certificate".

3. Follow the [official Keyfactor documentation](https://software.keyfactor.com/Guides/AnyCAGatewayREST/Content/AnyCAGatewayREST/AddCA-Keyfactor.htm) to add each defined Certificate Authority to Keyfactor Command and import the newly defined Certificate Templates.

4. In Keyfactor Command (v12.3+), for each imported Certificate Template, follow the [official documentation](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/Configuring%20Template%20Options.htm) to define enrollment fields for each of the following parameters:

* **Lifetime** - The term length (in days) to use for enrollment.
* **KeyUsage** - The key usage to use for enrolled certs. Valid values are 'client', 'server', and 'clientserver'.

## License

Apache License 2.0, see [LICENSE](LICENSE).

## Related Integrations

See all [Keyfactor Any CA Gateways (REST)](https://github.com/orgs/Keyfactor/repositories?q=anycagateway).
18 changes: 18 additions & 0 deletions docsource/configuration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Overview

The GlobalSign Atlas AnyCA Gateway REST plugin extends the capabilities of GlobalSign Atlas to Keyfactor Command via the Keyfactor AnyCA Gateway REST. The plugin has the following capabilities:
* SSl Certificate Synchronization
* SSL Certificate Enrollment
* SSL Certificate Revocation

## Requirements

To use the GlobalSign Atlas AnyCA Gateway, you must generate a set of API Credentials (key/secret) within the Atlas portal, as well as an mTLS certificate linked to those credentials.

## Gateway Registration

In order to enroll for certificates the Keyfactor Command server must trust the trust chain. Once you configure your Root and/or Subordinate CA in your Atlas account, make sure to download and import the certificate chain into the Command Server certificate store

## Certificate Template Creation Step

When defining templates, the product ID should just be defined as "certificate".
32 changes: 32 additions & 0 deletions globalsign-atlas-caplugin.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.7.11919.86 stable
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "globalsign-atlas-caplugin", "globalsign-atlas-caplugin\globalsign-atlas-caplugin.csproj", "{292B7A34-CFEC-4ABB-8BE6-31F87BC1651B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}"
ProjectSection(SolutionItems) = preProject
CHANGELOG.md = CHANGELOG.md
docsource\configuration.md = docsource\configuration.md
integration-manifest.json = integration-manifest.json
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{292B7A34-CFEC-4ABB-8BE6-31F87BC1651B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{292B7A34-CFEC-4ABB-8BE6-31F87BC1651B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{292B7A34-CFEC-4ABB-8BE6-31F87BC1651B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{292B7A34-CFEC-4ABB-8BE6-31F87BC1651B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D966B726-B709-498F-97E5-D53F6F7495A6}
EndGlobalSection
EndGlobal
27 changes: 27 additions & 0 deletions globalsign-atlas-caplugin/APIProxy/AtlasBaseCalls.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using Newtonsoft.Json;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Keyfactor.Extensions.CAPlugin.GlobalSign.Atlas.APIProxy
{
public abstract class AtlasBaseRequest
{
[JsonIgnore]
public string Resource { get; internal set; }

[JsonIgnore]
public string Method { get; internal set; }

[JsonIgnore]
public string TargetURI { get; set; }

public string BuildParameters()
{
return "";
}
}
}
40 changes: 40 additions & 0 deletions globalsign-atlas-caplugin/APIProxy/Certificate.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Newtonsoft.Json;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Keyfactor.Extensions.CAPlugin.GlobalSign.Atlas.APIProxy
{
public class CertificateResponse
{
[JsonProperty("certificate")]
public string Certificate { get; set; }

[JsonProperty("status")]
public string Status { get; set; }

[JsonProperty("description")]
public string Description { get; set; }
}

public class CertificateStatusResponse
{
[JsonProperty("not_after")]
public long NotAfter { get; set; }

[JsonProperty("not_before")]
public long NotBefore { get; set; }

[JsonProperty("serial_number")]
public string SerialNumber { get; set; }
}

public class CertificateDetailsResponse
{
public CertificateResponse Cert { get; set; }
public CertificateStatusResponse Status { get; set; }
}
}
Loading
Loading