-
Notifications
You must be signed in to change notification settings - Fork 17.9k
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
x/crypto/acme: Client.AcceptWithPayload to support device attestation extension #68674
Comments
A quick note: Smallstep's implementation of ACME client and server already supports the new extension. Smallstep client code that supports both the default and non-default payloads: https://github.com/smallstep/certificates/blob/1b2d999e4607bbe4796dce2a0f0f3c7a29cec463/ca/acmeClient.go#L243-L267 |
CC @golang/security |
Change https://go.dev/cl/608975 mentions this issue: |
This proposal has been added to the active column of the proposals project |
Would it make sense to add a field to the Challenge type instead of having a whole new method? |
We could also avoid adding a field entirely, and add an internal check for |
This works too. If I understand correctly, the change will look like the below. Does it make sense?
|
I may be missing something here... How does the client pass the response to the server in this case? |
Thank you for the review and suggestions! |
BTW this ACME extension as specified in the draft is already widely implemented and deployed in iOS and MacOS, so even if the draft evolves further (which is unlikely; it's AFAIK at the IETF last-call stage), there will still be a desire to support it for this large client base. |
Whoops, my bad I was thinking of the wrong extension. Adding a field to Challenge makes the most sense. The description in #68674 (comment) sounds accurate to me. |
OK, so it sounds like maybe adding
to Challenge is all we need? |
This looks like the best path forward. |
The current proposal is to add the following field to acme.Challenge:
Is that right? |
I would like for the doc comment to be a little more prescriptive. Perhaps point at the extension spec and/or suggest why one would want to set this field. Could someone more familiar with the uses of this write that text? Also, I see the extension proposal hasn't made any visible progress since version 1 was uploaded on 2023-07-24. Do we expect this to actually get ratified? Alternatively, is it in widespread enough use that it's de facto standard? |
Yup I can add some additional text.
It looks like the most recent revision was sent last month (draft-acme-device-attest-03), given there has been minimal feedback, it's likely to get moved to last-call at the next IETF meeting in November. The acme WG has taken a somewhat more reasonable approach to specification standardization, usually waiting for at least a couple working implementations before fully ossifying things. |
Have all remaining concerns about this proposal been addressed? Add the following field to acme.Challenge:
|
Yes, the current draft is already implemented by IOS and MacOS. |
Based on the discussion above, this proposal seems like a likely accept. Add the following field to acme.Challenge:
|
No change in consensus, so accepted. 🎉 Add the following field to acme.Challenge:
|
Proposal Details
The current RFC 8555, section 7.5.1 "Responding to Challenges" (https://datatracker.ietf.org/doc/html/rfc8555#section-7.5.1) states that the client should send an empty JSON body ("{}") to the challenge URL. That is what Client.Accept() method does: https://github.com/golang/crypto/blob/3375612bf41a8cdb0cdfdc21e6ca2c7ae0f764b5/acme/acme.go#L517
A new extension to the ACME protocol is proposed: https://datatracker.ietf.org/doc/draft-acme-device-attest/
Based on the recent IETF meetings, the proposal is likely to be accepted.
To support the new extension, the ACME client should be able to send a non-empty JSON body:
This proposal is for adding a new method to acme.Client (perhaps client.AcceptWithPayload) that is similar to client.Accept but allows to pass a non-default payload.
The text was updated successfully, but these errors were encountered: