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: 20220403-ACME-TLS.md
+26-23Lines changed: 26 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,6 +53,21 @@ Some parts here can already be automated easily, like Generating a private key a
53
53
54
54
And all of these steps can be automated
55
55
56
+
## How ACME works
57
+
58
+
ACME is a client-server protocl where the Server side is implemented by a Certificate Authority (CA) such as [Let's Encrypt][lets-encrypt] the client side is implemented by a service that wants to obtain a valid certificate, such as CoreDNS in this case. The client has to prove ownership of a domain before the CA can give out a certificate, to achieve that, one of the following challenges has to be completed:
59
+
60
+
### HTTP01 Challenge
61
+
This requires port 80.
62
+
63
+
CA gives the ACME client a token which puts a file on the server at http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN>. The file contains the token, plus a thumbprint of your account key. Once the client tells the CA that the file is ready, Let’s Encrypt tries retrieving it. If the validation checks get the right responses from the web server, the validation is considered successful and the certificate can be issued.
64
+
65
+
To implement this in CoreDNS I propose that the underlying Caddy server could be used to serve the file at `/.well-known/acme-challenge/`. I am not familar enough with the codebase of CoreDNS to know how feasible it would be to do this from a plugin - see questions and discussions section.
66
+
67
+
### DNS01 Challenge
68
+
After the CA gives the ACME client a token, the client will then create a TXT record derived from that token and your account key, and put that record at _acme-challenge.<YOUR_DOMAIN>. The CA queries the DNS system for that record and the certificate can be issued if it matches.
69
+
However, to do this automatically, the DNS provider needs to offer an API by which changes can be made to domain names. Wildcard certificates can be issued with this challenge.
70
+
56
71
## Deliverables
57
72
* The existing TLS plugin will be extended to support the ACME protocol
58
73
* It will be possible to setup CoreDNS with a verified certificate, signed by a CA such as Let's Encrypt, without manually generating and renewing it
@@ -91,20 +106,6 @@ To implement ACME there are a couple packages that we could use to help us such
91
106
92
107
Deciding for one of these implementation, or potentially even creating a new one, is an outstanding task.
93
108
94
-
### Challenges
95
-
96
-
To prove ownership of a domain with ACME, one of the following challenges has to be completed
97
-
98
-
### HTTP01 Challenge
99
-
This requires port 80.
100
-
101
-
CA gives the ACME client a token which puts a file on the server at http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN>. The file contains the token, plus a thumbprint of your account key. Once the client tells the CA that the file is ready, Let’s Encrypt tries retrieving it. If the validation checks get the right responses from the web server, the validation is considered successful and the certificate can be issued.
102
-
103
-
To implement this in CoreDNS I propose that the underlying Caddy server could be used to serve the file at `/.well-known/acme-challenge/`. I am not familar enough with the codebase of CoreDNS to know how feasible it would be to do this from a plugin - see questions and discussions section.
104
-
105
-
### DNS01 Challenge
106
-
After the CA gives the ACME client a token, the client will then create a TXT record derived from that token and your account key, and put that record at _acme-challenge.<YOUR_DOMAIN>. The CA queries the DNS system for that record and the certificate can be issued if it matches.
107
-
However, to do this automatically, the DNS provider needs to offer an API by which changes can be made to domain names. Wildcard certificates can be issued with this challenge.
108
109
109
110
## Storage
110
111
@@ -176,13 +177,13 @@ The worker caches the CERT RR (for X seconds) to reduce querying the master for
176
177
177
178
178
179
**June 13 - September 19:**
179
-
* Integrate ACME library (or own implementation if necessary) into TLS plugin
180
-
* Implement Challenges
181
-
* Develop Tests for ACME challenges
182
-
* Start writing documentation
183
-
* Start working on cluster implementation
184
-
* Develop Tests for cluster implementation
185
-
* Finish the documentation
180
+
1. Integrate ACME library (or own implementation if necessary) into TLS plugin
181
+
2. Implement Challenges
182
+
3. Develop Tests for ACME challenges
183
+
3. Start writing documentation
184
+
4. Start working on cluster implementation
185
+
5. Develop Tests for cluster implementation
186
+
6. Finish the documentation
186
187
187
188
I hope to be done by September 01 the latest and have until September 19 as a buffer.
188
189
I will also be in contact with the mentors and hope to gather a lot of feedback along the way.
@@ -192,7 +193,6 @@ I will also be in contact with the mentors and hope to gather a lot of feedback
192
193
* Keep Contributing to CoreDNS and possibly other CNCF projects
193
194
194
195
195
-
196
196
## Questions and Discussion Topics
197
197
198
198
1. Do coredns have a domain for testing and development?
@@ -205,4 +205,7 @@ A lot of this proposal has been reused from a previous attempts [here](https://g
0 commit comments