Skip to content

Commit 827475d

Browse files
committed
small improvements, better order of sections
1 parent 0a593aa commit 827475d

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

20220403-ACME-TLS.md

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,21 @@ Some parts here can already be automated easily, like Generating a private key a
5353

5454
And all of these steps can be automated
5555

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+
5671
## Deliverables
5772
* The existing TLS plugin will be extended to support the ACME protocol
5873
* 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
91106

92107
Deciding for one of these implementation, or potentially even creating a new one, is an outstanding task.
93108

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.
108109

109110
## Storage
110111

@@ -176,13 +177,13 @@ The worker caches the CERT RR (for X seconds) to reduce querying the master for
176177

177178

178179
**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
186187

187188
I hope to be done by September 01 the latest and have until September 19 as a buffer.
188189
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
192193
* Keep Contributing to CoreDNS and possibly other CNCF projects
193194

194195

195-
196196
## Questions and Discussion Topics
197197

198198
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
205205

206206
1. [ACME RFC](https://tools.ietf.org/html/rfc8555)
207207
2. [DNS Challenge Types](https://letsencrypt.org/docs/challenge-types/)
208-
3. [Explanation of ACME Protocol](https://www.thesslstore.com/blog/acme-protocol-what-it-is-and-how-it-works/)
208+
3. [Explanation of ACME Protocol](https://www.thesslstore.com/blog/acme-protocol-what-it-is-and-how-it-works/)
209+
210+
211+
[lets-encrypt]: https://letsencrypt.org/

0 commit comments

Comments
 (0)