error:0909006C:PEM routines:get_name:no start line #8

Open
opened 2020-09-03 19:28:24 +00:00 by Ghost · 0 comments

Dear AJ,

Thank you for your great libs. I'm happy to have a possibility finally automate my ssl setup. I'm trying to make a module which could work in k8s and having an error.

Here is the code:

import express from 'express';
import fs from 'fs';
import ACME from 'acme-v2';
import Keypairs from '@root/keypairs';
import CSR from '@root/csr';
import PEM from '@root/pem';
import punycode from 'punycode';

const app = express();
const port = 80;

const dbService = new DBService();

app.get('/', (req, res) => {
	res.send('Hello World!')
})

app.get('/.well-known/acme-challenge/:token', async (req, res) => {
	return res.set({ 'Content-Type': 'application/octet-stream' }).send(`${req.params.token}.Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs`);
	const { results: [row] } = await dbService.acmeHTTP01SetKeyAuthorization(req.params.token);
	if(!row){
		return res.status(404).end();
	}
	const { keyAuthorization } = row;
	res.set({ 'Content-Type': 'application/octet-stream' }).send(data.challenge.keyAuthorization);
})

app.listen(port, () => {
	console.log(`Example app listening at http://localhost:${port}`)
})

const http01 = {
	create: function (config) {
		return {
			init: function (opts) {
				console.log('init', opts)
				return null;
			},

			set: function (data) {
				console.log('Add Key Auth URL', data);
				console.log(`/.well-known/acme-challenge/${data.challenge.token}`);
				return dbService.acmeHTTP01SetKeyAuthorization({ token: data.challenge.token, keyAuthorization: data.challenge.keyAuthorization }).then(() => null);
			},

			get: async function (data) {
				console.log('List Key Auth URL', data);
				const { results: [{ keyAuthorization }] } = await dbService.acmeHTTP01SetKeyAuthorization(data.challenge.token);
				return { keyAuthorization };
			},

			remove: function (data) {
				console.log('Remove Key Auth URL', data);
				return dbService.acmeHTTP01SetKeyAuthorization(data.challenge.token).then(() => null);
			}
		};
	}
};

const AcmeManager = () => new Promise(async (resolve, reject) => {
	const acme = ACME.create({ maintainerEmail: 'zedd_0000@yahoo.com', packageAgent: 'zeddmalam.com/v0.0.1', notify: console.log });
	await acme.init('https://acme-staging-v02.api.letsencrypt.org/directory');
  
	//const accountKeypair = await Keypairs.generate({ kty: 'EC', format: 'jwk' });
	//const accountKey = accountKeypair.private;
  
	//console.log(accountKeypair);
  
	// const acc = await acme.accounts.create({ subscriberEmail:'zedd_0000@yahoo.com', agreeToTerms: true, accountKey });
  
	const account = {
	  key:
	  {
		kty: 'EC',
		crv: 'P-256',
		x: 'LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw',
		y: 'S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw',
		kid: 'https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086'
	  },
	  contact: ['mailto:zedd_0000@yahoo.com'],
	  initialIp: '95.91.246.0',
	  createdAt: '2020-08-31T21:31:52.682665841Z',
	  status: 'valid'
	};
	const accountKey = {
	  kty: 'EC',
	  crv: 'P-256',
	  x: 'LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw',
	  y: 'S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw',
	  kid: 'https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086'
	};
  
	//const serverKeypair = await Keypairs.generate({ kty: 'RSA', format: 'jwk' });
	//console.log('serverKeypair', serverKeypair);
	//const serverKey = serverKeypair.private;
	//const serverPem = await Keypairs.export({ jwk: serverKey });
	const serverPem = `-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUsmdSU39nciZpKV+jlnE0q
jmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4hs2ElSkUgrZsyRcaNmWSm
qNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUdIrsqDfOYFHLY6oAWiDzy
T1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEpX0PUcHI8PTh1qGI0T9Mb
ODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCriWodoAME6eqDyecD96LXw
IhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQABAoIBAH4nGKcm7BDs6JUZ
0hFUm4N+fNQ2ugghBsrBvGs/R8Ki1ggRLupMRyI2QwcssCfN1DTHRLOYWPyDZSlx
taBD0x6oMy8GzQUUMh36LVn4kfHzWedSDkS3cfy3U7dJmcB0yJglhdgprhdZnBB1
BFIbh2mu88AgyaEPp8T+7WlktQMlysh4vmDJaibis8dthwzD0iPMpa66s8j+buLh
T9GbH+PaDddzKnLHJWZbcL5Gb6jx9dZLqUoxYeCVoPmTZJ3CP6KCB+ODreWbUD8Q
YCDgMQO63DhJO/wgsBXbmSETvLDMxr6PELiOk+woH793QPj6DbHc+yQydKMXzU+p
Qjh3fVECgYEAxxjk8LGV31EucNwAlMYyynJfLIaX4fgcdriIKj6sqkMD5g4o/1Wr
TQMqWjYAtbOowv9qgYor3ba40UmloasBVTdXbVFqlYnHafkbIb7TvI7C2xMwqxn6
CU2+EwMXUpd3/ouhwVasmm6fH9ptOdxdHkDaFJncDo+bDPHsH8qStt0CgYEAwwVq
EIsiSP1JK8X4+DamcLDINnCm4hLL7Vf/bgLBwYPNBOEHxGrXUaCeJBbB3Igbr/Zy
bVZR9pdim9+bfNSpUCRcFUIUzuF5IzZUWTlS+LpTLTYnBwhci5gaf/2bH9bRrurp
HGVawGOzFTXQG5NQECbt2qhpL6k86eRK4nJjowsCgYAfVIqKWde0yaieN/CbeMj7
VJ4nepKiC5InGIjM5Qn0zRDq/eVzsL6BIvNiOMdJ0JjI/rp64gxfGmbhAE7hLvDJ
wSiv2jUEjSblRT8Aw2+8Z1bAdLee5TqUhjhX84+S/qTyWHS+4O3Oa4P81jmD9mps
3VW0EjYv0Gdc1SEMK6uEvQKBgB3mdpySuG74Zn+PmtxzhJFCiW/PVcbTmvCIzWDQ
i2RgEM7usYIr31dkiNp/orltJNGVt3WMBoUIMNY1MmGxOURQTs3zk70kVK5RZh1H
7LC14IrOAq3RWl8MswNsnpwDE6L94T+5SnC02IAoAAA6VcwkK9OafoYQLIavuct+
PkiBAoGBALX9W+9VFrW+82yihFnKKKj2OA7/vTI80Uk5dycOWixH0b+Js5cKvC4h
trqAkGZBgAJ7E4XhbXNIhArKiBTPKRKvEg6LAi8nv//VsRJj8W7c7no3jgteTGWh
iXlRjhF23zx7XRx09149pydi1gAShdt3oCr/QCLoRYfwQnwYmOlG
-----END RSA PRIVATE KEY-----`;
	console.log('serverPem', serverPem);
	const jwk = await Keypairs.import({ pem: serverPem });
	console.log('jwk', jwk);
	const domains = ['auth.zeddmalam.com'].map(d => punycode.toASCII(d));
	const encoding = 'der';
	const typ = 'CERTIFICATE REQUEST';
  
	const csrDer = await CSR.csr({ jwk, domains, encoding });
	const csr = PEM.packBlock({ type: typ, bytes: csrDer });
	console.log('csr', csr);
	const challenges = {
	  'http-01': http01.create({})
	};
  
	console.info('validating domain authorization for ' + domains.join(', '), JSON.stringify({
	  account,
	  accountKey,
	  csr,
	  domains,
	  challenges
	}));
	const pems = await acme.certificates.create({
	  account,
	  accountKey,
	  csr,
	  domains,
	  challenges
	});
  
	console.log('acme pems', JSON.stringify(pems));
	  resolve({
		ca: [fs.readFileSync("/home/zedd/ssl/ca_bundle.crt")],
		cert: fs.readFileSync("/home/zedd/ssl/certificate.crt"),
		key: fs.readFileSync("/home/zedd/ssl/private.key")
	})
});

