Skip to content

Commit cae8639

Browse files
authored
fix: tls serial number causes illegal padding error (#2459)
This is a hack to work around PeculiarVentures/x509#74 until it is addressed upstream. It seems serial numbers starting with `80` cause `@peculiar/x509` to generate invalid certifiates that Node's `TLSSocket` then fails to parse, throwing an `ERR_OSSL_ASN1_ILLEGAL_PADDING` error, so the hack is to generate serial numbers until we get one that doesn't start with `80`. This can be reverted when the upstream issue is fixed.
1 parent 4fc0a7d commit cae8639

File tree

1 file changed

+14
-2
lines changed
  • packages/connection-encrypter-tls/src

1 file changed

+14
-2
lines changed

packages/connection-encrypter-tls/src/utils.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,7 @@ export async function generateCertificate (peerId: PeerId): Promise<{ cert: stri
153153
}
154154

155155
const selfCert = await x509.X509CertificateGenerator.createSelfSigned({
156-
serialNumber: uint8ArrayToString(crypto.getRandomValues(new Uint8Array(9)), 'base16'),
157-
name: '',
156+
serialNumber: generateSerialNumber(),
158157
notBefore: new Date(now - CERT_VALIDITY_PERIOD_FROM),
159158
notAfter: new Date(now + CERT_VALIDITY_PERIOD_TO),
160159
signingAlgorithm: alg,
@@ -186,6 +185,19 @@ export async function generateCertificate (peerId: PeerId): Promise<{ cert: stri
186185
}
187186
}
188187

188+
function generateSerialNumber (): string {
189+
// HACK: serial numbers starting with 80 generated by @peculiar/x509 don't
190+
// work with TLSSocket, remove when https://github.com/PeculiarVentures/x509/issues/74
191+
// is resolved
192+
while (true) {
193+
const serialNumber = (Math.random() * Math.pow(2, 52)).toFixed(0)
194+
195+
if (!serialNumber.startsWith('80')) {
196+
return serialNumber
197+
}
198+
}
199+
}
200+
189201
/**
190202
* @see https://github.com/libp2p/specs/blob/master/tls/tls.md#libp2p-public-key-extension
191203
*/

0 commit comments

Comments
 (0)