You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If the order is a replacement order, then we need to check that:
the certificate being replaced exists,
the requesting account owns that certificate, and
the names in this new order match the names in the certificate being replaced.
Once the above conditions are satisfied:
Indicate in the NewOrder request dispatched to the RA that this order should bypass rate limits.
(future) Mark this certificate as "replaced" in any existing incidents tables.
WFE implementation should look something like:
varnewOrderRequeststruct {
Identifiers []identifier.ACMEIdentifier`json:"identifiers"`NotBefore, NotAfter, Replacesstring
}
...ifnewOrderRequest.Replaces!="" {
// If the order is a replacement order, then we need to check that:// - the certificate being replaced exists,// - the requesting account owns that certificate, and// - the names in this new order match the names in the certificate// being replaced.certID, prob, err:=newCertID(newOrderRequest.Replaces, wfe.issuerCertificates)
iferr!=nil {
wfe.sendError(response, logEvent, prob, err)
}
cert, err:=wfe.sa.GetCertificate(ctx, &sapb.Serial{Serial: certID.Serial()})
iferr!=nil {
iferrors.Is(err, berrors.NotFound) {
wfe.sendError(response, logEvent, probs.NotFound("Certificate replaced by this order does not exist"), nil)
} else {
wfe.sendError(response, logEvent, web.ProblemDetailsForError(err, "Failed to retrieve certificate replaced by this order"), err)
}
return
}
ifcert.RegistrationID!=acct.ID {
wfe.sendError(response, logEvent, probs.Unauthorized("Account does not own certificate replaced by this order"), nil)
return
}
varnamesMatchboolparsedCert, err:=x509.ParseCertificate(cert.Der)
iferr!=nil {
wfe.sendError(response, logEvent, probs.ServerInternal("Error parsing certificate replaced by this order"), err)
return
}
for_, name:=rangecore.UniqueLowerNames(names) {
if!slices.Contains(parsedCert.DNSNames, name) {
namesMatch=falsebreak
}
namesMatch=true
}
if!namesMatch {
wfe.sendError(response, logEvent, probs.Malformed("Certificate replaced by this order does not have matching identifiers"), nil)
return
}
bypassLimits=true
}
order, err:=wfe.ra.NewOrder(ctx, &rapb.NewOrderRequest{
RegistrationID: acct.ID,
Names: names,
BypassLimits: bypassLimits,
})
The text was updated successfully, but these errors were encountered:
Implement draft-ietf-acme-ari-02 changes in WFE newOrder:
- Add a `replaces` field to the newOrder request object
- Ensure that `replaces` values provided by subscribers are vetted
according to the requirements set out in the draft specification
- When a NewOrder request falls inside the suggested RenewalWindow,
exempt from rate limits in the WFE and indicate exemption in the RA
NewOrder request
Part of #7038
This change is specified in aarongable/draft-acme-ari#51.
WFE implementation should look something like:
The text was updated successfully, but these errors were encountered: