2019-10-24 17:39:25 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var ACME = require('../');
|
|
|
|
var accountKey = require('../fixtures/account.jwk.json').private;
|
|
|
|
|
|
|
|
var authorization = {
|
|
|
|
identifier: {
|
|
|
|
type: 'dns',
|
|
|
|
value: 'example.com'
|
|
|
|
},
|
|
|
|
status: 'pending',
|
|
|
|
expires: '2018-04-25T00:23:57Z',
|
|
|
|
challenges: [
|
|
|
|
{
|
|
|
|
type: 'dns-01',
|
|
|
|
status: 'pending',
|
|
|
|
url:
|
|
|
|
'https://acme-staging-v02.api.letsencrypt.org/acme/challenge/cMkwXI8pIeKN04Ynfem8ErHK3GeqAPdSt2x6q7PvVGU/118755342',
|
|
|
|
token: 'LZdlUiZ-kWPs6q5WTmQFYQHZKpz9szn2vxEUu0XhyyM'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: 'http-01',
|
|
|
|
status: 'pending',
|
|
|
|
url:
|
|
|
|
'https://acme-staging-v02.api.letsencrypt.org/acme/challenge/cMkwXI8pIeKN04Ynfem8ErHK3GeqAPdSt2x6q7PvVGU/118755343',
|
|
|
|
token: '1S4zBG5YVhwSBaIY4ksI_KNMRrSmH0DZfNM9v7PYjDU'
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
var expectedChallengeUrl =
|
|
|
|
'http://example.com/.well-known/acme-challenge/1S4zBG5YVhwSBaIY4ksI_KNMRrSmH0DZfNM9v7PYjDU';
|
|
|
|
var expectedKeyAuth =
|
|
|
|
'1S4zBG5YVhwSBaIY4ksI_KNMRrSmH0DZfNM9v7PYjDU.UuuZa_56jCM2douUq1riGyRphPtRvCPkxtkg0bP-pNs';
|
|
|
|
var expectedKeyAuthDigest = 'iQiMcQUDiAeD0TJV1RHJuGnI5D2-PuSpxKz9JqUaZ2M';
|
|
|
|
var expectedDnsHost = '_test-challenge.example.com';
|
|
|
|
|
|
|
|
async function main() {
|
|
|
|
console.info('\n[Test] computing challenge authorizatin responses');
|
|
|
|
var challenges = authorization.challenges.slice(0);
|
|
|
|
|
|
|
|
function next() {
|
|
|
|
var ch = challenges.shift();
|
|
|
|
if (!ch) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
var hostname = authorization.identifier.value;
|
|
|
|
return ACME.computeChallenge({
|
|
|
|
accountKey: accountKey,
|
|
|
|
hostname: hostname,
|
|
|
|
challenge: ch,
|
|
|
|
dnsPrefix: '_test-challenge'
|
|
|
|
})
|
2020-07-28 21:53:50 +00:00
|
|
|
.then(function (auth) {
|
2019-10-24 17:39:25 +00:00
|
|
|
if ('dns-01' === ch.type) {
|
|
|
|
if (auth.keyAuthorizationDigest !== expectedKeyAuthDigest) {
|
|
|
|
console.error('[keyAuthorizationDigest]');
|
|
|
|
console.error(auth.keyAuthorizationDigest);
|
|
|
|
console.error(expectedKeyAuthDigest);
|
|
|
|
throw new Error('bad keyAuthDigest');
|
|
|
|
}
|
|
|
|
if (auth.dnsHost !== expectedDnsHost) {
|
|
|
|
console.error('[dnsHost]');
|
|
|
|
console.error(auth.dnsHost);
|
|
|
|
console.error(expectedDnsHost);
|
|
|
|
throw new Error('bad dnsHost');
|
|
|
|
}
|
|
|
|
} else if ('http-01' === ch.type) {
|
|
|
|
if (auth.challengeUrl !== expectedChallengeUrl) {
|
|
|
|
console.error('[challengeUrl]');
|
|
|
|
console.error(auth.challengeUrl);
|
|
|
|
console.error(expectedChallengeUrl);
|
|
|
|
throw new Error('bad challengeUrl');
|
|
|
|
}
|
|
|
|
if (auth.challengeUrl !== expectedChallengeUrl) {
|
|
|
|
console.error('[keyAuthorization]');
|
|
|
|
console.error(auth.keyAuthorization);
|
|
|
|
console.error(expectedKeyAuth);
|
|
|
|
throw new Error('bad keyAuth');
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
throw new Error('bad authorization inputs');
|
|
|
|
}
|
|
|
|
console.info('PASS', hostname, ch.type);
|
|
|
|
return next();
|
|
|
|
})
|
2020-07-28 21:53:50 +00:00
|
|
|
.catch(function (err) {
|
2019-10-24 17:39:25 +00:00
|
|
|
err.message =
|
|
|
|
'Error computing ' +
|
|
|
|
ch.type +
|
|
|
|
' for ' +
|
|
|
|
hostname +
|
|
|
|
':' +
|
|
|
|
err.message;
|
|
|
|
throw err;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return next();
|
|
|
|
}
|
|
|
|
|
2020-07-28 21:53:50 +00:00
|
|
|
module.exports = function () {
|
2019-10-24 17:39:25 +00:00
|
|
|
return main(authorization)
|
2020-07-28 21:53:50 +00:00
|
|
|
.then(function () {
|
2019-10-24 17:39:25 +00:00
|
|
|
console.info('PASS');
|
|
|
|
})
|
2020-07-28 21:53:50 +00:00
|
|
|
.catch(function (err) {
|
2019-10-24 17:39:25 +00:00
|
|
|
console.error(err.stack);
|
|
|
|
process.exit(1);
|
|
|
|
});
|
|
|
|
};
|