export {
	AcmeManager,
	http01
}

And output:

Example app listening at http://localhost:80
serverPem -----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUsmdSU39nciZpKV+jlnE0q
jmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4hs2ElSkUgrZsyRcaNmWSm
qNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUdIrsqDfOYFHLY6oAWiDzy
T1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEpX0PUcHI8PTh1qGI0T9Mb
ODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCriWodoAME6eqDyecD96LXw
IhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQABAoIBAH4nGKcm7BDs6JUZ
0hFUm4N+fNQ2ugghBsrBvGs/R8Ki1ggRLupMRyI2QwcssCfN1DTHRLOYWPyDZSlx
taBD0x6oMy8GzQUUMh36LVn4kfHzWedSDkS3cfy3U7dJmcB0yJglhdgprhdZnBB1
BFIbh2mu88AgyaEPp8T+7WlktQMlysh4vmDJaibis8dthwzD0iPMpa66s8j+buLh
T9GbH+PaDddzKnLHJWZbcL5Gb6jx9dZLqUoxYeCVoPmTZJ3CP6KCB+ODreWbUD8Q
YCDgMQO63DhJO/wgsBXbmSETvLDMxr6PELiOk+woH793QPj6DbHc+yQydKMXzU+p
Qjh3fVECgYEAxxjk8LGV31EucNwAlMYyynJfLIaX4fgcdriIKj6sqkMD5g4o/1Wr
TQMqWjYAtbOowv9qgYor3ba40UmloasBVTdXbVFqlYnHafkbIb7TvI7C2xMwqxn6
CU2+EwMXUpd3/ouhwVasmm6fH9ptOdxdHkDaFJncDo+bDPHsH8qStt0CgYEAwwVq
EIsiSP1JK8X4+DamcLDINnCm4hLL7Vf/bgLBwYPNBOEHxGrXUaCeJBbB3Igbr/Zy
bVZR9pdim9+bfNSpUCRcFUIUzuF5IzZUWTlS+LpTLTYnBwhci5gaf/2bH9bRrurp
HGVawGOzFTXQG5NQECbt2qhpL6k86eRK4nJjowsCgYAfVIqKWde0yaieN/CbeMj7
VJ4nepKiC5InGIjM5Qn0zRDq/eVzsL6BIvNiOMdJ0JjI/rp64gxfGmbhAE7hLvDJ
wSiv2jUEjSblRT8Aw2+8Z1bAdLee5TqUhjhX84+S/qTyWHS+4O3Oa4P81jmD9mps
3VW0EjYv0Gdc1SEMK6uEvQKBgB3mdpySuG74Zn+PmtxzhJFCiW/PVcbTmvCIzWDQ
i2RgEM7usYIr31dkiNp/orltJNGVt3WMBoUIMNY1MmGxOURQTs3zk70kVK5RZh1H
7LC14IrOAq3RWl8MswNsnpwDE6L94T+5SnC02IAoAAA6VcwkK9OafoYQLIavuct+
PkiBAoGBALX9W+9VFrW+82yihFnKKKj2OA7/vTI80Uk5dycOWixH0b+Js5cKvC4h
trqAkGZBgAJ7E4XhbXNIhArKiBTPKRKvEg6LAi8nv//VsRJj8W7c7no3jgteTGWh
iXlRjhF23zx7XRx09149pydi1gAShdt3oCr/QCLoRYfwQnwYmOlG
-----END RSA PRIVATE KEY-----
jwk { kty: 'RSA',
  n:
   'l6wsXPyHx_xwFYB_pM8KGQNRMcUsmdSU39nciZpKV-jlnE0qjmQAjnUTzBztNRZ-6Jmil8rIhVxBGIm7MqSr0wFjro4hs2ElSkUgrZsyRcaNmWSmqNo-jn6ZChDbAvOsFt84HGbJSrykRT-jwkUegQe8qxUdIrsqDfOYFHLY6oAWiDzyT1NSMLcGi9UxjOja_boz263gFB-EOOHHLUKVIzjPSgEpX0PUcHI8PTh1qGI0T9MbODHq0cXPKV5qhRJNPSBMi_s7sqvMJ_1rjWKTwL_YFCriWodoAME6eqDyecD96LXwIhZZDyYgZby_rdCCuVKkc3L6-iFQc2CeQDOSfw',
  e: 'AQAB',
  d:
   'ficYpybsEOzolRnSEVSbg3581Da6CCEGysG8az9HwqLWCBEu6kxHIjZDByywJ83UNMdEs5hY_INlKXG1oEPTHqgzLwbNBRQyHfotWfiR8fNZ51IORLdx_LdTt0mZwHTImCWF2CmuF1mcEHUEUhuHaa7zwCDJoQ-nxP7taWS1AyXKyHi-YMlqJuKzx22HDMPSI8ylrrqzyP5u4uFP0Zsf49oN13MqcsclZltwvkZvqPH11kupSjFh4JWg-ZNkncI_ooIH44Ot5ZtQPxBgIOAxA7rcOEk7_CCwFduZIRO8sMzGvo8QuI6T7Cgfv3dA-PoNsdz7JDJ0oxfNT6lCOHd9UQ',
  p:
   'xxjk8LGV31EucNwAlMYyynJfLIaX4fgcdriIKj6sqkMD5g4o_1WrTQMqWjYAtbOowv9qgYor3ba40UmloasBVTdXbVFqlYnHafkbIb7TvI7C2xMwqxn6CU2-EwMXUpd3_ouhwVasmm6fH9ptOdxdHkDaFJncDo-bDPHsH8qStt0',
  q:
   'wwVqEIsiSP1JK8X4-DamcLDINnCm4hLL7Vf_bgLBwYPNBOEHxGrXUaCeJBbB3Igbr_ZybVZR9pdim9-bfNSpUCRcFUIUzuF5IzZUWTlS-LpTLTYnBwhci5gaf_2bH9bRrurpHGVawGOzFTXQG5NQECbt2qhpL6k86eRK4nJjows',
  dp:
   'H1SKilnXtMmonjfwm3jI-1SeJ3qSoguSJxiIzOUJ9M0Q6v3lc7C-gSLzYjjHSdCYyP66euIMXxpm4QBO4S7wycEor9o1BI0m5UU_AMNvvGdWwHS3nuU6lIY4V_OPkv6k8lh0vuDtzmuD_NY5g_ZqbN1VtBI2L9BnXNUhDCurhL0',
  dq:
   'HeZ2nJK4bvhmf4-a3HOEkUKJb89VxtOa8IjNYNCLZGAQzu6xgivfV2SI2n-iuW0k0ZW3dYwGhQgw1jUyYbE5RFBOzfOTvSRUrlFmHUfssLXgis4CrdFaXwyzA2yenAMTov3hP7lKcLTYgCgAADpVzCQr05p-hhAshq-5y34-SIE',
  qi:
   'tf1b71UWtb7zbKKEWcooqPY4Dv-9MjzRSTl3Jw5aLEfRv4mzlwq8LiG2uoCQZkGAAnsTheFtc0iECsqIFM8pEq8SDosCLye__9WxEmPxbtzuejeOC15MZaGJeVGOEXbfPHtdHHT3Xj2nJ2LWABKF23egKv9AIuhFh_BCfBiY6UY',
  kid: 'S9o7VtYAFTMX5o1rZbskgvyEVfpo17qEi2mIHU9eUQs' }
