【问题标题】:How to get ssl/tls certificate from https response in nodejs如何从 nodejs 中的 https 响应获取 ssl/tls 证书
【发布时间】:2022-12-22 14:57:14
【问题描述】:

我正在实施证书自动化服务,我想通过在部署后发出 https 请求来验证证书是否正确部署,https 响应应该给我带来新部署证书的信息,例如颁发日期和过期日期。

我知道这是套接字编程的一部分,所以我想知道是否有人知道我可以使用一些现有的包。

如果没有这个包,我可能会深入学习一些握手流程,直接用Socket做。


Ps:我所知道的最接近的事情是在 JAVA 中实现自定义 x509 信任管理器时,它确实支持从客户端验证证书。

【问题讨论】:

标签: node.js sockets npm https handshake


【解决方案1】:

https://www.npmjs.com/package/certnames 包启发了我,然后我发现我可以直接使用捆绑的 tls 模块来完成,因为证书是通过 tls 层传输的,所以我们不需要发出 http 请求来获取它。

import * as tls from 'tls';

test('test', function (done) {
  let host = 'httpbin.org';
  let socket = tls.connect({
    port:443, 
    host,
    servername: host, // this is required in case the server enabled SNI
  }, () => {
    let x509Certificate = socket.getPeerX509Certificate();

    expect(x509Certificate.subject).toBe('CN=httpbin.org');

    done();
  });
});

【讨论】:

  • 绝妙的解决方案,谢谢你!另外,为了遵守站点规则,我必须在此评论中添加一些有用的内容,所以这里是:https.requests回调的connection 属性已弃用,getPeerCertificate 在socket 中不存在,至少在 TypeScript 定义中是这样。实际上它只是卡住了,什么也没做,所以这是节点唯一有效的低级解决方案,没有任何额外的依赖。
猜你喜欢
  • 2013-05-30
  • 2018-03-13
  • 2019-05-02
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多