mirror of https://github.com/lukechilds/node.git
Greg Hughes
14 years ago
committed by
Ryan Dahl
8 changed files with 254 additions and 4 deletions
@ -0,0 +1,15 @@ |
|||||
|
-----BEGIN CERTIFICATE----- |
||||
|
MIICSDCCAbGgAwIBAgIJAND4S4oV8e77MA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNV |
||||
|
BAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzANBgNVBAoTBkpveWVu |
||||
|
dDEQMA4GA1UECxMHTm9kZS5qczEMMAoGA1UEAxMDY2EyMSAwHgYJKoZIhvcNAQkB |
||||
|
FhFyeUB0aW55Y2xvdWRzLm9yZzAeFw0xMTAxMjYyMzMzMjZaFw0xMTAyMjUyMzMz |
||||
|
MjZaMH0xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzAN |
||||
|
BgNVBAoTBkpveWVudDEQMA4GA1UECxMHTm9kZS5qczEPMA0GA1UEAxMGYWdlbnQ0 |
||||
|
MSAwHgYJKoZIhvcNAQkBFhFyeUB0aW55Y2xvdWRzLm9yZzBcMA0GCSqGSIb3DQEB |
||||
|
AQUAA0sAMEgCQQDAtcMgUqWCoCMI7ACMVbykoMbXvLwNHhB1/cApRFbXUd3SgDEz |
||||
|
RGKrqZkcT8I1b5IlUwWVQOzN7G8LHijrb05hAgMBAAGjFzAVMBMGA1UdJQQMMAoG |
||||
|
CCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4GBAAjwjr91RV7xLD4j+xB4Ab0iMRx3 |
||||
|
fIb/vizhnWOHMXHp/CuUZcm0k2/lZqlGpLIUbhuUuglol/GyMYpL0l+4usUU5ayQ |
||||
|
r5vOdRI5fo6WnwAlDvpLTJxN6exB3TxRqPu5WGI5t6NIDThJChpXXTuG9Auw+Lk+ |
||||
|
p+Q6Te22clo/XeUj |
||||
|
-----END CERTIFICATE----- |
@ -0,0 +1,10 @@ |
|||||
|
-----BEGIN CERTIFICATE REQUEST----- |
||||
|
MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH |
||||
|
EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD |
||||
|
EwZhZ2VudDQxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ |
||||
|
KoZIhvcNAQEBBQADSwAwSAJBAMC1wyBSpYKgIwjsAIxVvKSgxte8vA0eEHX9wClE |
||||
|
VtdR3dKAMTNEYqupmRxPwjVvkiVTBZVA7M3sbwseKOtvTmECAwEAAaAlMCMGCSqG |
||||
|
SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB |
||||
|
AB8lvAXSHFf+ABRubFGuTuJse8omIJ1vRXuhY345qiObEDPkSVOj4LYUjBlE6S3V |
||||
|
1TVdfQLBqcLJPY8zG66fjKI= |
||||
|
-----END CERTIFICATE REQUEST----- |
@ -0,0 +1,9 @@ |
|||||
|
-----BEGIN RSA PRIVATE KEY----- |
||||
|
MIIBOQIBAAJBAMC1wyBSpYKgIwjsAIxVvKSgxte8vA0eEHX9wClEVtdR3dKAMTNE |
||||
|
YqupmRxPwjVvkiVTBZVA7M3sbwseKOtvTmECAwEAAQI/EVBDN6Q1OoconqSVaAZL |
||||
|
7H6FXtyWCJeq4u7pVMvPAYkxe4MQOqAYmHCQlozJBOjwfpi/09KccZ7Ssi80Tc2d |
||||
|
AiEA3tOQX52YHptUdW5gSm4/y8dlhfita//SPkqexECYDF8CIQDdZmQtguBMvHS/ |
||||
|
Mjk5ypRo0mU4G8ZGL7ML1q0GMFKdPwIgP/+VvNCfq1LDrEK6Z0ZJDndDonntHVLJ |
||||
|
iNiXxxgiU5MCIFwrKxszN9NaRTPvYZlod14n8JFqJqHDa8NK7J798PabAiEAlwke |
||||
|
T6UdRvxUZPDW5XRUVftcDygFvF05Hfrr8ziVc88= |
||||
|
-----END RSA PRIVATE KEY----- |
@ -0,0 +1,21 @@ |
|||||
|
[ req ] |
||||
|
default_bits = 1024 |
||||
|
days = 36500 |
||||
|
distinguished_name = req_distinguished_name |
||||
|
attributes = req_attributes |
||||
|
prompt = no |
||||
|
|
||||
|
[ req_distinguished_name ] |
||||
|
C = US |
||||
|
ST = CA |
||||
|
L = SF |
||||
|
O = Joyent |
||||
|
OU = Node.js |
||||
|
CN = agent4 |
||||
|
emailAddress = ry@tinyclouds.org |
||||
|
|
||||
|
[ req_attributes ] |
||||
|
challengePassword = A challenge password |
||||
|
|
||||
|
[ ext_key_usage ] |
||||
|
extendedKeyUsage = clientAuth |
@ -1 +1 @@ |
|||||
D0F84B8A15F1EEF9 |
D0F84B8A15F1EEFB |
||||
|
@ -0,0 +1,153 @@ |
|||||
|
// There is a bug with 'openssl s_server' which makes it not flush certain
|
||||
|
// important events to stdout when done over a pipe. Therefore we skip this
|
||||
|
// test for all openssl versions less than 1.0.0.
|
||||
|
if (!process.versions.openssl || |
||||
|
parseInt(process.versions.openssl[0]) < 1) { |
||||
|
console.error("Skipping due to old OpenSSL version."); |
||||
|
process.exit(0); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
var common = require('../common'); |
||||
|
var join = require('path').join; |
||||
|
var net = require('net'); |
||||
|
var assert = require('assert'); |
||||
|
var fs = require('fs'); |
||||
|
var crypto = require('crypto'); |
||||
|
var tls = require('tls'); |
||||
|
var spawn = require('child_process').spawn; |
||||
|
|
||||
|
// FIXME: Avoid the common PORT as this test currently hits a C-level
|
||||
|
// assertion error with node_g. The program aborts without HUPing
|
||||
|
// the openssl s_server thus causing many tests to fail with
|
||||
|
// EADDRINUSE.
|
||||
|
var PORT = common.PORT + 5; |
||||
|
|
||||
|
var connections = 0; |
||||
|
|
||||
|
var keyfn = join(common.fixturesDir, 'keys', 'agent4-key.pem'); |
||||
|
var key = fs.readFileSync(keyfn).toString(); |
||||
|
|
||||
|
var certfn = join(common.fixturesDir, 'keys', 'agent4-cert.pem'); |
||||
|
var cert = fs.readFileSync(certfn).toString(); |
||||
|
|
||||
|
var server = spawn('openssl', ['s_server', |
||||
|
'-accept', PORT, |
||||
|
'-cert', certfn, |
||||
|
'-key', keyfn]); |
||||
|
server.stdout.pipe(process.stdout); |
||||
|
server.stderr.pipe(process.stdout); |
||||
|
|
||||
|
|
||||
|
var state = 'WAIT-ACCEPT'; |
||||
|
|
||||
|
var serverStdoutBuffer = ''; |
||||
|
server.stdout.setEncoding('utf8'); |
||||
|
server.stdout.on('data', function(s) { |
||||
|
serverStdoutBuffer += s; |
||||
|
console.error(state); |
||||
|
switch (state) { |
||||
|
case 'WAIT-ACCEPT': |
||||
|
if (/ACCEPT/g.test(serverStdoutBuffer)) { |
||||
|
// Give s_server half a second to start up.
|
||||
|
setTimeout(startClient, 500); |
||||
|
state = 'WAIT-HELLO'; |
||||
|
} |
||||
|
break; |
||||
|
|
||||
|
case 'WAIT-HELLO': |
||||
|
if (/hello/g.test(serverStdoutBuffer)) { |
||||
|
|
||||
|
// End the current SSL connection and exit.
|
||||
|
// See s_server(1ssl).
|
||||
|
server.stdin.write('Q'); |
||||
|
|
||||
|
state = 'WAIT-SERVER-CLOSE'; |
||||
|
} |
||||
|
break; |
||||
|
|
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
var timeout = setTimeout(function () { |
||||
|
server.kill(); |
||||
|
process.exit(1); |
||||
|
}, 5000); |
||||
|
|
||||
|
var gotWriteCallback = false; |
||||
|
var serverExitCode = -1; |
||||
|
|
||||
|
server.on('exit', function(code) { |
||||
|
serverExitCode = code; |
||||
|
clearTimeout(timeout); |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
function startClient() { |
||||
|
var s = new net.Stream(); |
||||
|
|
||||
|
var sslcontext = crypto.createCredentials({key: key, cert: cert}); |
||||
|
sslcontext.context.setCiphers('RC4-SHA:AES128-SHA:AES256-SHA'); |
||||
|
|
||||
|
var pair = tls.createSecurePair(sslcontext, false); |
||||
|
|
||||
|
assert.ok(pair.encrypted.writable); |
||||
|
assert.ok(pair.cleartext.writable); |
||||
|
|
||||
|
pair.encrypted.pipe(s); |
||||
|
s.pipe(pair.encrypted); |
||||
|
|
||||
|
s.connect(PORT); |
||||
|
|
||||
|
s.on('connect', function() { |
||||
|
console.log('client connected'); |
||||
|
}); |
||||
|
|
||||
|
pair.on('secure', function() { |
||||
|
console.log('client: connected+secure!'); |
||||
|
console.log('client pair.cleartext.getPeerCertificate(): %j', |
||||
|
pair.cleartext.getPeerCertificate()); |
||||
|
|
||||
|
// "TLS Web Client Authentication"
|
||||
|
assert.equal(pair.cleartext.getPeerCertificate().ext_key_usage.length, 1) |
||||
|
assert.equal(pair.cleartext.getPeerCertificate().ext_key_usage[0], '1.3.6.1.5.5.7.3.2') |
||||
|
|
||||
|
console.log('client pair.cleartext.getCipher(): %j', |
||||
|
pair.cleartext.getCipher()); |
||||
|
setTimeout(function() { |
||||
|
pair.cleartext.write('hello\r\n', function () { |
||||
|
gotWriteCallback = true; |
||||
|
}); |
||||
|
}, 500); |
||||
|
}); |
||||
|
|
||||
|
pair.cleartext.on('data', function(d) { |
||||
|
console.log('cleartext: %s', d.toString()); |
||||
|
}); |
||||
|
|
||||
|
s.on('close', function() { |
||||
|
console.log('client close'); |
||||
|
}); |
||||
|
|
||||
|
pair.encrypted.on('error', function(err) { |
||||
|
console.log('encrypted error: ' + err); |
||||
|
}); |
||||
|
|
||||
|
s.on('error', function(err) { |
||||
|
console.log('socket error: ' + err); |
||||
|
}); |
||||
|
|
||||
|
pair.on('error', function(err) { |
||||
|
console.log('secure error: ' + err); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
process.on('exit', function() { |
||||
|
assert.equal(0, serverExitCode); |
||||
|
assert.equal('WAIT-SERVER-CLOSE', state); |
||||
|
assert.ok(gotWriteCallback); |
||||
|
}); |
Loading…
Reference in new issue