csr -----BEGIN CERTIFICATE REQUEST-----
MIICkjCCAXoCAQAwHTEbMBkGA1UEAwwSYXV0aC56ZWRkbWFsYW0uY29tMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUs
mdSU39nciZpKV+jlnE0qjmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4h
s2ElSkUgrZsyRcaNmWSmqNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUd
IrsqDfOYFHLY6oAWiDzyT1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEp
X0PUcHI8PTh1qGI0T9MbODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCri
WodoAME6eqDyecD96LXwIhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQAB
oDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNVHREEFjAUghJhdXRoLnplZGRtYWxhbS5j
b20wDQYJKoZIhvcNAQELBQADggEBAAXtVuXMC4g8XngyG0oKDrkNAu2swr7egodQ
YfsvJTzqzt1wj3chIlBwqDweVKZ8jGggt6XfA5cSqc2VMxZkPNvc0NdL/qGJsCJC
5sSXKxvHjH9W0j8kTOOOLmK5fuuZ7KBkVohP1rdm+B4S1LNgB6dfNHgnZ65qgY1W
jdQ3Cr9w1OPc8gquvNyXZ8iftbq+77P3k0Z8El8sxtJc+TEMXSC3xGx8MmhEa8KK
VA4t6+yUDvK9BcxtK5oQ7Uk8jOZ41f+eKGY6zhTFe3jJRbyCoVpRWAvqYDuyWvEK
8Mt/zoBXBBqGpITI3LT3rbozyI9H/BsF1sWnEmU8WoWr6BaI5hk=
-----END CERTIFICATE REQUEST-----
validating domain authorization for auth.zeddmalam.com {"account":{"key":{"kty":"EC","crv":"P-256","x":"LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw","y":"S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw","kid":"https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086"},"contact":["mailto:zedd_0000@yahoo.com"],"initialIp":"95.91.246.0","createdAt":"2020-08-31T21:31:52.682665841Z","status":"valid"},"accountKey":{"kty":"EC","crv":"P-256","x":"LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw","y":"S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw","kid":"https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086"},"csr":"-----BEGIN CERTIFICATE REQUEST-----\nMIICkjCCAXoCAQAwHTEbMBkGA1UEAwwSYXV0aC56ZWRkbWFsYW0uY29tMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUs\nmdSU39nciZpKV+jlnE0qjmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4h\ns2ElSkUgrZsyRcaNmWSmqNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUd\nIrsqDfOYFHLY6oAWiDzyT1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEp\nX0PUcHI8PTh1qGI0T9MbODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCri\nWodoAME6eqDyecD96LXwIhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQAB\noDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNVHREEFjAUghJhdXRoLnplZGRtYWxhbS5j\nb20wDQYJKoZIhvcNAQELBQADggEBAAXtVuXMC4g8XngyG0oKDrkNAu2swr7egodQ\nYfsvJTzqzt1wj3chIlBwqDweVKZ8jGggt6XfA5cSqc2VMxZkPNvc0NdL/qGJsCJC\n5sSXKxvHjH9W0j8kTOOOLmK5fuuZ7KBkVohP1rdm+B4S1LNgB6dfNHgnZ65qgY1W\njdQ3Cr9w1OPc8gquvNyXZ8iftbq+77P3k0Z8El8sxtJc+TEMXSC3xGx8MmhEa8KK\nVA4t6+yUDvK9BcxtK5oQ7Uk8jOZ41f+eKGY6zhTFe3jJRbyCoVpRWAvqYDuyWvEK\n8Mt/zoBXBBqGpITI3LT3rbozyI9H/BsF1sWnEmU8WoWr6BaI5hk=\n-----END CERTIFICATE REQUEST-----","domains":["auth.zeddmalam.com"],"challenges":{"http-01":{}}}
init { type: '*', request: [Function] }
Add Key Auth URL { challenge:
   { identifier: { type: 'dns', value: 'auth.zeddmalam.com' },
     challenges: [ [Object], [Object] ],
     expires: '2020-09-02T21:31:13.786Z',
     wildcard: undefined,
     type: 'http-01',
     status: 'pending',
     url: 'https://acme-staging-v02.example.com/0',
     token: 'test-01dde381fd40cd78979402137d88085a-0',
     hostname: 'auth.zeddmalam.com',
     altname: 'auth.zeddmalam.com',
     thumbprint: 'Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs',
     keyAuthorization:
      'test-01dde381fd40cd78979402137d88085a-0.Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs',
     challengeUrl:
      'http://auth.zeddmalam.com/.well-known/acme-challenge/test-01dde381fd40cd78979402137d88085a-0' } }
