4

我在 GoDaddy 购买了 SSL 证书,并使用以下 node.js 服务器尝试设置它:

var https = require('https'),      // module for https
    fs =    require('fs');         // required to read certs and keys

var options = {
    key: fs.readFileSync('../../ssl/example.com.key'),
    cert: fs.readFileSync('../../ssl/example.com.crt'),
    ca: fs.readFileSync('../../ssl/gd_bundle.crt'),
    requestCert:        true,
    rejectUnauthorized: false
};

https.createServer(options, function (req, res) {
    if (req.client.authorized) {
        res.writeHead(200, {"Content-Type": "application/json"});
        res.end('{"status":"approved"}');
    } else {
        res.writeHead(401, {"Content-Type": "application/json"});
        res.end('{"status":"denied"}');
    }
}).listen(443);

运行服务器后,我尝试访问https://example.com的网站,我得到了

{"status":"denied"}

我想这是正常工作,因为我得到了回应,但我认为我对 SSL 工作原理的理解是错误的。我认为浏览器从服务器获取证书,然后根据根证书(即来自 GoDaddy)对其进行身份验证。所以我不应该得到

{"status":"approved"}

只是简单地访问https://example.com

所以我想我的问题是,我如何访问https://example.com并获得 {"status":"approved"}?

谢谢!

4

3 回答 3

3

您被拒绝的原因是因为您正在尝试使用客户端证书身份验证进行身份验证。每个最终用户都需要一个由您的服务器证书签名的客户端证书。 如何使用 Node设置客户端证书和证书身份验证。

如果您只是尝试加密您的网络流量,则不需要客户端证书。如果您只想加密流量,请使用此处的示例http://nodejs.org/docs/latest/api/https.html 。

于 2012-08-03T22:44:17.423 回答
0

这是错误的:

ca: fs.readFileSync('../../ssl/gd_bundle.crt')

ca需要是包含单个证书的字符串或缓冲区数组。如果您提供捆绑包,则仅使用第一个证书,其余的将被忽略。

另请参阅:http ://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

于 2015-01-14T15:19:57.180 回答
0

1.) 首先打开您的 cpanel 2.) SSL/TLS 3.) 管理 SSL 站点。4.) 选择要添加 ssl 的域 5.) 然后按证书自动填充

你会在这里 crt 和 key 创建 2 个文件 domain.pem 和 domain.crt

将 crt 代码放入 domain.crt 并将关键代码放入 domain.pem 文件中,并将两个文件放在主根目录中

const https = require('http');
const fs = require('fs');


const httpsOptions = {
key: fs.readFileSync('domain.pem'),
cert: fs.readFileSync('domain.crt'),
ca: fs.readFileSync('domain.crt'),
passphrase: '??'
}

https.createServer(options, function (req, res) {
  if (req.client.authorized) {
    res.writeHead(200, {"Content-Type": 
    "application/json"});
    res.end('{"status":"approved"}');
  } else {
    res.writeHead(401, {"Content-Type": 
    "application/json"});
    res.end('{"status":"denied"}');
  }
}).listen(443);
于 2021-12-10T03:21:35.940 回答