mirror of https://github.com/lukechilds/node.git
Browse Source
0-dns-cert.pem and 0-dns-key.pem were stored in `test/fixtures/key` directory, but the cert file cannot be created with the openssl command via Makefile. Added a script to create it with using `asn1.js` and `asn1.js-rfc5280` and moved them out of key directory and put into `test/fixtures/0-dns`. The domains listed in the cert were also changed into example.com and example.org to show the use for only testing. Fixes: https://github.com/nodejs/node/issues/10228 PR-URL: https://github.com/nodejs/node/pull/11579 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>v6.x
committed by
Myles Borins
9 changed files with 170 additions and 51 deletions
@ -0,0 +1,19 @@ |
|||||
|
-----BEGIN CERTIFICATE----- |
||||
|
MIIDGDCCAgCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5jYS5l |
||||
|
eGFtcGxlLmNvbTAeFw0xNzAzMDIwMTMxMjJaFw0yNzAyMjgwMTMxMjJaMBsxGTAX |
||||
|
BgNVBAMTEGV2aWwuZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw |
||||
|
ggEKAoIBAQDFyJT0kv2P9L6iNY6TL7IZonAR8R9ev7iD1tR5ycMEpM/y6WTefIco |
||||
|
civMcBGVZWtCgkoePHiveH9UIep7HFGB4gxCYDZFYB46yGS0YH2fB5GWXTLYObYa |
||||
|
zxuEhgFRG0DLIwNDRLW0+0FG3disp7YdRHBtdbL58F/qNORqPEjIpoQxOJc2UqX2 |
||||
|
/gfomJRdFW/PSgN7uH2QwMzRQRIrKmyAFzeuEWVP+UAV4853Yg66PmYpAASyt069 |
||||
|
sE8QNTNE75KrerMmYzH7AmTEGvY8bukrDuVQZce2/lcK2rAE+G6at2eBNMZKOnzR |
||||
|
y9kWIiJ3rR7+WK55EKelLz0doZFKteu1AgMBAAGjaTBnMGUGA1UdEQReMFyCImdv |
||||
|
b2QuZXhhbXBsZS5vcmcALmV2aWwuZXhhbXBsZS5jb22CGGp1c3QtYW5vdGhlci5l |
||||
|
eGFtcGxlLmNvbYcECAgICIcECAgEBIIQbGFzdC5leGFtcGxlLmNvbTANBgkqhkiG |
||||
|
9w0BAQsFAAOCAQEAvreVoOZO2gpM4Dmzp70D30XZjsK9i0BCsRHBvPLPw3y8B2xg |
||||
|
BRtOREOI69NU0WGpj5Lbqww5M8M1hjHshiGEu2aXfZ6qM3lENaIMCpKlF9jbm02/ |
||||
|
wmxNaAnS8bDSZyO5rbsGr2tJb4ds7DazmMEKWhOBEpJoOp9rG6SAey+a6MkZ7NEN |
||||
|
0p3THCqNf3lL1KblPrMvdsyhHPEzv4uT7+YAnLKHwGzbihcWJRsRo5oipWL8ZDhn |
||||
|
bd3SMWtfRTSWDmghJaHke2xIjDtTwSjHjjPTFsK+rl227W8r4/EQI/X6fTQV2j3T |
||||
|
7zqrJLF9h9F/v3mo57k6sxsQNZ12XvhuTHC2dA== |
||||
|
-----END CERTIFICATE----- |
@ -0,0 +1,27 @@ |
|||||
|
-----BEGIN RSA PRIVATE KEY----- |
||||
|
MIIEowIBAAKCAQEAxciU9JL9j/S+ojWOky+yGaJwEfEfXr+4g9bUecnDBKTP8ulk |
||||
|
3nyHKHIrzHARlWVrQoJKHjx4r3h/VCHqexxRgeIMQmA2RWAeOshktGB9nweRll0y |
||||
|
2Dm2Gs8bhIYBURtAyyMDQ0S1tPtBRt3YrKe2HURwbXWy+fBf6jTkajxIyKaEMTiX |
||||
|
NlKl9v4H6JiUXRVvz0oDe7h9kMDM0UESKypsgBc3rhFlT/lAFePOd2IOuj5mKQAE |
||||
|
srdOvbBPEDUzRO+Sq3qzJmMx+wJkxBr2PG7pKw7lUGXHtv5XCtqwBPhumrdngTTG |
||||
|
Sjp80cvZFiIid60e/liueRCnpS89HaGRSrXrtQIDAQABAoIBABcGA3j5B3VTi0F8 |
||||
|
tI0jtzrOsvcTt5AjB0qpnnBS8VXADcj8LFbN7jniGIEi5pkahkLmwdQFPBNJFqFn |
||||
|
lVEheceB1eWAJ7EpwDsdisOIm/cAPY1gagPLrAww4cYqh0q2vnMnL0EMZY6c1Pt3 |
||||
|
5borh8KebewAEIaR2ch8wb4wKFTbAM0DftYBFzHAF88OeCuIpdsk2Tz0sVQbA3/1 |
||||
|
XNLOVcJvDOVIRPEpo2l7RIN33KvDhzpMoV3qVzWxqdccPRZZFU5KmJ6DtouIPT3S |
||||
|
3WauIL5oVpAyYNJETTyxjBQE4DgFeNX1Wyycgk27EoLcn6Trcs0kNVrmXXblNAtJ |
||||
|
Nko6g10CgYEA+TjzNjyAXPrOpY88uiPVMAgepEQOnDYtMwasdDVaW3xK9KH1rrhU |
||||
|
dx1IDTMmOUfyU2qsj5txmJtReQz//1bpd7e73VO8mHQDUubhs2TivgGs+fqzAdmT |
||||
|
vJsjerfNsxf+4JENzzWmqT/Ybc976Tu55VH5mcRG9Q66fTxdAJ51+8MCgYEAyymF |
||||
|
gntRMBd9e/KIiqlvcxelo0ahyKEzaJC7/FkZotuSB+kAwpdJ5Unb0FeVQZxNhDPg |
||||
|
xgsrGOOOvHvfhv7DPU0TQ/vp6VDPdg+N6m/Ow2vr79A2v6s+7gZj3MLiLRFyEF6l |
||||
|
bxQNGe3qavnm3owUQQCY2RLBKYCFfv/cykYlGycCgYB6etKMRQ+QonIMS2i80f9j |
||||
|
q5njgM7tVnLAMPdv5QiTDXKI50+mnlBkea9/TTPr0r/03ugPa4VYSnyv0QO+qSfz |
||||
|
/ggFrbFx+xHnHDCvyVTlrE0mTV7L+fHxLw0wskQVUCWil6cBvow5gXcMAHwVE5U4 |
||||
|
biEMwLlele5wvcm3FClHoQKBgACV/RGUQ3atCqqZ13T26iBd2Bdxc7P9awWJLVGb |
||||
|
/CvxECm/rUXiY88qeFzQc9i9l6ei8qn/jD9FILtAbDOadnutxjly94i5t+9yOgmM |
||||
|
Cv+bRxHo+s9wsfzDvfP8B+TzYO3VKAr69tK1UfC/CcBojQJm+wndOPtiqH/mQv++ |
||||
|
VgsPAoGBAJ0aNJe3zb+blvAQ3W4iPSjhyxdMC00x46pr6ds+Y8WygbN6lzCvNDw6 |
||||
|
FFTINBckOs5Z/UWUNbExWYjBHZhLlhhxTezCzvIrwNvgUB8Y4sPk3S4KDsnkyy6f |
||||
|
/qMmEHlVyKjh2BCNs7PVnWDlfl3vECE7n8dBizFHgja76l1ia+0z |
||||
|
-----END RSA PRIVATE KEY----- |
Binary file not shown.
@ -0,0 +1,26 @@ |
|||||
|
## Purpose |
||||
|
The test cert file for use `test/parallel/test-tls-0-dns-altname.js` |
||||
|
can be created by using `asn1.js` and `asn1.js-rfc5280`, |
||||
|
|
||||
|
## How to create a test cert. |
||||
|
|
||||
|
```sh |
||||
|
$ openssl genrsa -out 0-dns-key.pem 2048 |
||||
|
Generating RSA private key, 2048 bit long modulus |
||||
|
...................+++ |
||||
|
..............................................................................................+++ |
||||
|
e is 65537 (0x10001) |
||||
|
$ openssl rsa -in 0-dns-key.pem -RSAPublicKey_out -outform der -out 0-dns-rsapub.der |
||||
|
writing RSA key |
||||
|
$ npm install |
||||
|
0-dns@1.0.0 /home/github/node/test/fixtures/0-dns |
||||
|
+-- asn1.js@4.9.1 |
||||
|
| +-- bn.js@4.11.6 |
||||
|
| +-- inherits@2.0.3 |
||||
|
| `-- minimalistic-assert@1.0.0 |
||||
|
`-- asn1.js-rfc5280@1.2.2 |
||||
|
|
||||
|
$ node ./createCert.js |
||||
|
$ openssl x509 -text -in 0-dns-cert.pem |
||||
|
(You can not see evil.example.com in subjectAltName field) |
||||
|
``` |
@ -0,0 +1,75 @@ |
|||||
|
'use strict'; |
||||
|
const asn1 = require('asn1.js'); |
||||
|
const crypto = require('crypto'); |
||||
|
const fs = require('fs'); |
||||
|
const rfc5280 = require('asn1.js-rfc5280'); |
||||
|
const BN = asn1.bignum; |
||||
|
|
||||
|
const id_at_commonName = [ 2, 5, 4, 3 ]; |
||||
|
const rsaEncryption = [1, 2, 840, 113549, 1, 1, 1]; |
||||
|
const sha256WithRSAEncryption = [1, 2, 840, 113549, 1, 1, 11]; |
||||
|
const sigalg = 'RSA-SHA256'; |
||||
|
|
||||
|
const private_key = fs.readFileSync('./0-dns-key.pem'); |
||||
|
// public key file can be generated from the private key with
|
||||
|
// openssl rsa -in 0-dns-key.pem -RSAPublicKey_out -outform der
|
||||
|
// -out 0-dns-rsapub.der
|
||||
|
const public_key = fs.readFileSync('./0-dns-rsapub.der'); |
||||
|
|
||||
|
const now = Date.now(); |
||||
|
const days = 3650; |
||||
|
|
||||
|
const Null_ = asn1.define('Null_', function() { |
||||
|
this.null_(); |
||||
|
}); |
||||
|
const null_ = Null_.encode('der'); |
||||
|
|
||||
|
const PrintStr = asn1.define('PrintStr', function() { |
||||
|
this.printstr(); |
||||
|
}); |
||||
|
const issuer = PrintStr.encode('ca.example.com', 'der'); |
||||
|
const subject = PrintStr.encode('evil.example.com', 'der'); |
||||
|
|
||||
|
const tbs = { |
||||
|
version: 'v3', |
||||
|
serialNumber: new BN('01', 16), |
||||
|
signature: { algorithm: sha256WithRSAEncryption, parameters: null_}, |
||||
|
issuer: { type: 'rdnSequence', |
||||
|
value: [ [{type: id_at_commonName, value: issuer}] ] }, |
||||
|
validity: |
||||
|
{ notBefore: { type: 'utcTime', value: now }, |
||||
|
notAfter: { type: 'utcTime', value: now + days * 86400000} }, |
||||
|
subject: { type: 'rdnSequence', |
||||
|
value: [ [{type: id_at_commonName, value: subject}] ] }, |
||||
|
subjectPublicKeyInfo: |
||||
|
{ algorithm: { algorithm: rsaEncryption, parameters: null_}, |
||||
|
subjectPublicKey: { unused: 0, data: public_key} }, |
||||
|
extensions: |
||||
|
[ { extnID: 'subjectAlternativeName', |
||||
|
critical: false, |
||||
|
// subjectAltName which contains '\0' character to check CVE-2009-2408
|
||||
|
extnValue: [ |
||||
|
{ type: 'dNSName', value: 'good.example.org\u0000.evil.example.com' }, |
||||
|
{ type: 'dNSName', value: 'just-another.example.com' }, |
||||
|
{ type: 'iPAddress', value: Buffer.from('08080808', 'hex') }, |
||||
|
{ type: 'iPAddress', value: Buffer.from('08080404', 'hex') }, |
||||
|
{ type: 'dNSName', value: 'last.example.com' } ] } |
||||
|
] |
||||
|
}; |
||||
|
|
||||
|
const tbs_der = rfc5280.TBSCertificate.encode(tbs, 'der'); |
||||
|
|
||||
|
const sign = crypto.createSign(sigalg); |
||||
|
sign.update(tbs_der); |
||||
|
const signature = sign.sign(private_key); |
||||
|
|
||||
|
const cert = { |
||||
|
tbsCertificate: tbs, |
||||
|
signatureAlgorithm: { algorithm: sha256WithRSAEncryption, parameters: null_ }, |
||||
|
signature: |
||||
|
{ unused: 0, |
||||
|
data: signature } |
||||
|
}; |
||||
|
const pem = rfc5280.Certificate.encode(cert, 'pem', {label: 'CERTIFICATE'}); |
||||
|
|
||||
|
fs.writeFileSync('./0-dns-cert.pem', pem + '\n'); |
@ -0,0 +1,16 @@ |
|||||
|
{ |
||||
|
"name": "0-dns", |
||||
|
"version": "1.0.0", |
||||
|
"description": "create certificate for 0-dns test", |
||||
|
"main": "createCert.js", |
||||
|
"scripts": { |
||||
|
"test": "echo \"Error: no test specified\" && exit 1" |
||||
|
}, |
||||
|
"author": "", |
||||
|
"license": "SEE LICENSE IN ../../../LICENSE", |
||||
|
"private": true, |
||||
|
"dependencies": { |
||||
|
"asn1.js": "^4.9.1", |
||||
|
"asn1.js-rfc5280": "^1.2.2" |
||||
|
} |
||||
|
} |
@ -1,19 +0,0 @@ |
|||||
-----BEGIN CERTIFICATE----- |
|
||||
MIIC/zCCAemgAwIBAgICJxEwCwYJKoZIhvcNAQEFMBUxEzARBgNVBAMWCm9oLm15 |
|
||||
Lmdvc2gwHhcNMTQxMjA4MTM0MTUzWhcNMzQxMjAzMTM0MTUzWjATMREwDwYDVQQD |
|
||||
FghldmlsLmNvbTCCASAwCwYJKoZIhvcNAQEBA4IBDwAwggEKAoIBAQCsFwwf1dsr |
|
||||
PdxyTHBreymbFGACLQtaOihGsSkYtIzUEF1aT90YDMzNdoLr4wkwWig5FPRMnjmX |
|
||||
7pXY9RVbWmwG/M2eku9S62LekUFkeY1W/QftV9LYgAg7wVDA+v3+zk/EMEqADYm6 |
|
||||
W735tzDIKtvx+/3Dd9puQ0TLFNHBxAmTz7YNaJdIUqzs3DWT4zeZQj0RCOyWCjQL |
|
||||
NfqQ80I7NYFYb4IJqiUY8iOTL5kPi7b5szem5EakQbhufDWun4xGTZk/URZHgYgp |
|
||||
REbOLTYs2hqbK76biW/Yvwd1l7RsptIvJvkuQ1R/dO1WPv6PLKLTuS1EOHM3YqNH |
|
||||
o7wDSplOJe5rAgMBAAGhCQMHADEyMzQ1NqIJAwcANzg5YWJjo0swSTBHBgNVHREE |
|
||||
QDA+ghRnb29nbGUuY29tAC5ldmlsLmNvbYIQanVzdC1hbm90aGVyLmNvbYcECAgI |
|
||||
CIcECAgEBIIIbGFzdC5jb20wCwYJKoZIhvcNAQEBA4IBAQBAC2n4CIXLnyONTjPc |
|
||||
qU0wu41wI+IQlb9mi0C7WEd9HumCbskahAp8vTs35DehnSxrl15FG0rABVtTROCv |
|
||||
eflBKuzwPjtnfZm37UIbQKQUtcxwMQ/zvA83w4GLrLvrFtaQRpXn/RtL/q4CIpQH |
|
||||
MGaPW1Gs24RVBHxI7OXf9UlUruB1yQLUbbtdBtxZ6pk/B32e3yWowbvG7OxuUL0F |
|
||||
1w4DD2m+GfbTyZSCfYKP/zMp3xhTxihVfZ2g07ufc51bNCftWKBLHM/QHJmn4pVo |
|
||||
rrz1vS9nMf/i16zrJ8Xmj61Eo4Aes37lAH5kUiT1VsNxSDcQCiqr1mcj6ByXKNCQ |
|
||||
wDzO |
|
||||
-----END CERTIFICATE----- |
|
@ -1,27 +0,0 @@ |
|||||
-----BEGIN RSA PRIVATE KEY----- |
|
||||
MIIEowIBAAKCAQEArBcMH9XbKz3cckxwa3spmxRgAi0LWjooRrEpGLSM1BBdWk/d |
|
||||
GAzMzXaC6+MJMFooORT0TJ45l+6V2PUVW1psBvzNnpLvUuti3pFBZHmNVv0H7VfS |
|
||||
2IAIO8FQwPr9/s5PxDBKgA2Julu9+bcwyCrb8fv9w3fabkNEyxTRwcQJk8+2DWiX |
|
||||
SFKs7Nw1k+M3mUI9EQjslgo0CzX6kPNCOzWBWG+CCaolGPIjky+ZD4u2+bM3puRG |
|
||||
pEG4bnw1rp+MRk2ZP1EWR4GIKURGzi02LNoamyu+m4lv2L8HdZe0bKbSLyb5LkNU |
|
||||
f3TtVj7+jyyi07ktRDhzN2KjR6O8A0qZTiXuawIDAQABAoIBABUlW9sJlz3QAyeU |
|
||||
VvgOEUW6EjYSPOPgY5SULl2XyfpA7IetapiK8huJJXtA0Z88ZNbmyUIk6yTNL2KS |
|
||||
cwZfrQiKxeVnXrsMq4B3ztY+zWxT+UZj1Ue/K8PT9E1SSiWmSkzsNitX/oWEwmpN |
|
||||
5VOjWJV6hmsfbhrAb1KZA1FQ+nBMEQrkEFpmFD1nJE8dH5rWNo4YbM/boR/kC93G |
|
||||
CHOwd2TKNrBa8ZeMOjcyUK9fg15CMkj7uTzfIGkjCM/mXOxvsvTuZ0np7PL7aF+o |
|
||||
GfSHP/l+B5rxT1GTYjZtpSEgAoqYEFJnnZELklo7KRWB7p2rgyHPElSjQN3xIn5Z |
|
||||
apNPrBECgYEA26gZGBP+j1Hqrh3nAhOq/t6PMj+V8yz/i2TrraJ1z7GKRGoBUOX9 |
|
||||
ruJGJExfACzgrKl1hL4XRfLdHuooScUqrIxLX7eKHE2nBSd0M40zEKbgIMRhaMsf |
|
||||
lAFOkxJRHMT7edaVu3MkSfDgFXRbhr+jcdxspzhunHMJVUnC5LgAKHMCgYEAyJAw |
|
||||
6GF80Uud5oDHo2tGY9uYgMIUN9rmrrFjqstkVB6QMFlyyeI3MHUhiU7qH53yaRCi |
|
||||
FxuHU6usQFmduwZAKInoPMRhYTYbexe4CYB+C96trwoV7ltDE+a7ZTsEj5kSYvCO |
|
||||
KLcVTn4mcU0TSpE0MU1XQKP0Ev/mdZ5aYEopvCkCgYEAlkVa3YkYNq5g8btNRbN0 |
|
||||
4SYbKtIrYJChRpjFTyV8mZkpMYKf4dtmANWWDNEekP0iu5y25BgzzcvHkJW6+DTl |
|
||||
6+OS0Sm8V36cS79hFL99dt/jJyeSSGHl+ZgnTCBU02zDaefuya2M3vTmKGdREk9a |
|
||||
ntOglYnayjc85Fcw+M4UdZcCgYAFw/9j7smDysSzR6h1jjPr0vhDW1Dxeh1/kCHp |
|
||||
Wwd7U5WZjji6jQJBJlzccaRRXF0HoC7Is0Xkpd7BytG5+qgFglFmzc5u2PtZQolL |
|
||||
3KHC/ZfInGWdAIqhG9TvSA8Ngb0BkyDDEuBN7Vp1j12qmxoBANQtS4lMsoaRgwfe |
|
||||
FMO2YQKBgGv6Ndv+eHWSkqGFOSXU6dXAjOuAji3K1yRlxUg/RS/DCMK+8XQbuh47 |
|
||||
+p998LwvI70JIr4v2PAkO3/HaRILOTRLLvq8O/yqHwrVf+P7AQ8kPm7uUf7kTXat |
|
||||
DYcKIAp5ddZweyFCgwVm+JMd1E+cpL97RbHCbu7Ct6OD9uLGXCUh |
|
||||
-----END RSA PRIVATE KEY----- |
|
Loading…
Reference in new issue