/.well-known/acme-challenge/test-01dde381fd40cd78979402137d88085a-0
Remove Key Auth URL { challenge:
   { identifier: { type: 'dns', value: 'auth.zeddmalam.com' },
     challenges: [ [Object], [Object] ],
     expires: '2020-09-02T21:31:13.786Z',
     wildcard: undefined,
     type: 'http-01',
     status: 'pending',
     url: 'https://acme-staging-v02.example.com/0',
     token: 'test-01dde381fd40cd78979402137d88085a-0',
     hostname: 'auth.zeddmalam.com',
     altname: 'auth.zeddmalam.com',
     thumbprint: 'Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs',
     keyAuthorization:
      'test-01dde381fd40cd78979402137d88085a-0.Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs',
     challengeUrl:
      'http://auth.zeddmalam.com/.well-known/acme-challenge/test-01dde381fd40cd78979402137d88085a-0' } }
certificate_order { account:
   { key:
      { kid:
         'https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086' } },
  subject: 'auth.zeddmalam.com',
  altnames: [ 'auth.zeddmalam.com' ],
  challengeTypes: [ 'http-01' ] }
(node:63592) UnhandledPromiseRejectionWarning: Error: error:0909006C:PEM routines:get_name:no start line
    at Sign.sign (internal/crypto/sig.js:80:26)
    at /Users/zedd/Projects/zeddmalam.com/auth.zeddmalam.com/api/node_modules/@root/keypairs/lib/node/keypairs.js:13:59
    at process._tickCallback (internal/process/next_tick.js:68:7)

