如何创建节点js ssl服务器?

时间:2013-04-07 16:42:36

标签: node.js ssl

nodejs版本:0.8.6
我使用openssl使用以下命令创建了一个ssl csr文件: openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out myserver.csr

  • csr内容已发送至我的SSL提供商,证书已发回。

现在我想创建一个SSL安全服务器:

var fs = require("fs");
var https = require('https');
var credentials = {
            key: fs.readFileSync(options.base_project_folder + 'privatekey.pem'),
            cert: fs.readFileSync(options.base_project_folder + 'certificate.pem')
};
var server = https.createServer(credentials, app);
server.listen(port, address, function() {
    var addr = this.address();
    console.log('listening on %s:%d', addr.address, addr.port);
});

服务器正在运行,但我得到:“SSL连接错误”

试图检查我做的问题: openssl s_client -connect my_dns:443 // my_dns指向我的nodejs服务器ofcourse

结果: 连(00000003) 139813382997664:错误:140790E5:SSL例程:SSL23_WRITE:ssl握手失败:s23_lib.c:177:
没有同行证书可用 没有发送客户端证书CA名称 SSL握手已读取0个字节并写入226个字节
新的,(无),密码是(无)
不支持安全重新协商
压缩:无 扩展:无

谁能帮助我吗?我在SSL黑暗中迷失了方向:(

3 个答案:

答案 0 :(得分:8)

尝试添加CA,如下所示:

var credentials = {
  key: fs.readFileSync(options.base_project_folder + 'privatekey.pem'),
  cert: fs.readFileSync(options.base_project_folder + 'certificate.pem'),
  ca: fs.readFileSync(/path/to/CA/cert)
};

The docs say,options参数类似于tls.createServer

答案 1 :(得分:1)

我认为您还需要为签名者指定CA证书。由于这不是自签名证书,因此您应该从获得证书的任何地方收到捆绑包。

一些应该有用的链接: http://qugstart.com/blog/node-js/install-comodo-positivessl-certificate-with-node-js/ http://www.gettingcirrius.com/2012/06/securing-nodejs-and-express-with-ssl.html

答案 2 :(得分:0)

如何通过cloudflare做到这一点?

使用显而易见的ssl凭据创建websocket.js

var https = require('https');
var credentials = {
            key: fs.readFileSync('/location/to/privatekey.pem'),
            cert: fs.readFileSync(/location/to/certificate.pem')
};
var server = https.createServer(credentials, app);

1)注册cloud flare

2)将您的域dns服务器指向cloudflare ns服务器

3)生成原始证书,并将私钥和证书都保存到服务器privatekey.pem和certificate.pem

4)确保您在Websocket中使用SSL端口,并且路由器防火墙允许该端口。