Skip to content

Commit 35ce725

Browse files
committed
Convert node-forge CA to @peculiar, matching Mockttp
1 parent 46f3524 commit 35ce725

5 files changed

Lines changed: 242 additions & 169 deletions

File tree

package-lock.json

Lines changed: 3 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
"homepage": "https://github.com/httptoolkit/testserver#readme",
3232
"dependencies": {
3333
"@httptoolkit/util": "^0.1.2",
34+
"@peculiar/asn1-schema": "^2.6.0",
35+
"@peculiar/asn1-x509": "^2.6.0",
36+
"@peculiar/x509": "^1.14.3",
3437
"acme-client": "^5.4.0",
3538
"cookie": "^1.0.2",
3639
"lodash": "^4.17.21",
37-
"node-forge": "^1.3.2",
3840
"parse-multipart-data": "^1.5.0",
3941
"tsx": "^4.19.3"
4042
},
@@ -43,7 +45,6 @@
4345
"@types/lodash": "^4.17.0",
4446
"@types/mocha": "^10.0.6",
4547
"@types/node": "^22.15.30",
46-
"@types/node-forge": "^1.3.11",
4748
"chai": "^5.1.0",
4849
"destroyable-server": "^1.0.1",
4950
"mocha": "^10.8.2",

src/server.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ async function generateTlsConfig(options: ServerOptions) {
3838
certCache ? certCache.loadCache() : null
3939
]);
4040

41-
const ca = new LocalCA(caCert, certCache);
42-
const defaultCert = ca.generateCertificate(rootDomain);
41+
const ca = await LocalCA.create(caCert);
42+
const defaultCert = await ca.generateCertificate(rootDomain);
4343

4444
if (!options.acmeProvider) {
4545
console.log('Using self signed certificates');
@@ -48,11 +48,11 @@ async function generateTlsConfig(options: ServerOptions) {
4848
key: defaultCert.key,
4949
cert: defaultCert.cert,
5050
ca: caCert.cert,
51-
generateCertificate: (domain: string, mode?: CertMode) => {
52-
if (mode === 'self-signed') return ca.generateSelfSignedCertificate(domain);
53-
if (mode === 'expired') return ca.generateExpiredCertificate(domain);
51+
generateCertificate: async (domain: string, mode?: CertMode) => {
52+
if (mode === 'self-signed') return await ca.generateSelfSignedCertificate(domain);
53+
if (mode === 'expired') return await ca.generateExpiredCertificate(domain);
5454
// 'revoked' mode requires ACME - falls through to normal cert without it
55-
return ca.generateCertificate(domain);
55+
return await ca.generateCertificate(domain);
5656
},
5757
acmeChallenge: () => undefined // Not supported
5858
};
@@ -76,14 +76,14 @@ async function generateTlsConfig(options: ServerOptions) {
7676
key: defaultCert.key,
7777
cert: defaultCert.cert,
7878
ca: caCert.cert,
79-
generateCertificate: (domain: string, mode?: CertMode) => {
80-
if (mode === 'self-signed') return ca.generateSelfSignedCertificate(domain);
79+
generateCertificate: async (domain: string, mode?: CertMode) => {
80+
if (mode === 'self-signed') return await ca.generateSelfSignedCertificate(domain);
8181

8282
if (mode === 'expired') {
8383
// Try to get an actually-expired ACME cert; fall back to LocalCA if not expired yet
8484
const expiredAcmeCert = acmeCA.tryGetExpiredCertificateSync(rootDomain);
8585
if (expiredAcmeCert) return expiredAcmeCert;
86-
return ca.generateExpiredCertificate(domain);
86+
return await ca.generateExpiredCertificate(domain);
8787
}
8888

8989
if (mode === 'revoked') {
@@ -100,7 +100,7 @@ async function generateTlsConfig(options: ServerOptions) {
100100

101101
// If you use some other domain or the cert isn't immediately available, we fall back
102102
// to self-signed certs for now:
103-
return ca.generateCertificate(domain);
103+
return await ca.generateCertificate(domain);
104104
},
105105
acmeChallenge: (token: string) => acmeCA.getChallengeResponse(token)
106106
}

0 commit comments

Comments
 (0)