aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Liao <sean@liao.dev>2025-11-09 12:55:47 +0000
committerSean Liao <sean@liao.dev>2026-02-13 09:12:11 -0800
commita408498e55412f2ae2a058336f78889fb1ba6115 (patch)
tree9bb721b4642324d10b8184b4429eef82c8d4c1eb
parentcab0f718548e8a858701b7b48161f44748532f58 (diff)
downloadgo-x-crypto-a408498e55412f2ae2a058336f78889fb1ba6115.tar.xz
acme: only require prompt if server has terms of service
Fixes golang/go#64881 Change-Id: I2b4415e6f987aab258c26c090ac7b1a465aa1697 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/719001 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Junyang Shao <shaojunyang@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Filippo Valsorda <filippo@golang.org>
-rw-r--r--acme/autocert/autocert.go4
-rw-r--r--acme/autocert/autocert_test.go2
-rw-r--r--acme/autocert/internal/acmetest/ca.go4
-rw-r--r--acme/rfc8555.go3
4 files changed, 7 insertions, 6 deletions
diff --git a/acme/autocert/autocert.go b/acme/autocert/autocert.go
index cde9066..69461e3 100644
--- a/acme/autocert/autocert.go
+++ b/acme/autocert/autocert.go
@@ -248,10 +248,6 @@ func (m *Manager) TLSConfig() *tls.Config {
// If GetCertificate is used directly, instead of via Manager.TLSConfig, package users will
// also have to add acme.ALPNProto to NextProtos for tls-alpn-01, or use HTTPHandler for http-01.
func (m *Manager) GetCertificate(hello *tls.ClientHelloInfo) (*tls.Certificate, error) {
- if m.Prompt == nil {
- return nil, errors.New("acme/autocert: Manager.Prompt not set")
- }
-
name := hello.ServerName
if name == "" {
return nil, errors.New("acme/autocert: missing server name")
diff --git a/acme/autocert/autocert_test.go b/acme/autocert/autocert_test.go
index 8ca8e2b..d9f19c2 100644
--- a/acme/autocert/autocert_test.go
+++ b/acme/autocert/autocert_test.go
@@ -201,7 +201,7 @@ func TestGetCertificate(t *testing.T) {
prepare: func(t *testing.T, man *Manager, s *acmetest.CAServer) {
man.Prompt = nil
},
- expectError: "Manager.Prompt not set",
+ expectError: "missing Manager.Prompt",
},
{
name: "trailingDot",
diff --git a/acme/autocert/internal/acmetest/ca.go b/acme/autocert/internal/acmetest/ca.go
index c7ddd3d..c80a81c 100644
--- a/acme/autocert/internal/acmetest/ca.go
+++ b/acme/autocert/internal/acmetest/ca.go
@@ -239,7 +239,8 @@ type discovery struct {
}
type discoveryMeta struct {
- ExternalAccountRequired bool `json:"externalAccountRequired,omitempty"`
+ Terms string `json:"termsOfService,omitempty"`
+ ExternalAccountRequired bool `json:"externalAccountRequired,omitempty"`
}
type challenge struct {
@@ -281,6 +282,7 @@ func (ca *CAServer) handle(w http.ResponseWriter, r *http.Request) {
NewAccount: ca.serverURL("/new-account"),
NewOrder: ca.serverURL("/new-order"),
Meta: discoveryMeta{
+ Terms: ca.serverURL("/terms"),
ExternalAccountRequired: ca.eabRequired,
},
}
diff --git a/acme/rfc8555.go b/acme/rfc8555.go
index 976b277..1fb110e 100644
--- a/acme/rfc8555.go
+++ b/acme/rfc8555.go
@@ -53,6 +53,9 @@ func (c *Client) registerRFC(ctx context.Context, acct *Account, prompt func(tos
Contact: acct.Contact,
}
if c.dir.Terms != "" {
+ if prompt == nil {
+ return nil, errors.New("acme: missing Manager.Prompt to accept server's terms of service")
+ }
req.TermsAgreed = prompt(c.dir.Terms)
}