首页 > 解决方案 > 捕获对等证书以供以后使用

问题描述

我正在尝试捕获连接的对等证书,以便以后可以在我的代码中使用这些证书。

'use strict';

const tls = require('tls');

console.log('Hello World!');
var certs = {};
const socket = tls.connect(
  { host: '192.168.1.23', port: 8080, rejectUnauthorized: false },
  () => {
    certs = socket.getPeerCertificate();
  },
);

console.log('Outside');
console.log(JSON.stringify(certs));
console.log('Good Bye World');

预期输出为

Hello World!
Outside
{"subject":{"C":"US","ST":"CA","O":"Example Organisation, Inc.","OU":"Example","CN":"example.exampleorg.com"},"issuer":{"C":"US","ST":"CA","O":"Example Organisation, Inc.","OU":"Example","CN":"example.exampleog.com"},"modulus":"10063F296F4B812B2DB8E5FEAD9AE2C949B41E7576026E09EF215B4A97C128CCB970783F4BEB92A5F5E1C7F745EB41B2EADE38CF826B97B12ED8A814FD005F0E01CAFA6019F9D489B7A798E126A2BCA3BF4005D09344DBE3F48781E47C18D2603E3174E20EBC7380C423B844A8E4D023EF94C64DC4B51E4AA04F7A2F6D9D4C0CFE1087818E77D7E40AA725B368290D657EE37BA0FD6D1FC4F5428320E97C3A2264832F84F60D3B2300105D4BC914C731E077424828DAFD03AD58A1DD84A89088D9FFD2A2CBB77DD5A1B59F50E1ADC38787732BB873EBECCEF16D9D3422FD0573353045D90E9A93C49FEFDBC9E32669ED91932777BC74485DADA5322135497377101711C593AD22646DA20174FEA14F30C7120A881DBD27542B81FFB88B45D71E60567A0E053F651E3AE55DDF3CAC2B1F14393B99541317DA3836F4E27427BDA7D11DB02FBC70AA5BFEAE6797D059C5A89520D400A882A37FB0AEA456126BC86E817F0E8EE553B51B6B8D3BEFAB74A82D6F599F5E998153DA6D259192A40E5F33A4EB661EA5E4A5BFF36CC8F6AD021917E0C2B9CE42E0C2BDF92D430120D8B76D62DC8DD9095D8065BF539C33ED3BCF29E5DD0EBD10AADA8D5CD096B761CED1A4180DF8E7FEA53FC4ADC5D72E81029C4749CC146A6A2311272AC0C7C4FDEEE480F4A37F3DE75E496EE22DC4061B2F1E669CEF7E524BAEA95D26DFF82A5D4F4D72","bits":4096,"exponent":"0x10001","pubkey":{"type":"Buffer","data":[48,151,227,217,226,252,38,85,115,149,19,128,62,251,86,226,84,118,147,46,50,91,42,199,220,58,98,131,242,70,147,26,97,101,85,172,44,86,108,21,217,48,86,206,212,21,191,13,160,173,175,50,135,159,164,135,60,40,200,166,240,4,81,233,184,23,174,121,0,173,88,70,191,101,189,53,240,121,254,199,175,48,233,50,36,18,119,223,193,205,250,7,194,100,8,50,127,186,210,232,41,151,42,5,238,248,226,32,6,154,116,228,149,134,140,176,227,68,2,164,208,235,105,139,48,66,234,36,155,178,94,40,230,24,38,217,113,181,161,6,2,2,207,3,5,142,104,45,242,130,56,131,239,29,202,234,47,67,243,91,19,37,33,39,222,127,110,186,138,13,74,60,189,19,175,154,247,166,35,94,117,78,122,18,54,201,133,32,209,16,49,227,160,174,224,67,56,236,240,95,223,188,58,58,148,76,228,24,239,26,248,21,68,144,246,37,8,79,6,88,103,38,65,222,29,115,143,0,59,164,95,15,54,247,180,204,197,162,211,20,130,194,206,111,1,230,68,37,229,205,159,226,224,96,60,175,82,220,189,248,94,90,40,85,86,57,231,178,112,24,106,250,97,156,246,229,117,229,43,137,253,150,226,189,13,39,207,54,95,211,12,229,146,250,120,41,43,253,110,47,136,208,135,10,175,64,160,81,8,223,86,25,221,189,67,96,53,91,120,161,2,250,89,206,169,180,124,93,128,32,244,64,200,174,225,101,12,11,141,21,135,142,16,16,249,223,166,110,199,80,235,98,241,135,240,139,107,155,229,205,146,23,37,2,51,42,187,128,7,57,101,35,57,90,10,214,123,242,205,228,143,52,40,95,167,151,89,185,252,17,105,5,184,27,11,25,42,186,124,42,62,87,19,5,96,2,233,38,37,197,130,223,23,32,201,48,214,160,104,163,223,22,6,98,199,210,30,43,165,176,254,173,203,25,255,37,73,232,96,181,63,14,114,182,33,9,174,233,153,0,58,184,14,60,238,220,29,129,79,26,224,11,27,205,7,50,167,179,177,54,47,214,217,194,131,43,154,185,203,253,230,231,241,108,156,127,15,191,86,250,27,16,44,199,221,151,81,117,236,18,126,121,33,94,251,140,21,169,151,89,6,245,151,107,0,121,77,54,13,129,172,182,23,33,19,207,1,233,32,236,5,213,75,120,94,66,91,52,170,213,105,47,232,99,132,36,66,1,0,1]},"valid_from":"Jan  1 10:00:00 2001 GMT","valid_to":"Dec  31 10:00:00 2100 GMT","fingerprint":"90:F9:48:1E:C4:E6:5C:AC:5F:C4:6C:CF:F1:60:E4:AE:3C:97:F2","fingerprint256":"25:C3:0C:B0:23:06:39:53:A4:5E:45:65:07:B5:6D:F8:75:A5:A7:C8:27:A9:A4:FF:38:8D:A7:6A:8E:8B:DE","serialNumber":"8349063A8144D2D4","raw":{"type":"Buffer","data":[48,245,106,113,22,221,187,200,74,49,140,45,197,215,178,236,41,132,178,128,52,149,118,232,47,103,172,59,44,241,112,65,49,227,9,195,105,159,92,241,8,132,231,6,178,233,168,225,248,244,83,244,107,122,105,53,208,86,110,165,33,142,183,138,141,139,125,48,52,99,7,60,152,80,183,0,198,104,114,108,39,168,70,17,72,176,52,241,108,231,172,29,109,240,228,157,146,76,222,85,0,8,121,19,79,53,124,103,155,162,230,239,16,240,135,34,45,238,79,178,44,142,51,87,84,170,208,36,134,136,30,156,154,221,0,105,90,69,65,138,229,59,255,226,188,23,79,64,112,160,174,8,143,219,248,185,23,38,120,167,101,0,144,208,48,37,216,117,117,242,233,152,54,115,134,132,117,122,72,32,46,56,4,222,124,166,174,7,170,237,107,205,210,240,217,140,11,21,98,81,107,114,81,245,156,201,131,1,178,70,242,39,95,120,235,48,155,89,38,113,228,81,194,215,115,4,157,218,117,193,68,194,90,182,223,188,84,92,155,1,175,249,54,172,253,246,217,189,201,30,251,46,141,212,164,191,95,205,238,206,212,120,110,138,219,130,55,208,92,174,194,163,131,246,150,242,42,10,125,85,250,212,52,76,38,13,66,27,123,42,2,239,187,64,135,154,232,217,41,49,97,113,34,80,130,62,210,67,149,182,207,139,61,172,103,37,86,82,55,163,168,138,236,195,209,3,121,87,25,197,187,222,79,18,134,229,36,231,79,237,53,13,229,238,162,32,156,9,204,77,195,222,64,249,195,113,163,45,132,41,241,42,210,79,204,209,76,251,127,107,144,228,198,2,14,121,66,46,15,122,115,146,66,199,0,126,156,114,56,143,252,212,60,82,237,122,154,30,206,46,51,238,56,230,251,3,197,9,58,220,181,60,202,82,71,156,10,160,47,31,152,146,147,215,229,222,51,153,216,126,34,10,3,91,119,112,249,219,217,10,196,201,167,162,227,35,177,4,209,31,146,147,43,152,243,84,4,23,133,206,91,100,235,199,187,150,64,249,138,99,96,79,66,182,88,255,127,178,107,35,83,8,65,237,218,156,180,56,255,46,128,12,174,161,186,163,113,81,6,34,157,179,173,55,26,46,202,240,122,5,180,234,220,248,24,18,22,171,75,25,100,135,46,76,241,142,155,225,195,86,40,16,59,138,252,45,70,39,40,92,238,39,3,106,178,47,202,219,30,72,42,180,224,174,192,10,218,69,21,72,5,207,68,152,190,85,190,231,102,1,51,3,222,245,240,101,71,82,109,114,106,220,117,135,12,118,53,120,49,224,173,155,241,166,37,59,16,70,47,253,207,157,87,212,141,3,127,234,51,101,8,112,101,198,17,19,244,200,53,9,34,26,225,245,54,236,80,130,251,66,20,1,5,226,179,50,159,191,151,93,124,36,178,239,23,137,195,168,89,93,26,228,50,234,66,18,63,14,146,187,216,232,111,178,110,193,155,50,120,156,10,143,6,213,250,188,149,27,217,38,215,224,109,101,17,89,168,255,159,147,118,158,126,154,242,233,218,247,69,152,117,97,23,65,242,154,49,117,255,255,210,27,92,79,99,138,119,11,106,143,244,68,103,189,82,140,161,55,213,24,137,221,63,63,75,214,231,248,223,243,204,105,21,67,152,93,146,129,22,99,226,106,77,80,95,83,87,212,165,245,197,80,51,53,227,109,193,59,185,24,61,46,46,143,80,23,106,36,59,113,203,68,232,74,36,230,183,115,138,211,236,77,91,113,116,193,250,204,165,27,79,79,133,230,149,159,251,150,106,142,46,5,140,8,6,223,249,141,193,180,127,0,38,248,152,134,43,176,22,238,112,148,187,203,200,146,184,148,195,177,86,65,239,175,108,188,222,218,135,103,60,7,227,73,241,24,62,211,139,142,210,157,253,94,242,40,244,52,143,66,15,95,31,102,184,241,248,112,73,103,21,184,190,245,55,50,69,233,160,74,27,204,77,217,214,46,127,5,126,27,218,243,137,245,194,60,129,251,113,29,178,140,155,84,254,139,171,226,95,120,34,94,100,119,152,227,162,0,53,151,112,225,40,55,159,99,235,177,167,75,101,20,238,245,202,148,204,65,153,169,129,183,195,47,102,173,223,84,103,101,56,233,56,39,38,31,0,60,250,242,119,74,166,148,209,3,36,122,208,27,223,41,60,148,247,187,97,248,146,111,9,78,103,243,164,6,236,226,148,0,226,115,132,245,24,124,239,149,30,16,128,13,94,177,97,8,247,65,73,145,30,229,27,92,235,171,179,78,19,200,36,166,7,117,173,243,218,158,179,205,68,162,97,87,193,7,209,245,22,236,171,172,116,57,85,20,101,155,169,47,92,66,192,74,126,42,153,118,89,225,146,255,250,130,129,20,55,23,247,56,77,186,114,174,96,84,12,134,165,167,156,162,174,136,99,150,113,238,217,113,42,232,212,37,50,215,1,100,116,12,61,158,5,128,107,100,254,227,143,40,47,92,181,128,53,45,178,207,154,250,238,103,59,50,161,229,71,220,37,145,196,75,17,192,103,26,142,218,106,230,67,49,232,91,6,48,245,97,162,75,36,2,42,77,115,129,210,167,27,204,79,179,204,234,68,142,108,226,212,199,22,88,123,98,110,99,204,224,130,11,92,38,45,13,81,12,236,111,116,215,137,34,102,29,182,199,146,229,214,186,12,91,7,191,250,11,198,228,181,152,154,86,81,217,4,6,201,130,172,142,155,9,150,141,254,24,90,217,136,17,170,214,130,154,74,91,241,116,144,251,4,252,3,62,92,161,169,175,168,112,149,97,252,62,226,7,163,215,202,39,250,144,84,132,246,12,162,151,99,199,228,121,142,88,36,81,206,180,50,116,89,82,118,240,70,38,214,48,45,190,210,63,165,59,103,101,50,108,114,126,6,180,165,0,109,205,18,23,178,120,141,70,26,218,38,36,190,141,69,227,21,125,18,8,133,62,35,213,23,197,141,237,85,235,96,189,4,30,213,166,78,86,220,204,35,243,81,248,235,255,74,88,156,159,237,250,242,203,140,57,248,34,235,192,5,48,82,47,179,48,109,235,138,15]}}
Good Bye World

收到的输出是

Hello World!
Outside
{}
Good Bye World

标签: node.jstls1.2

解决方案


我看到的问题是,tls.connect() 是一个异步函数,它会在一段时间后返回值,在此之前您尝试打印它并获取 {}。

在这种情况下,您可以使用事件。检查下面的代码,它工作正常并正确打印事件的预期内容。

 'use strict';

const tls = require('tls');
var events = require('events');
var eventEmitter = new events.EventEmitter();
var certs = {};
//Create an event handler:
var myEventHandler = function () {
    console.log('On Event');
    console.log(JSON.stringify(certs));
    console.log('Good Bye World');
  }
eventEmitter.on('GotTheCert', myEventHandler);

console.log('Hello World!');

const socket = tls.connect(
  { host: 'smtp-relay.gmail.com',port:465,  rejectUnauthorized: true },
  () => {
    

    certs = socket.getPeerCertificate();
    console.log('Inside ');
    console.log(JSON.stringify(certs));
    
  
    eventEmitter.emit('GotTheCert');


  },
);

推荐阅读