gpt4 book ai didi

node.js - nodejs 无法使用 SSL

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:38 25 4
gpt4 key购买 nike

我正在尝试运行 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 时它运行良好所以这意味着 Node 服务器正在工作,但是当我尝试在我的 View 文件上创建套接字连接时 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 Error。如何处理?

更新

现在是我应该使用的代码部分,但不知道如何获取服务器中现有 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');
});

最佳答案

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

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

您找到的 domain.com.csrdomain.com.key 文件是用于生成初始 SSL 证书的私钥和证书请求,而不是将采取任何措施在您的 Node 应用程序上启用 SSL。

关于node.js - nodejs 无法使用 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33568725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com