nodejs无法使用SSL

时间:2015-11-06 14:11:18

标签: node.js sockets ssl

我试图运行nodejs应用程序来处理我的php项目。问题是我认为在服务器中启用了SSL。

我在SSL安装后在根目录中找到了两个文件:domain.com.csr和domain.com.key我尝试在创建https服务器时将它们组合到连接中,但没有任何方法可以帮助我。

到目前为止,我有这段代码:

var socket = require('socket.io');
var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);

var io = socket.listen(server);

app.get('/test', function(req, res) {
    res.send('hello world');
    console.log('visited test')
});

io.sockets.on('connection', function (client) {
    console.log("New client !");

    client.on('message', function (data) {
        console.log('Message received ' + data.name + ":" + data.message);

        io.sockets.emit('message', {name: data.name, message: data.message});
    });
});

server.listen(8080, function () {
    console.log('listen me on: 8080');
});

当我尝试访问http://ip:8080/test时它运行良好所以这意味着节点服务器正在运行,但是当我尝试在我的视图文件var socket = io.connect('http://ip:8080');上创建套接字连接时,它给了我错误:

The page at 'https://www.domain.com/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://ip:8080/socket.io/?EIO=3&transport=polling&t=1446818946199-0'. This request has been blocked; the content must be served over HTTPS.

所以问题很明显,但如何处理呢? 我也试过这个联系:

var socket = io.connect('https://www.domain.com:8080');

但结果是404 GET错误。怎么处理呢?

更新

现在我应该使用的代码部分,但不知道如何在服务器中获取现有SSL的证书。

var socket = require('socket.io');
var express = require('express');
var https = require('https');
var fs = require('fs');

var options = {
    key: fs.readFileSync('path/to/key.pem'), // dont have
    cert: fs.readFileSync('path/to/cert.cert') // dont have
};

var app = express();
var server = https.createServer(options, app);

var io = socket.listen(server);

app.get('/test', function(req, res) {
    res.send('hello world');
    console.log('visited test')
});

io.sockets.on('connection', function (client) {
    console.log("New client !");

    client.on('message', function (data) {
        console.log('Message received ' + data.name + ":" + data.message);

        io.sockets.emit('message', {name: data.name, message: data.message});
    });
});

server.listen(443, function () {
    console.log('listen me on: 443');
});

1 个答案:

答案 0 :(得分:1)

我认为您需要联系您的证书颁发机构(发布您的第一个ssl证书的组织)并获取证书的副本(path/to/key.pempath/to/cert.cert)或在某处查找现有密钥你现有的服务器。

如果您正在运行apache,那么您的配置文件将包含一个包含标有SSLCertificateFileSSLCertificateKeyFile的.cert和.pem文件路径值的部分,然后只需更新路径在您的节点应用程序中指向它们。您还必须确保您的SSL证书符合要求(例如,如果您的节点应用程序在不同的域上运行,则需要为多域,或者在子域上运行您的节点应用程序时使用通配符SSL证书)。

您找到的domain.com.csrdomain.com.key文件是用于生成初始SSL证书的私钥和证书请求,并且无法在您的节点应用上执行任何操作以启用SSL。