Add support for ACMEv2 POST-as-GET

Signed-off-by: James Munnelly <james@munnelly.eu>
This commit is contained in:
James Munnelly 2019-05-07 15:21:02 +01:00
parent f672720ce4
commit a947844374
2 changed files with 13 additions and 18 deletions

View File

@ -255,7 +255,7 @@ func (c *Client) FinalizeOrder(ctx context.Context, finalizeURL string, csr []by
// If a caller needs to poll an order until its status is final,
// see the WaitOrder method.
func (c *Client) GetOrder(ctx context.Context, url string) (*Order, error) {
res, err := c.get(ctx, url)
res, err := c.postWithJWSAccount(ctx, url, nil)
if err != nil {
return nil, err
}
@ -373,7 +373,7 @@ func (c *Client) UpdateAccount(ctx context.Context, a *Account) (*Account, error
// If a caller needs to poll an authorization until its status is final,
// see the WaitAuthorization method.
func (c *Client) GetAuthorization(ctx context.Context, url string) (*Authorization, error) {
res, err := c.get(ctx, url)
res, err := c.postWithJWSAccount(ctx, url, nil)
if err != nil {
return nil, err
}
@ -419,7 +419,7 @@ func (c *Client) DeactivateAuthorization(ctx context.Context, url string) error
func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorization, error) {
sleep := sleeper(ctx)
for {
res, err := c.get(ctx, url)
res, err := c.postWithJWSAccount(ctx, url, nil)
if err != nil {
return nil, err
}
@ -463,7 +463,7 @@ func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorizat
//
// A client typically polls a challenge status using this method.
func (c *Client) GetChallenge(ctx context.Context, url string) (*Challenge, error) {
res, err := c.get(ctx, url)
res, err := c.postWithJWSAccount(ctx, url, nil)
if err != nil {
return nil, err
}
@ -488,15 +488,7 @@ func (c *Client) AcceptChallenge(ctx context.Context, chal *Challenge) (*Challen
return nil, err
}
auth, err := keyAuth(c.Key.Public(), chal.Token)
if err != nil {
return nil, err
}
req := struct {
Auth string `json:"keyAuthorization"`
}{auth}
res, err := c.postWithJWSAccount(ctx, chal.URL, req)
res, err := c.postWithJWSAccount(ctx, chal.URL, json.RawMessage(`{}`))
if err != nil {
return nil, err
}
@ -819,7 +811,7 @@ func nonceFromHeader(h http.Header) string {
}
func (c *Client) GetCertificate(ctx context.Context, url string) ([][]byte, error) {
res, err := c.get(ctx, url)
res, err := c.postWithJWSAccount(ctx, url, nil)
if err != nil {
return nil, err
}

View File

@ -36,11 +36,14 @@ func jwsEncodeJSON(claimset interface{}, key crypto.Signer, accountURL, url, non
phead = fmt.Sprintf(`{"alg":%q,"kid":%q,"nonce":%q,"url":%q}`, alg, accountURL, nonce, url)
}
phead = base64.RawURLEncoding.EncodeToString([]byte(phead))
cs, err := json.Marshal(claimset)
if err != nil {
return nil, err
payload := ""
if claimset != nil {
cs, err := json.Marshal(claimset)
if err != nil {
return nil, err
}
payload = base64.RawURLEncoding.EncodeToString(cs)
}
payload := base64.RawURLEncoding.EncodeToString(cs)
hash := sha.New()
hash.Write([]byte(phead + "." + payload))
sig, err := jwsSign(key, sha, hash.Sum(nil))