├── README.md ├── output.txt ├── .travis.yml ├── package.json ├── server.crt ├── server.key └── index.js /README.md: -------------------------------------------------------------------------------- 1 | # Testing STARTTLS 2 | -------------------------------------------------------------------------------- /output.txt: -------------------------------------------------------------------------------- 1 | Output with OpenSSL 0.9.8y 2 | 3 | Server bound 4 | Server secured 5 | Client secured 6 | Client received: Hello! 7 | Server received: World! -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.11" 4 | 5 | before_script: 6 | - openssl version 7 | 8 | notifications: 9 | email: 10 | recipients: 11 | - andris@kreata.ee 12 | on_success: change 13 | on_failure: change 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "version": "0.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node index.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/andris9/test.git" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/andris9/test/issues" 17 | }, 18 | "homepage": "https://github.com/andris9/test" 19 | } 20 | -------------------------------------------------------------------------------- /server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICYTCCAcoCCQDl53qKS6iIgDANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJF 3 | RTEOMAwGA1UECBMFSGFyanUxEDAOBgNVBAcTB1RhbGxpbm4xDzANBgNVBAoTBkty 4 | ZWF0YTESMBAGA1UEAxMJbG9jYWxob3N0MR8wHQYJKoZIhvcNAQkBFhBhbmRyaXNA 5 | a3JlYXRhLmVlMB4XDTEzMDMxOTA5NTcxNVoXDTE0MDMxOTA5NTcxNVowdTELMAkG 6 | A1UEBhMCRUUxDjAMBgNVBAgTBUhhcmp1MRAwDgYDVQQHEwdUYWxsaW5uMQ8wDQYD 7 | VQQKEwZLcmVhdGExEjAQBgNVBAMTCWxvY2FsaG9zdDEfMB0GCSqGSIb3DQEJARYQ 8 | YW5kcmlzQGtyZWF0YS5lZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwke9 9 | RYIa5uOTqOSwJHO3lQyT6p9v7g/NI6FckuvqerGThS+irvP4Nd9xuqGjRB2HBEgM 10 | QqSlPqYQ+pI5zcI3V3r1/A9OxSQoR9ar6obKsAfHiWP1u96mpiAZJudYLPud69RR 11 | 1/BoihM6t2FSvwGXO+q38wOLM9tBWgt5Ng68fM0CAwEAATANBgkqhkiG9w0BAQUF 12 | AAOBgQBZJBkf/piXM2Kl725w1ZESlt0m1DbpP55K3ZLLJEQ2IZxQ1wtWChl2duAe 13 | s9Hv5YGm1U44wDbzNXfqqgUIDJVwDzJlq8xtTbfUCJ8HtDKLqH7rGIgDArdtwACZ 14 | bOW7J6ei0ZDhtyDnc9eHB5CT8bgTR1VkMlx3v/bPSCEmTiRJNA== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIICXgIBAAKBgQDCR71Fghrm45Oo5LAkc7eVDJPqn2/uD80joVyS6+p6sZOFL6Ku 3 | 8/g133G6oaNEHYcESAxCpKU+phD6kjnNwjdXevX8D07FJChH1qvqhsqwB8eJY/W7 4 | 3qamIBkm51gs+53r1FHX8GiKEzq3YVK/AZc76rfzA4sz20FaC3k2Drx8zQIDAQAB 5 | AoGARhUM4LsLK0ji5iUAqVWY3sp3vUYgYVcP4A+ATnuNzQ6rsXq6i7P0ULK22uUd 6 | +R9Rqii3S38LIOtU6p6+/UtXHLUxnNqGKx/6mSamKhv01UgqN65Laq1pCX40Wjgj 7 | k5R1wdkwQG+DOj+L6mPxnp92Stn+PYPCUqYpK1qLvPu7X2ECQQDvRToiJ0XRLLxa 8 | pz4eAUeN4KJWBJRIT+GZzx27qB3aAr6UT0ccXLmhYBl3AUNYcWyDdAp+ZoX+CQuZ 9 | yEc1Xob1AkEAz904LHgZSMNrKIPhU93Og7fXypY3Smlci5jPQ7rCxzGz0XWUslne 10 | pL8wRtwa8DpTufDj8Ihfw0E8BxUG+yYHeQJBAIL/quFSESaB0KntUNQKrUtfRmHD 11 | 5g9lNMYKIGRCmf1nbUIz2WIM3lEdFTQTi/SbPOcHnEsyBIBeIWzTuzDcDRUCQQDC 12 | 2cKgnOxGszkuP4Hn1hKSkrFsLKgjzuR7z4DrIpUXmNXRUYFUNr5ofPhKVGXEL0jx 13 | Eoj5nzz1kZ8tnF5w61MxAkEAmJYV3PN/V4pTqX/bnNwQWUAQfrDBdkjw2RAAUtbY 14 | MnunBSguCrxmQEKo/zomkZZ/R7/WpJyGZxN90SHa8mZJJA== 15 | -----END RSA PRIVATE KEY----- 16 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var tls = require("tls"), 2 | net = require("net"), 3 | crypto = require("crypto"), 4 | fs = require("fs"), 5 | credentials = crypto.createCredentials({ 6 | key: fs.readFileSync(__dirname + "/server.key", "utf-8"), 7 | cert: fs.readFileSync(__dirname + "/server.crt", "utf-8") 8 | }); 9 | 10 | var server = net.createServer(function(socket){ 11 | 12 | var secure = new tls.TLSSocket(socket, { 13 | credentials: credentials, 14 | isServer: true, 15 | rejectUnauthorized: false 16 | }); 17 | 18 | secure.on("data", function(chunk){ 19 | console.log("Server received: " + chunk.toString().trim()); 20 | secure.end(); 21 | server.close(); 22 | }); 23 | 24 | secure.on("secure", function(){ 25 | console.log("Server secured"); 26 | secure.write("Hello!\r\n"); 27 | }); 28 | 29 | }); 30 | 31 | server.listen(8124, function(){ 32 | console.log('Server bound'); 33 | 34 | var client = net.connect({port: 8124}, function(){ 35 | 36 | var secure = tls.connect({ 37 | socket: client, 38 | rejectUnauthorized: false 39 | }); 40 | 41 | secure.on("data", function(chunk){ 42 | console.log("Client received: " + chunk.toString().trim()); 43 | secure.write("World!\r\n"); 44 | }); 45 | 46 | secure.on("secure", function(){ 47 | console.log("Client secured"); 48 | }); 49 | 50 | }); 51 | }); 52 | --------------------------------------------------------------------------------