1// Copyright Joyent, Inc. and other Node contributors. 2// 3// Permission is hereby granted, free of charge, to any person obtaining a 4// copy of this software and associated documentation files (the 5// "Software"), to deal in the Software without restriction, including 6// without limitation the rights to use, copy, modify, merge, publish, 7// distribute, sublicense, and/or sell copies of the Software, and to permit 8// persons to whom the Software is furnished to do so, subject to the 9// following conditions: 10// 11// The above copyright notice and this permission notice shall be included 12// in all copies or substantial portions of the Software. 13// 14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20// USE OR OTHER DEALINGS IN THE SOFTWARE. 21 22'use strict'; 23const common = require('../common'); 24const fixtures = require('../common/fixtures'); 25 26if (!common.hasCrypto) 27 common.skip('missing crypto'); 28 29const assert = require('assert'); 30const https = require('https'); 31 32// Assert that the IP-as-servername deprecation warning does not occur. 33process.on('warning', common.mustNotCall()); 34 35const options = { 36 key: fixtures.readKey('agent1-key.pem'), 37 cert: fixtures.readKey('agent1-cert.pem') 38}; 39 40const body = 'hello world\n'; 41 42const serverCallback = common.mustCall(function(req, res) { 43 res.writeHead(200, { 'content-type': 'text/plain' }); 44 res.end(body); 45}); 46 47const server = https.createServer(options, serverCallback); 48 49server.listen(0, common.mustCall(() => { 50 let tests = 0; 51 52 function done() { 53 if (--tests === 0) 54 server.close(); 55 } 56 57 // Do a request ignoring the unauthorized server certs 58 const port = server.address().port; 59 60 const options = { 61 hostname: '127.0.0.1', 62 port: port, 63 path: '/', 64 method: 'GET', 65 rejectUnauthorized: false 66 }; 67 tests++; 68 const req = https.request(options, common.mustCall((res) => { 69 let responseBody = ''; 70 res.on('data', function(d) { 71 responseBody = responseBody + d; 72 }); 73 74 res.on('end', common.mustCall(() => { 75 assert.strictEqual(responseBody, body); 76 done(); 77 })); 78 })); 79 req.end(); 80 81 // Do a request that errors due to the invalid server certs 82 options.rejectUnauthorized = true; 83 tests++; 84 const checkCertReq = https.request(options, common.mustNotCall()).end(); 85 86 checkCertReq.on('error', common.mustCall((e) => { 87 assert.strictEqual(e.code, 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'); 88 done(); 89 })); 90})); 91