You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+25-67Lines changed: 25 additions & 67 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,14 @@
1
-
# ACME Server as a Registration Authority
1
+
# About
2
2
3
3
`acme-proxy` is a standalone ACME server built on [step-ca](https://github.com/smallstep/certificates) that operates in [registration authority (RA)](https://smallstep.com/docs/registration-authorities/) mode. It accepts certificate orders and validates certificate requests using the ACME protocol (RFC 8555), but does **NOT** sign certificates or store private keys.
4
4
5
+
## Documentation
6
+
7
+
Checkout our [documentation site](https://software.es.net/acme-proxy) for detailed examples on usage, installation instructions, configuration etc.
8
+
5
9
## How It Works
6
10
7
-
`acme-proxy` runs as an ACME server inside your enterprise environment, acting as an intermediary between your internal infrastructure and an external certificate authority service (such as Sectigo). When a client successfully completes an ACME challenge, `acme-proxy` forwards the certificate signing request to an external certificate authority (CA) that supports External Account Binding (EAB). The external CA signs the certificate and returns it to the client through `acme-proxy`.
11
+
`acme-proxy` runs as an ACME server inside your trusted network, acting as an intermediary between your internal infrastructure and an external certificate authority service (such as Sectigo). When a client successfully completes an ACME challenge, `acme-proxy` forwards the certificate signing request to an external certificate authority (CA) that supports External Account Binding (EAB). The external CA signs the certificate and returns it to the client through `acme-proxy`.
8
12
9
13
**Certificate Request Flow:**
10
14
@@ -31,25 +35,11 @@ This architecture addresses typical enterprise constraints that prevent direct c
31
35
- Legacy DNS infrastructure lacks REST API support or ACME client integration
32
36
- Security policies restrict distribution of API tokens or TSIG keys for large DNS zones
33
37
34
-
For more information on DNS-01 security considerations:
38
+
For more information on security considerations when using DNS-01 challenge:
35
39
36
40
-[EFF: Technical Deep Dive on ACME DNS Challenge Validation](https://www.eff.org/deeplinks/2018/02/technical-deep-dive-securing-automation-acme-dns-challenge-validation)
Using ACME with commercial CAs in enterprise environments provides several advantages:
42
-
43
-
**Trusted Certificates:**
44
-
45
-
- Certificates are signed by publicly trusted CAs are already in system trust stores
46
-
- Eliminates the operational burden of distributing and maintaining custom root certificates across endpoints, servers, and client devices
47
-
48
-
**Automation and Self-Service:**
49
-
50
-
- Leverage standard ACME clients (Certbot, acme.sh, cert-manager.io) for certificate issuance, automatic renewals.
51
-
- Enable self-service certificate requests for development teams
52
-
53
43
## Quick Start
54
44
55
45
```sh
@@ -83,17 +73,6 @@ Requirements: Go >= 1.25
83
73
❯ cd acme-proxy && make
84
74
```
85
75
86
-
### Using Docker
87
-
88
-
You can either use our [pre-built container images](https://github.com/esnet/acme-proxy/pkgs/container/acme-proxy) or you can build the image yourself.
❯ cd acme-proxy && docker build -t acme-proxy:latest .
95
-
```
96
-
97
76
## Usage
98
77
99
78
Review and update configuration options in [ca.json](./ca.json) before starting the acme-proxy server.
@@ -102,7 +81,7 @@ Review and update configuration options in [ca.json](./ca.json) before starting
102
81
vim ca.json
103
82
```
104
83
105
-
The most important parts of the config are -
84
+
Checkout our [official docs](https://software.es.net/acme-proxy/install/#configuration) for full set of configuration options. For quick start the most relevant config bits are:
106
85
107
86
```json
108
87
"dnsNames": ["acmeproxy.example.com"],
@@ -117,7 +96,7 @@ The most important parts of the config are -
While the example below uses `acme.sh` as the ACME client, we've also tested using `certbot` with equal success.
@@ -283,11 +227,11 @@ Certificate:
283
227
284
228
```
285
229
286
-
We have our certificate signed by InCommon 🎉
230
+
We have our certificate signed by our certificate authority i.e InCommon 🎉
287
231
288
232
### Renewing a certificate
289
233
290
-
Issuing a certificate is *generally* not a problem in enterprise environments. But the ability to reliably renew certificates and reload services gracefully post renewal is. I am using the `--force` flag forrenewal only because the default configurationin ACME clients only performs automatic renewal `1 < N < 30` number of days before certificate expiration.
234
+
Issuing a certificate is *generally* not a problem in enterprise environments. But the ability to automatically renew certificates and reload services gracefully post renewal is. I am using the `--force` flag forrenewal only because the default configurationin ACME clients only performs automatic renewal `1 < N < 30` number of days before certificate expiration.
Copy file name to clipboardExpand all lines: develop/externalcas.md
-6Lines changed: 0 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,3 @@
1
-
+++
2
-
title = 'External CAs'
3
-
weight = 30
4
-
BookToC = true
5
-
+++
6
-
7
1
# ACME server as Registration Authority
8
2
9
3
See [upstream docs](#upstream-docs) section for more background on what registration authority, CAS are and how those concepts fits into step-ca architecture.
Copy file name to clipboardExpand all lines: develop/maintenance.md
-6Lines changed: 0 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,3 @@
1
-
+++
2
-
title = 'Maintenance'
3
-
weight = 40
4
-
BookToC = true
5
-
+++
6
-
7
1
# Guide to patching upstream related changes
8
2
9
3
- While smallstep/certifiates is meant to serve as the upstream Go module for acme-proxy, we have to maintain some patches/fixes ourselves until they get merged upstream. Our patched version of step-ca is currently maintained in a forked repo [esnet/certificates](https://github.com/esnet/certificates).
`acme-proxy` is a standalone ACME server built on [step-ca](https://github.com/smallstep/certificates) that operates in [registration authority (RA)](https://smallstep.com/docs/registration-authorities/) mode. It runs as a standalone server inside your enterprise environment, acting as an intermediary between your internal infrastructure and an external certificate authority service (such as Sectigo). It accepts certificate orders and validates certificate requests using the ACME protocol (RFC 8555), but does **NOT** sign certificates or store private keys.
7
+
`acme-proxy` is a standalone ACME server built on [step-ca](https://github.com/smallstep/certificates) that operates in [registration authority (RA)](https://smallstep.com/docs/registration-authorities/) mode. It runs as a standalone server inside your enterprise environment, acting as an intermediary between your internal infrastructure and an external certificate authority service (such as Sectigo, DigiCert or ZeroSSL). It accepts certificate orders and validates certificate requests using the ACME protocol (RFC 8555), but does **NOT** sign certificates or store private keys.
1. Your internal server (behind a firewall perimeter) requests a certificate from `acme-proxy` using standard ACME clients like certbot, acme.sh or cert-manager.io if you're using Kubernetes.
14
14
2.`acme-proxy` presents cryptographic challenges to verify domain ownership
@@ -17,3 +17,29 @@ title = 'ACME Proxy'
17
17
5.`acme-proxy` retrieves the certificate bundle and returns it to your server
For the ACME certificate request issuance, renewal flow to work correctly, make sure your any internal firewalls, ACLs, IPtables rules permit the following traffic.
24
+
25
+
**Client to acme-proxy (HTTPS/443)**
26
+
27
+
Your servers running certbot must be able to connect to acme-proxy over HTTPS.
28
+
29
+
```
30
+
Source myserver.example.com
31
+
Destination acme-proxy.example.com
32
+
Protocol https (443)
33
+
Action allow
34
+
```
35
+
36
+
**acme-proxy to Client (HTTP/80)**
37
+
38
+
`acme-proxy` validates HTTP-01 challenges by connecting to your servers directly on port 80. Your servers must allow inbound HTTP/80 from acme-proxy's IP — not from the public internet. This is the key security benefit: HTTP/80 exposure is limited to a trusted internal host rather than the global internet which is the case when using LetsEncrypt.
Copy file name to clipboardExpand all lines: docs/content/client.md
+24-28Lines changed: 24 additions & 28 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,8 +23,8 @@ For certificate issuance commands and per-scenario usage, see [user.md](./user.m
23
23
24
24
## Installing ACME Clients
25
25
26
-
### Certbot
27
-
26
+
{{< tabs >}}
27
+
{{% tab "Certbot" %}}
28
28
> **Note:** Certbot's actively maintained distribution is via Snap. The `.deb` packages available in apt repositories are no longer maintained by the Certbot project and ship outdated versions.
The package installs the binary to `/usr/bin/acme.sh`. Use `/etc/acme.sh` as the configuration home for system-wide installations (passed via `--home` in all commands).
72
70
73
71
> **`socat` is required for standalone mode.** acme.sh uses `socat` to bind port 80 for HTTP-01 challenges in standalone mode. It is installed above alongside acme.sh. This is not required if you use NGINX or Apache plugin mode.
72
+
{{% /tab %}}
74
73
75
-
---
76
-
77
-
### Lego
78
-
74
+
{{% tab "Lego" %}}
79
75
Lego has no official packages in major Linux distribution repositories. Install the release binary directly:
80
76
81
77
```bash
@@ -88,29 +84,33 @@ lego --version
88
84
```
89
85
90
86
> Verify the checksum from the [GitHub releases page](https://github.com/go-acme/lego/releases) before deploying to production. Pin `LEGO_VERSION` in your configuration management tool and treat upgrades as a deliberate change.
87
+
{{% /tab %}}
88
+
{{< /tabs >}}
91
89
92
90
---
93
91
94
92
## Account Registration
95
93
96
94
Each ACME client must register an account with acme-proxy before any certificates can be issued. This is a one-time step per host.
97
95
98
-
### Certbot
99
-
96
+
{{< tabs >}}
97
+
{{% tab "Certbot" %}}
100
98
Certbot registers automatically on first use. No separate registration step is required.
All service units below set `SyslogIdentifier` so logs can be filtered by tag regardless of which syslog daemon is in use.
126
126
127
-
---
128
-
129
-
### Certbot
130
-
127
+
{{< tabs >}}
128
+
{{% tab "Certbot" %}}
131
129
The Snap-installed certbot ships `certbot.timer` and `certbot.service` units automatically. Enable the timer and confirm it is active:
132
130
133
131
```bash
@@ -153,11 +151,9 @@ sudo systemctl daemon-reload
153
151
```bash
154
152
sudo certbot renew --dry-run
155
153
```
154
+
{{% /tab %}}
156
155
157
-
---
158
-
159
-
### acme.sh
160
-
156
+
{{% tab "acme.sh" %}}
161
157
acme.sh's `--cron` flag iterates over all configured certificates and renews those expiring within 30 days. A single service and timer unit covers all certificates on the host.
0 commit comments