gpt4 book ai didi

node.js - NodeJS 和 TLS,获取客户端证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:08 25 4
gpt4 key购买 nike

我正在测试 Node.JSTLS 并正在创建一个简单的服务器和客户端。这似乎工作正常:

服务器.js:

const tls = require('tls');
const fs = require('fs');

const options = {
key: fs.readFileSync('./server-certs/server.key'),
cert: fs.readFileSync('./server-certs/server.crt'),
rejectUnauthorized: false,
requestCert: true
};

const server = tls.createServer(options, (socket) => {
console.log('server connected',
socket.authorized ? 'authorized' : 'unauthorized');

console.log(socket.getPeerCertificate(true).raw);

socket.write('welcome!\n');
socket.setEncoding('utf8');
socket.pipe(socket);
});
server.listen(8000, () => {
console.log('server bound');
});

客户端.js:

const tls = require('tls');
const fs = require('fs');

const options = {
key: fs.readFileSync('./client-certs/client.key'),
cert: fs.readFileSync('./client-certs/client.crt')
};

const socket = tls.connect(8000, options, () => {
console.log('client connected',
socket.authorized ? 'authorized' : 'unauthorized');
process.stdin.pipe(socket);
process.stdin.resume();
});
socket.setEncoding('utf8');
socket.on('data', (data) => {
console.log(data);
});
socket.on('end', () => {
console.log('server ends connection');
});

使用 server.js 我打印出客户端证书:

console.log(socket.getPeerCertificate(true).raw);

但是在 Linux 上执行 cat client.crt 我有以下长字符串:

-----BEGIN CERTIFICATE-----
MIICsDCCAZgCCQC8miOEYnXCXDANBgkqhkiG9w0BAQsFADAaMQswCQYDVQQGEwJV
...
MHBcIlA2R3ssgfhlcSJcaR59LKA=
-----END CERTIFICATE-----

server.js 是否可以从客户端证书中获取该字符串?

最佳答案

console.log(socket.getPeerCertificate(true).raw);

这将返回 DER 格式的证书。您在 client.crt 中看到的是 PEM 格式的证书 - 它基本上是二进制 DER 格式的 base64,添加了一些页眉和页脚行。您可以使用 openssl x509 -in client.crt -outform der 将 PEM 转换为 DER。或者您可以按照 NodeJS: Validate certificate in DER format 中的建议在 nodejs 中将 DER 格式的证书转换为 PEM .

关于node.js - NodeJS 和 TLS,获取客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53555214/

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