我试图运行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');
});
答案 0 :(得分:1)
我认为您需要联系您的证书颁发机构(发布您的第一个ssl证书的组织)并获取证书的副本(path/to/key.pem
和path/to/cert.cert
)或在某处查找现有密钥你现有的服务器。
如果您正在运行apache,那么您的配置文件将包含一个包含标有SSLCertificateFile
和SSLCertificateKeyFile
的.cert和.pem文件路径值的部分,然后只需更新路径在您的节点应用程序中指向它们。您还必须确保您的SSL证书符合要求(例如,如果您的节点应用程序在不同的域上运行,则需要为多域,或者在子域上运行您的节点应用程序时使用通配符SSL证书)。
您找到的domain.com.csr
和domain.com.key
文件是用于生成初始SSL证书的私钥和证书请求,并且无法在您的节点应用上执行任何操作以启用SSL。