-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support http01 challenge for Auto TLS feature #4100
Comments
I'm interested in taking this. |
/assign @ZhiminXiang |
/assign @mpetason |
@ZhiminXiang: GitHub didn't allow me to assign the following users: mpetason. Note that only knative members and repo collaborators can be assigned and that issues/PRs can only have 10 assignees at the same time. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
@mpetason we are planning this for 0.8.0 which is August 06. Would you be able to target that timeline? Thanks |
@tcnghia I am working on it but I don't think I will have it done in time for 0.8.0. I'm getting help from Ryan Moe. |
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mpetason@gmail.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mpetason@gmail.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
One quick note: I think RFC 8555 §8.3 is a better citation to reference for this work instead of the obsolete As one concrete example |
Thanks @cpu for sharing the information! I updated the description of this issue accordingly. We are using cert-manager to interact with LetsEncrypt to get TLS certs. Looks like cert-manager already uses the "POST-as-GET" way to communicate with LetsEncrypt (https://github.com/jetstack/cert-manager/blob/a1fa913d4835497434e5905d20df1a15d7d4d9a6/third_party/crypto/acme/acme.go#L178). |
@ZhiminXiang The specific line of code you linked to here isn't a POST-as-GET request (it's a more standard POST to create an order) but it looks like there are POST-as-GET requests being made to poll the order. The I don't believe cert-manager will have trouble with the unauthenticated GET deprecation. |
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: knative#4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
When cert-manager creates a solver service the Knative certificate reconciler will populate Status.HTTP01Challenges of the corresponding Knative certificate. This challenge information is used to create an IngressRule to route traffic from Let's Encrypt to the solver service. Fixes: #4100 Co-Authored-By: Mike Petersen <mike.petersen@ibm.com>
In what area(s)?
/area networking
/kind proposal
Describe the feature
Currently Auto TLS only supports DNS01 challenge when integrating with cert-manager.
It would be useful for Auto TLS to also support HTTP01 challenge because:
How http01 challenge work
Per ACME, with HTTP validation, the client in an ACME transaction proves its control over a domain name by proving that it can provision HTTP resources on a server accessible under that domain name.
Specifically in the k8s world, the requests sent from Certificate Issuer to verify the ownership of the domain need to be routed a specific http01 k8s service in the cluster for fulfilling the http01 challenge. The http01 k8s service needs to return a token obtained from the Certificate Issuer. Per ACME, those requests have specific path
/.well-known/acme-challenge/token
.Proposal
I propose below auto TLS workflow to support http01 certificate. This workflow is based on current auto TLS framework.

When a Route is created, Route controller creates a Knative
Certificate
to request a TLS certificates. This is the step already existed in the auto TLS flow.When the
Certificate
is created, theCertificate
controller will be responsible for getting the http01 challenge service. (new step)After the
Certificate
controller gets the service, it will add the service name and the corresponding path (/.well-known/acme-challenge/token) in the KnativeCertificate
status. (new step).After the
Certificate
status is updated, Route controller will add a newPath
in the ClusterIngress which routes the requests matching the path in theCertificate
status to the service in theCertificate
status. (need to modify existing auto TLS step)After the http01 challenge is fulfilled, the challenge information needs to be deleted in the
Certificate
status. As a result, Route controller will remove thePath
for http01 challenge from theClusterIngress
.Note that
this proposal is not specific for any
Certificate
CRD implementation. It is based on ACME contract.In order to be able to fulfill http01 challenge, the
ClusterIngress
CRD implementation needs to support routing requests based on URI path. I assume this would not be a strong requirement as it is a basic feature of k8s Ingress./cc @mattmoor @tcnghia @mysterytony @greghaynes @ilackarms
The text was updated successfully, but these errors were encountered: