Fixed class.lescript_v2.php to work with ACMEv2
When requesting a certificate for multiple Domains/SANs, the request must be done in a single order.
This commit is contained in:
@@ -150,41 +150,53 @@ class lescript_v2
|
|||||||
// start domains authentication
|
// start domains authentication
|
||||||
// ----------------------------
|
// ----------------------------
|
||||||
|
|
||||||
|
// Prepare order
|
||||||
|
$domains_in_order = array();
|
||||||
foreach ($domains as $domain) {
|
foreach ($domains as $domain) {
|
||||||
|
$domains_in_order []= array(
|
||||||
|
"type" => "dns",
|
||||||
|
"value" => $domain
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send new-order request
|
||||||
|
$response = $this->signedRequest($this->_req_uris['newOrder'], array(
|
||||||
|
"identifiers" => $domains_in_order
|
||||||
|
), false);
|
||||||
|
|
||||||
|
if ($this->client->getLastCode() == 403) {
|
||||||
|
$this->log("Got status 403 - setting LE status to unregistered.");
|
||||||
|
$this->setLeRegisteredState(0);
|
||||||
|
throw new RuntimeException("Got 'unauthorized' response - we need to re-register at next run. Whole response: " . json_encode($response));
|
||||||
|
}
|
||||||
|
|
||||||
|
// if response is not an array but a string, it's most likely a server-error, e.g.
|
||||||
|
// <HTML><HEAD><TITLE>Error</TITLE></HEAD><BODY>An error occurred while processing your request.
|
||||||
|
// <p>Reference #179.d8be1402.1458059103.3613c4db</BODY></HTML>
|
||||||
|
if (! is_array($response)) {
|
||||||
|
throw new RuntimeException("Invalid response from LE for domain $domain. Whole response: " . json_encode($response));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! array_key_exists('authorizations', $response)) {
|
||||||
|
throw new RuntimeException("No authorizations received for $domain. Whole response: " . json_encode($response));
|
||||||
|
}
|
||||||
|
|
||||||
|
$authorizations = $response['authorizations'];
|
||||||
|
$finalizeLink = $response['finalize'];
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
foreach ($authorizations as $authorization) {
|
||||||
|
|
||||||
// 1. getting available authentication options
|
// 1. getting available authentication options
|
||||||
// -------------------------------------------
|
// -------------------------------------------
|
||||||
|
|
||||||
|
$domain = $response['identifiers'][$i++]['value'];
|
||||||
|
|
||||||
$this->log("Requesting challenge for $domain");
|
$this->log("Requesting challenge for $domain");
|
||||||
|
|
||||||
$response = $this->signedRequest($this->_req_uris['newOrder'], array(
|
|
||||||
"identifiers" => array(
|
|
||||||
array(
|
|
||||||
"type" => "dns",
|
|
||||||
"value" => $domain
|
|
||||||
)
|
|
||||||
)
|
|
||||||
), false);
|
|
||||||
|
|
||||||
if ($this->client->getLastCode() == 403) {
|
|
||||||
$this->log("Got status 403 - setting LE status to unregistered.");
|
|
||||||
$this->setLeRegisteredState(0);
|
|
||||||
throw new RuntimeException("Got 'unauthorized' response - we need to re-register at next run. Whole response: " . json_encode($response));
|
|
||||||
}
|
|
||||||
|
|
||||||
// if response is not an array but a string, it's most likely a server-error, e.g.
|
|
||||||
// <HTML><HEAD><TITLE>Error</TITLE></HEAD><BODY>An error occurred while processing your request.
|
|
||||||
// <p>Reference #179.d8be1402.1458059103.3613c4db</BODY></HTML>
|
|
||||||
if (! is_array($response)) {
|
|
||||||
throw new RuntimeException("Invalid response from LE for domain $domain. Whole response: " . json_encode($response));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! array_key_exists('authorizations', $response)) {
|
|
||||||
throw new RuntimeException("No authorizations received for $domain. Whole response: " . json_encode($response));
|
|
||||||
}
|
|
||||||
|
|
||||||
// get authorization
|
// get authorization
|
||||||
$auth_response = $this->client->get($response['authorizations'][0]);
|
$auth_response = $this->client->get($authorization);
|
||||||
|
|
||||||
if (! array_key_exists('challenges', $auth_response)) {
|
if (! array_key_exists('challenges', $auth_response)) {
|
||||||
throw new RuntimeException("No challenges received for $domain. Whole response: " . json_encode($auth_response));
|
throw new RuntimeException("No challenges received for $domain. Whole response: " . json_encode($auth_response));
|
||||||
@@ -201,7 +213,6 @@ class lescript_v2
|
|||||||
|
|
||||||
$this->log("Got challenge token for $domain");
|
$this->log("Got challenge token for $domain");
|
||||||
$location = $challenge['url'];
|
$location = $challenge['url'];
|
||||||
$finalizeLink = $response['finalize'];
|
|
||||||
|
|
||||||
// 2. saving authentication token for web verification
|
// 2. saving authentication token for web verification
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user