gpt4 book ai didi

node.js - 如何使用 Node.js 上的 https 模块连接客户端证书

转载 作者:行者123 更新时间:2023-12-04 22:41:27 26 4
gpt4 key购买 nike

在生产中,我的网站使用 Let's Encrypt 证书,以便用户可以在浏览器中看到有效的证书锁。
如果用户导航到路由 example.com/dashboard,我希望使用客户端证书(而不是用户名/密码)登录。

我使用 openssl 私钥和公钥在服务器上生成。公钥保留在服务器上,私钥发送给客户端。

使用这个tutorial ,我已经在 server.js 中创建了

const express = require('express')
const https = require('https')
const fs = require('fs')

const masterapp = express()

var options = {
key: fs.readFileSync('/etc/ssl/certs/sslforfree/private.key'),
cert: fs.readFileSync('/etc/ssl/certs/sslforfree/certificate.crt'),
requestCert: true,
rejectUnauthorized: false,
}

然后在中间件中
const cert = req.connection.getPeerCertificate()
if (req.client.authorized) {
if (cert.subject.CN === "Client123" && cert.fingerprint256 === "AA:BB:CC:DD:00..

在 Mac OS 上,它在我选择 key 的浏览器中正确显示提示( key 存储在钥匙串(keychain)中)。

问题:
  • req.client.authorized 始终为 false
  • 如何使用 Node.js 安全地检查私钥是否对应于公钥?
  • 拥有dashboard.example.com 子域或路由example.com/dashboard(快速路由器)是否更安全?
  • 最佳答案

    根据您引用的中篇文章,您需要提供 ca选项对象中的属性。这应该是您信任的客户端 CA 的列表:

    Finally, we supply a list of CA certificates that we consider valid. For now, we sign client certificates with our own server key, so it will be the same as our server certificate.


    , ca: [ fs.readFileSync('server_cert.pem') ]
    }

    您应该使用 CA 对客户端生成的 key 的公钥进行签名。为此,您必须使用私钥生成 CSR,然后使用列表中的 CA 签署 CSR。完成此操作后,您可以将私钥和生成的证书打包发送给客户端,他们将能够针对您的系统进行身份验证。
  • 这是因为您离开了 ca属性(property)。
  • 一旦您有一个受信任的 ca,浏览器和您的服务器之间就会自动发生这种情况。 .
  • 要创建 CA,您可以使用 openssl 到 generate a self-signed certificate and private key .
  • 这取决于,并且超出了 stackoverflow 的范围。您可以考虑在 serverfault.com 上提问或 security.stackexchange.com .
  • 关于node.js - 如何使用 Node.js 上的 https 模块连接客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60048113/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com