@@ -63,7 +63,11 @@ func (s *ZeroSSL) FetchCredentials(ctx context.Context, email string) (kid, hmac
6363 if err != nil {
6464 return "" , "" , fmt .Errorf ("fetch EAB credentials: %w" , err )
6565 }
66- defer resp .Body .Close ()
66+ defer func () {
67+ if closeErr := resp .Body .Close (); closeErr != nil && err == nil {
68+ err = fmt .Errorf ("close response body: %w" , closeErr )
69+ }
70+ }()
6771
6872 body , err := io .ReadAll (resp .Body )
6973 if err != nil {
@@ -89,7 +93,7 @@ func (s *ZeroSSL) FetchCredentials(ctx context.Context, email string) (kid, hmac
8993 return result .EABKID , result .EABHMACKey , nil
9094}
9195
92- func (s * ZeroSSL ) ObtainCertificate (ctx context.Context , domain , email string , challengeHandler func (token , response string )) ([][]byte , crypto.PrivateKey , error ) {
96+ func (s * ZeroSSL ) ObtainCertificate (ctx context.Context , domains [] string , email string , challengeHandler func (token , response string )) ([][]byte , crypto.PrivateKey , error ) {
9397 eabKID , eabHMACKey , err := s .FetchCredentials (ctx , email )
9498 if err != nil {
9599 return nil , nil , fmt .Errorf ("fetch ZeroSSL credentials: %w" , err )
@@ -127,44 +131,45 @@ func (s *ZeroSSL) ObtainCertificate(ctx context.Context, domain, email string, c
127131 return nil , nil , fmt .Errorf ("generate certificate private key: %w" , err )
128132 }
129133
130- order , err := client .AuthorizeOrder (ctx , []acme.AuthzID {{Type : "dns" , Value : domain }})
134+ var authzIDs []acme.AuthzID
135+ for _ , d := range domains {
136+ authzIDs = append (authzIDs , acme.AuthzID {Type : "dns" , Value : d })
137+ }
138+
139+ order , err := client .AuthorizeOrder (ctx , authzIDs )
131140 if err != nil {
132141 return nil , nil , fmt .Errorf ("create order: %w" , err )
133142 }
134143
135- var challenge * acme.Challenge
136144 for _ , authzURL := range order .AuthzURLs {
137145 auth , err := client .GetAuthorization (ctx , authzURL )
138146 if err != nil {
139147 return nil , nil , fmt .Errorf ("get authorization: %w" , err )
140148 }
149+ var challenge * acme.Challenge
141150 for _ , c := range auth .Challenges {
142151 if c .Type == "http-01" {
143152 challenge = c
144153 break
145154 }
146155 }
147- if challenge ! = nil {
148- break
156+ if challenge = = nil {
157+ return nil , nil , fmt . Errorf ( "no HTTP-01 challenge found" )
149158 }
150- }
151- if challenge == nil {
152- return nil , nil , fmt .Errorf ("no HTTP-01 challenge found" )
153- }
154159
155- token := challenge .Token
156- keyAuth , err := client .HTTP01ChallengeResponse (challenge .Token )
157- if err != nil {
158- return nil , nil , fmt .Errorf ("get key authorization: %w" , err )
159- }
160+ token := challenge .Token
161+ keyAuth , err := client .HTTP01ChallengeResponse (challenge .Token )
162+ if err != nil {
163+ return nil , nil , fmt .Errorf ("get key authorization: %w" , err )
164+ }
160165
161- challengeHandler (token , keyAuth )
166+ challengeHandler (token , keyAuth )
162167
163- log .Printf ("Starting HTTP-01 challenge verification..." )
164- if _ , err := client .Accept (ctx , challenge ); err != nil {
165- return nil , nil , fmt .Errorf ("accept challenge: %w" , err )
168+ log .Printf ("Starting HTTP-01 challenge verification for domain authorization" )
169+ if _ , err := client .Accept (ctx , challenge ); err != nil {
170+ return nil , nil , fmt .Errorf ("accept challenge: %w" , err )
171+ }
166172 }
167- log .Printf ("Challenge accepted, waiting for verification (timeout: 10 minutes)..." )
168173
169174 log .Printf ("Waiting for order verification (timeout: 10 minutes)..." )
170175 ctxWithTimeout , cancel := context .WithTimeout (ctx , 10 * time .Minute )
@@ -177,8 +182,8 @@ func (s *ZeroSSL) ObtainCertificate(ctx context.Context, domain, email string, c
177182 log .Printf ("Order verified successfully" )
178183
179184 csrTemplate := & x509.CertificateRequest {
180- Subject : pkix.Name {CommonName : domain },
181- DNSNames : [] string { domain } ,
185+ Subject : pkix.Name {CommonName : domains [ 0 ] },
186+ DNSNames : domains ,
182187 }
183188 csrDER , err := x509 .CreateCertificateRequest (rand .Reader , csrTemplate , certPrivateKey )
184189 if err != nil {
0 commit comments