MTLS - 为 nodejs 客户端生成证书

问题描述

我们需要通过相互 TLS 在我们的 ec2 服务器和我们的客户服务器之间进行通信。 请求从我们的服务器发送到我们的客户服务器 - 所以我们是这里的客户端。

我阅读了 this 帖子,讨论了如何生成文件

第一步是创建一个证书颁发机构 (CA) 客户端和服务器信任。 CA 只是一个公钥和私钥 包含在自签名 X.509 证书中的公钥。

我们的证书和他们的证书 - 应该从同一个根 CA 签名吗?谁应该提供?

我身边的代码应该是这样的:

const req = https.request(
  {
    hostname: 'myserver.internal.net',port: 443,path: '/',method: 'GET',cert: fs.readFileSync('client.crt'),key: fs.readFileSync('client.key'),ca: fs.readFileSync('ca.crt')
  },res => {
    res.on('data',function(data) {
      // do something with response
    });
  }
);

那么我们应该互相提供什么?我们不完全明白,他们没有提供更多细节,只是要求我们给他们一个证书......

解决方法

我们的证书和他们的证书 - 应该从同一个根 CA 签名吗?谁应该提供?

由于客户端证书的控制是在 TLS 服务器端(即在客户)完成的,因此完全取决于他们的期望。他们可能需要公开签名的证书,也可能需要由他们自己的 CA 签名的证书。或者他们可能只是检查是否使用了特定的证书,并且也会为此接受自签名证书。