如何从 --capath 获取密钥和证书
Posted
技术标签:
【中文标题】如何从 --capath 获取密钥和证书【英文标题】:How do I get key and cert from --capath 【发布时间】:2021-10-24 22:34:44 【问题描述】:使用 OpenSSL 并添加 CA,curl -X GET https://someserver.com -I --capath /etc/ssl/certs/
工作正常。 curl -X GET https://someserver.com -I --cacert /etc/ssl/certs/someserver.pem
也可以。
我想用 node.js https.request() 进行同样的调用
我已尝试将 SSL_CERT_DIR 设置为 /etc/ssl/certs/ 的 node --use-openssl-ca app.js
- 没有帮助。
试过了:
const https = require('https');
const fs = require('fs');
const options =
hostname: 'someserver.com',
port: 443,
path: '/',
method: 'GET',
ca: fs.readFileSync('/etc/ssl/certs/someserver.pem')
const req = https.request(options, res =>
console.log(`statusCode: $res.statusCode`)
res.on('data', d =>
process.stdout.write(d)
)
)
req.on('error', error =>
console.error(error)
)
req.end()
错误:写入 EPROTO 140249139050368:error:14094410:SSL 例程:ssl3_read_bytes:sslv3 警报握手失败:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1544:SSL 警报号 40
谢谢。
【问题讨论】:
警报 40 不是由于证书验证;甚至可能还没有收到证书。最好的方法是检查服务器日志以查看它认为问题所在。或尝试命令行openssl s_client -connect host:443
,如果OpenSSL 版本低于1.1.1 添加-servername host
;如果这也失败了,最好使用wireshark获取网络跟踪并寻找差异。
什么键?那些curl
命令不返回键。只有证书。
当然 curl 不会返回密钥,但是 CA 是有效的,因为 curl 可以完美运行。为 nodejs 指定相同的 cacert 没有帮助。
@dave_thompson_085 openssl s_client -connect someserver.com:443 CONNECTED(00000003)
这太不可思议了; s_client
没有 -quiet
应该输出 lots 的信息,除非服务器挂起,你知道这个不会。但是尝试添加-debug
使其更加嘈杂。哦,还有一件事(哥伦布的阴影):你有任何代理设置吗? curl 会使用它们,但我认为 nodejs 不会,而 openssl 绝对不会。
【参考方案1】:
只需使用 openssl 支持重建 node.js。所以现在我使用与 curl 相同的库。 谢谢大家
【讨论】:
以上是关于如何从 --capath 获取密钥和证书的主要内容,如果未能解决你的问题,请参考以下文章