as you can see, cert was generated also with your lib. Could you please help with this?

Thank you very much indeed
Cheers
D

Dear AJ, Thank you for your great libs. I'm happy to have a possibility finally automate my ssl setup. I'm trying to make a module which could work in k8s and having an error. Here is the code: ```JavaScript import express from 'express'; import fs from 'fs'; import ACME from 'acme-v2'; import Keypairs from '@root/keypairs'; import CSR from '@root/csr'; import PEM from '@root/pem'; import punycode from 'punycode'; const app = express(); const port = 80; const dbService = new DBService(); app.get('/', (req, res) => { res.send('Hello World!') }) app.get('/.well-known/acme-challenge/:token', async (req, res) => { return res.set({ 'Content-Type': 'application/octet-stream' }).send(`${req.params.token}.Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs`); const { results: [row] } = await dbService.acmeHTTP01SetKeyAuthorization(req.params.token); if(!row){ return res.status(404).end(); } const { keyAuthorization } = row; res.set({ 'Content-Type': 'application/octet-stream' }).send(data.challenge.keyAuthorization); }) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) }) const http01 = { create: function (config) { return { init: function (opts) { console.log('init', opts) return null; }, set: function (data) { console.log('Add Key Auth URL', data); console.log(`/.well-known/acme-challenge/${data.challenge.token}`); return dbService.acmeHTTP01SetKeyAuthorization({ token: data.challenge.token, keyAuthorization: data.challenge.keyAuthorization }).then(() => null); }, get: async function (data) { console.log('List Key Auth URL', data); const { results: [{ keyAuthorization }] } = await dbService.acmeHTTP01SetKeyAuthorization(data.challenge.token); return { keyAuthorization }; }, remove: function (data) { console.log('Remove Key Auth URL', data); return dbService.acmeHTTP01SetKeyAuthorization(data.challenge.token).then(() => null); } }; } }; const AcmeManager = () => new Promise(async (resolve, reject) => { const acme = ACME.create({ maintainerEmail: 'zedd_0000@yahoo.com', packageAgent: 'zeddmalam.com/v0.0.1', notify: console.log }); await acme.init('https://acme-staging-v02.api.letsencrypt.org/directory'); //const accountKeypair = await Keypairs.generate({ kty: 'EC', format: 'jwk' }); //const accountKey = accountKeypair.private; //console.log(accountKeypair); // const acc = await acme.accounts.create({ subscriberEmail:'zedd_0000@yahoo.com', agreeToTerms: true, accountKey }); const account = { key: { kty: 'EC', crv: 'P-256', x: 'LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw', y: 'S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw', kid: 'https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086' }, contact: ['mailto:zedd_0000@yahoo.com'], initialIp: '95.91.246.0', createdAt: '2020-08-31T21:31:52.682665841Z', status: 'valid' }; const accountKey = { kty: 'EC', crv: 'P-256', x: 'LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw', y: 'S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw', kid: 'https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086' }; //const serverKeypair = await Keypairs.generate({ kty: 'RSA', format: 'jwk' }); //console.log('serverKeypair', serverKeypair); //const serverKey = serverKeypair.private; //const serverPem = await Keypairs.export({ jwk: serverKey }); const serverPem = `-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUsmdSU39nciZpKV+jlnE0q jmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4hs2ElSkUgrZsyRcaNmWSm qNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUdIrsqDfOYFHLY6oAWiDzy T1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEpX0PUcHI8PTh1qGI0T9Mb ODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCriWodoAME6eqDyecD96LXw IhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQABAoIBAH4nGKcm7BDs6JUZ 0hFUm4N+fNQ2ugghBsrBvGs/R8Ki1ggRLupMRyI2QwcssCfN1DTHRLOYWPyDZSlx taBD0x6oMy8GzQUUMh36LVn4kfHzWedSDkS3cfy3U7dJmcB0yJglhdgprhdZnBB1 BFIbh2mu88AgyaEPp8T+7WlktQMlysh4vmDJaibis8dthwzD0iPMpa66s8j+buLh T9GbH+PaDddzKnLHJWZbcL5Gb6jx9dZLqUoxYeCVoPmTZJ3CP6KCB+ODreWbUD8Q YCDgMQO63DhJO/wgsBXbmSETvLDMxr6PELiOk+woH793QPj6DbHc+yQydKMXzU+p Qjh3fVECgYEAxxjk8LGV31EucNwAlMYyynJfLIaX4fgcdriIKj6sqkMD5g4o/1Wr TQMqWjYAtbOowv9qgYor3ba40UmloasBVTdXbVFqlYnHafkbIb7TvI7C2xMwqxn6 CU2+EwMXUpd3/ouhwVasmm6fH9ptOdxdHkDaFJncDo+bDPHsH8qStt0CgYEAwwVq EIsiSP1JK8X4+DamcLDINnCm4hLL7Vf/bgLBwYPNBOEHxGrXUaCeJBbB3Igbr/Zy bVZR9pdim9+bfNSpUCRcFUIUzuF5IzZUWTlS+LpTLTYnBwhci5gaf/2bH9bRrurp HGVawGOzFTXQG5NQECbt2qhpL6k86eRK4nJjowsCgYAfVIqKWde0yaieN/CbeMj7 VJ4nepKiC5InGIjM5Qn0zRDq/eVzsL6BIvNiOMdJ0JjI/rp64gxfGmbhAE7hLvDJ wSiv2jUEjSblRT8Aw2+8Z1bAdLee5TqUhjhX84+S/qTyWHS+4O3Oa4P81jmD9mps 3VW0EjYv0Gdc1SEMK6uEvQKBgB3mdpySuG74Zn+PmtxzhJFCiW/PVcbTmvCIzWDQ i2RgEM7usYIr31dkiNp/orltJNGVt3WMBoUIMNY1MmGxOURQTs3zk70kVK5RZh1H 7LC14IrOAq3RWl8MswNsnpwDE6L94T+5SnC02IAoAAA6VcwkK9OafoYQLIavuct+ PkiBAoGBALX9W+9VFrW+82yihFnKKKj2OA7/vTI80Uk5dycOWixH0b+Js5cKvC4h trqAkGZBgAJ7E4XhbXNIhArKiBTPKRKvEg6LAi8nv//VsRJj8W7c7no3jgteTGWh iXlRjhF23zx7XRx09149pydi1gAShdt3oCr/QCLoRYfwQnwYmOlG -----END RSA PRIVATE KEY-----`; console.log('serverPem', serverPem); const jwk = await Keypairs.import({ pem: serverPem }); console.log('jwk', jwk); const domains = ['auth.zeddmalam.com'].map(d => punycode.toASCII(d)); const encoding = 'der'; const typ = 'CERTIFICATE REQUEST'; const csrDer = await CSR.csr({ jwk, domains, encoding }); const csr = PEM.packBlock({ type: typ, bytes: csrDer }); console.log('csr', csr); const challenges = { 'http-01': http01.create({}) }; console.info('validating domain authorization for ' + domains.join(', '), JSON.stringify({ account, accountKey, csr, domains, challenges })); const pems = await acme.certificates.create({ account, accountKey, csr, domains, challenges }); console.log('acme pems', JSON.stringify(pems)); resolve({ ca: [fs.readFileSync("/home/zedd/ssl/ca_bundle.crt")], cert: fs.readFileSync("/home/zedd/ssl/certificate.crt"), key: fs.readFileSync("/home/zedd/ssl/private.key") }) }); export { AcmeManager, http01 } ``` And output: ``` Example app listening at http://localhost:80 serverPem -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUsmdSU39nciZpKV+jlnE0q jmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4hs2ElSkUgrZsyRcaNmWSm qNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUdIrsqDfOYFHLY6oAWiDzy T1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEpX0PUcHI8PTh1qGI0T9Mb ODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCriWodoAME6eqDyecD96LXw IhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQABAoIBAH4nGKcm7BDs6JUZ 0hFUm4N+fNQ2ugghBsrBvGs/R8Ki1ggRLupMRyI2QwcssCfN1DTHRLOYWPyDZSlx taBD0x6oMy8GzQUUMh36LVn4kfHzWedSDkS3cfy3U7dJmcB0yJglhdgprhdZnBB1 BFIbh2mu88AgyaEPp8T+7WlktQMlysh4vmDJaibis8dthwzD0iPMpa66s8j+buLh T9GbH+PaDddzKnLHJWZbcL5Gb6jx9dZLqUoxYeCVoPmTZJ3CP6KCB+ODreWbUD8Q YCDgMQO63DhJO/wgsBXbmSETvLDMxr6PELiOk+woH793QPj6DbHc+yQydKMXzU+p Qjh3fVECgYEAxxjk8LGV31EucNwAlMYyynJfLIaX4fgcdriIKj6sqkMD5g4o/1Wr TQMqWjYAtbOowv9qgYor3ba40UmloasBVTdXbVFqlYnHafkbIb7TvI7C2xMwqxn6 CU2+EwMXUpd3/ouhwVasmm6fH9ptOdxdHkDaFJncDo+bDPHsH8qStt0CgYEAwwVq EIsiSP1JK8X4+DamcLDINnCm4hLL7Vf/bgLBwYPNBOEHxGrXUaCeJBbB3Igbr/Zy bVZR9pdim9+bfNSpUCRcFUIUzuF5IzZUWTlS+LpTLTYnBwhci5gaf/2bH9bRrurp HGVawGOzFTXQG5NQECbt2qhpL6k86eRK4nJjowsCgYAfVIqKWde0yaieN/CbeMj7 VJ4nepKiC5InGIjM5Qn0zRDq/eVzsL6BIvNiOMdJ0JjI/rp64gxfGmbhAE7hLvDJ wSiv2jUEjSblRT8Aw2+8Z1bAdLee5TqUhjhX84+S/qTyWHS+4O3Oa4P81jmD9mps 3VW0EjYv0Gdc1SEMK6uEvQKBgB3mdpySuG74Zn+PmtxzhJFCiW/PVcbTmvCIzWDQ i2RgEM7usYIr31dkiNp/orltJNGVt3WMBoUIMNY1MmGxOURQTs3zk70kVK5RZh1H 7LC14IrOAq3RWl8MswNsnpwDE6L94T+5SnC02IAoAAA6VcwkK9OafoYQLIavuct+ PkiBAoGBALX9W+9VFrW+82yihFnKKKj2OA7/vTI80Uk5dycOWixH0b+Js5cKvC4h trqAkGZBgAJ7E4XhbXNIhArKiBTPKRKvEg6LAi8nv//VsRJj8W7c7no3jgteTGWh iXlRjhF23zx7XRx09149pydi1gAShdt3oCr/QCLoRYfwQnwYmOlG -----END RSA PRIVATE KEY----- jwk { kty: 'RSA', n: 'l6wsXPyHx_xwFYB_pM8KGQNRMcUsmdSU39nciZpKV-jlnE0qjmQAjnUTzBztNRZ-6Jmil8rIhVxBGIm7MqSr0wFjro4hs2ElSkUgrZsyRcaNmWSmqNo-jn6ZChDbAvOsFt84HGbJSrykRT-jwkUegQe8qxUdIrsqDfOYFHLY6oAWiDzyT1NSMLcGi9UxjOja_boz263gFB-EOOHHLUKVIzjPSgEpX0PUcHI8PTh1qGI0T9MbODHq0cXPKV5qhRJNPSBMi_s7sqvMJ_1rjWKTwL_YFCriWodoAME6eqDyecD96LXwIhZZDyYgZby_rdCCuVKkc3L6-iFQc2CeQDOSfw', e: 'AQAB', d: 'ficYpybsEOzolRnSEVSbg3581Da6CCEGysG8az9HwqLWCBEu6kxHIjZDByywJ83UNMdEs5hY_INlKXG1oEPTHqgzLwbNBRQyHfotWfiR8fNZ51IORLdx_LdTt0mZwHTImCWF2CmuF1mcEHUEUhuHaa7zwCDJoQ-nxP7taWS1AyXKyHi-YMlqJuKzx22HDMPSI8ylrrqzyP5u4uFP0Zsf49oN13MqcsclZltwvkZvqPH11kupSjFh4JWg-ZNkncI_ooIH44Ot5ZtQPxBgIOAxA7rcOEk7_CCwFduZIRO8sMzGvo8QuI6T7Cgfv3dA-PoNsdz7JDJ0oxfNT6lCOHd9UQ', p: 'xxjk8LGV31EucNwAlMYyynJfLIaX4fgcdriIKj6sqkMD5g4o_1WrTQMqWjYAtbOowv9qgYor3ba40UmloasBVTdXbVFqlYnHafkbIb7TvI7C2xMwqxn6CU2-EwMXUpd3_ouhwVasmm6fH9ptOdxdHkDaFJncDo-bDPHsH8qStt0', q: 'wwVqEIsiSP1JK8X4-DamcLDINnCm4hLL7Vf_bgLBwYPNBOEHxGrXUaCeJBbB3Igbr_ZybVZR9pdim9-bfNSpUCRcFUIUzuF5IzZUWTlS-LpTLTYnBwhci5gaf_2bH9bRrurpHGVawGOzFTXQG5NQECbt2qhpL6k86eRK4nJjows', dp: 'H1SKilnXtMmonjfwm3jI-1SeJ3qSoguSJxiIzOUJ9M0Q6v3lc7C-gSLzYjjHSdCYyP66euIMXxpm4QBO4S7wycEor9o1BI0m5UU_AMNvvGdWwHS3nuU6lIY4V_OPkv6k8lh0vuDtzmuD_NY5g_ZqbN1VtBI2L9BnXNUhDCurhL0', dq: 'HeZ2nJK4bvhmf4-a3HOEkUKJb89VxtOa8IjNYNCLZGAQzu6xgivfV2SI2n-iuW0k0ZW3dYwGhQgw1jUyYbE5RFBOzfOTvSRUrlFmHUfssLXgis4CrdFaXwyzA2yenAMTov3hP7lKcLTYgCgAADpVzCQr05p-hhAshq-5y34-SIE', qi: 'tf1b71UWtb7zbKKEWcooqPY4Dv-9MjzRSTl3Jw5aLEfRv4mzlwq8LiG2uoCQZkGAAnsTheFtc0iECsqIFM8pEq8SDosCLye__9WxEmPxbtzuejeOC15MZaGJeVGOEXbfPHtdHHT3Xj2nJ2LWABKF23egKv9AIuhFh_BCfBiY6UY', kid: 'S9o7VtYAFTMX5o1rZbskgvyEVfpo17qEi2mIHU9eUQs' } csr -----BEGIN CERTIFICATE REQUEST----- MIICkjCCAXoCAQAwHTEbMBkGA1UEAwwSYXV0aC56ZWRkbWFsYW0uY29tMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUs mdSU39nciZpKV+jlnE0qjmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4h s2ElSkUgrZsyRcaNmWSmqNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUd IrsqDfOYFHLY6oAWiDzyT1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEp X0PUcHI8PTh1qGI0T9MbODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCri WodoAME6eqDyecD96LXwIhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQAB oDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNVHREEFjAUghJhdXRoLnplZGRtYWxhbS5j b20wDQYJKoZIhvcNAQELBQADggEBAAXtVuXMC4g8XngyG0oKDrkNAu2swr7egodQ YfsvJTzqzt1wj3chIlBwqDweVKZ8jGggt6XfA5cSqc2VMxZkPNvc0NdL/qGJsCJC 5sSXKxvHjH9W0j8kTOOOLmK5fuuZ7KBkVohP1rdm+B4S1LNgB6dfNHgnZ65qgY1W jdQ3Cr9w1OPc8gquvNyXZ8iftbq+77P3k0Z8El8sxtJc+TEMXSC3xGx8MmhEa8KK VA4t6+yUDvK9BcxtK5oQ7Uk8jOZ41f+eKGY6zhTFe3jJRbyCoVpRWAvqYDuyWvEK 8Mt/zoBXBBqGpITI3LT3rbozyI9H/BsF1sWnEmU8WoWr6BaI5hk= -----END CERTIFICATE REQUEST----- validating domain authorization for auth.zeddmalam.com {"account":{"key":{"kty":"EC","crv":"P-256","x":"LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw","y":"S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw","kid":"https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086"},"contact":["mailto:zedd_0000@yahoo.com"],"initialIp":"95.91.246.0","createdAt":"2020-08-31T21:31:52.682665841Z","status":"valid"},"accountKey":{"kty":"EC","crv":"P-256","x":"LSJgpM86GZIHt2U-ghU34HFn29pDvVANi6xkIQGJAyw","y":"S4yFAPliYz_7x7S8i3WLVbGu_fop_NOFqkeBe3zRXxw","kid":"https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086"},"csr":"-----BEGIN CERTIFICATE REQUEST-----\nMIICkjCCAXoCAQAwHTEbMBkGA1UEAwwSYXV0aC56ZWRkbWFsYW0uY29tMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6wsXPyHx/xwFYB/pM8KGQNRMcUs\nmdSU39nciZpKV+jlnE0qjmQAjnUTzBztNRZ+6Jmil8rIhVxBGIm7MqSr0wFjro4h\ns2ElSkUgrZsyRcaNmWSmqNo+jn6ZChDbAvOsFt84HGbJSrykRT+jwkUegQe8qxUd\nIrsqDfOYFHLY6oAWiDzyT1NSMLcGi9UxjOja/boz263gFB+EOOHHLUKVIzjPSgEp\nX0PUcHI8PTh1qGI0T9MbODHq0cXPKV5qhRJNPSBMi/s7sqvMJ/1rjWKTwL/YFCri\nWodoAME6eqDyecD96LXwIhZZDyYgZby/rdCCuVKkc3L6+iFQc2CeQDOSfwIDAQAB\noDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNVHREEFjAUghJhdXRoLnplZGRtYWxhbS5j\nb20wDQYJKoZIhvcNAQELBQADggEBAAXtVuXMC4g8XngyG0oKDrkNAu2swr7egodQ\nYfsvJTzqzt1wj3chIlBwqDweVKZ8jGggt6XfA5cSqc2VMxZkPNvc0NdL/qGJsCJC\n5sSXKxvHjH9W0j8kTOOOLmK5fuuZ7KBkVohP1rdm+B4S1LNgB6dfNHgnZ65qgY1W\njdQ3Cr9w1OPc8gquvNyXZ8iftbq+77P3k0Z8El8sxtJc+TEMXSC3xGx8MmhEa8KK\nVA4t6+yUDvK9BcxtK5oQ7Uk8jOZ41f+eKGY6zhTFe3jJRbyCoVpRWAvqYDuyWvEK\n8Mt/zoBXBBqGpITI3LT3rbozyI9H/BsF1sWnEmU8WoWr6BaI5hk=\n-----END CERTIFICATE REQUEST-----","domains":["auth.zeddmalam.com"],"challenges":{"http-01":{}}} init { type: '*', request: [Function] } Add Key Auth URL { challenge: { identifier: { type: 'dns', value: 'auth.zeddmalam.com' }, challenges: [ [Object], [Object] ], expires: '2020-09-02T21:31:13.786Z', wildcard: undefined, type: 'http-01', status: 'pending', url: 'https://acme-staging-v02.example.com/0', token: 'test-01dde381fd40cd78979402137d88085a-0', hostname: 'auth.zeddmalam.com', altname: 'auth.zeddmalam.com', thumbprint: 'Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs', keyAuthorization: 'test-01dde381fd40cd78979402137d88085a-0.Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs', challengeUrl: 'http://auth.zeddmalam.com/.well-known/acme-challenge/test-01dde381fd40cd78979402137d88085a-0' } } /.well-known/acme-challenge/test-01dde381fd40cd78979402137d88085a-0 Remove Key Auth URL { challenge: { identifier: { type: 'dns', value: 'auth.zeddmalam.com' }, challenges: [ [Object], [Object] ], expires: '2020-09-02T21:31:13.786Z', wildcard: undefined, type: 'http-01', status: 'pending', url: 'https://acme-staging-v02.example.com/0', token: 'test-01dde381fd40cd78979402137d88085a-0', hostname: 'auth.zeddmalam.com', altname: 'auth.zeddmalam.com', thumbprint: 'Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs', keyAuthorization: 'test-01dde381fd40cd78979402137d88085a-0.Af_8JzHnLUqbh1Q-RUYeyP_AJQUVcfHaau_TlNvPjKs', challengeUrl: 'http://auth.zeddmalam.com/.well-known/acme-challenge/test-01dde381fd40cd78979402137d88085a-0' } } certificate_order { account: { key: { kid: 'https://acme-staging-v02.api.letsencrypt.org/acme/acct/15415086' } }, subject: 'auth.zeddmalam.com', altnames: [ 'auth.zeddmalam.com' ], challengeTypes: [ 'http-01' ] } (node:63592) UnhandledPromiseRejectionWarning: Error: error:0909006C:PEM routines:get_name:no start line at Sign.sign (internal/crypto/sig.js:80:26) at /Users/zedd/Projects/zeddmalam.com/auth.zeddmalam.com/api/node_modules/@root/keypairs/lib/node/keypairs.js:13:59 at process._tickCallback (internal/process/next_tick.js:68:7) ``` as you can see, cert was generated also with your lib. Could you please help with this? Thank you very much indeed Cheers D
Sign in to join this conversation.
No Label
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: root/acme.js#8
No description provided.