使用node.js设置SSL

时间:2012-08-03 22:33:26

标签: node.js

我在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并获取{“状态”:“已批准”}?

谢谢!

2 个答案:

答案 0 :(得分:3)

您被拒绝的原因是因为您尝试使用客户端证书身份验证进行身份验证。每个最终用户都需要由服务器证书签名的客户端证书。 How to setup Client CertificatesCertificate Auth with Node

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

答案 1 :(得分:0)

这是错误的:

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

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

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