Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加密使用Node.js发送的内容_Node.js_Ssl_Amazon Ec2 - Fatal编程技术网

加密使用Node.js发送的内容

加密使用Node.js发送的内容,node.js,ssl,amazon-ec2,Node.js,Ssl,Amazon Ec2,我正在尝试在node.js应用程序上安装HTTPS。通过创建同时包含root和ec2 user的certAccess组,然后说sudo chown ec2-user.certAccess/etc/pki/tls/private/serverKey.key。但是,当我运行此伪代码时: var fs = require('fs'); var https = require('https'); var app = require('express')(); var options = { key

我正在尝试在node.js应用程序上安装HTTPS。通过创建同时包含
root
ec2 user
certAccess
组,然后说
sudo chown ec2-user.certAccess/etc/pki/tls/private/serverKey.key
。但是,当我运行此伪代码时:

var fs = require('fs');
var https = require('https');
var app = require('express')();
var options = {
   key  : fs.readFileSync('/etc/pki/tls/private/serverKey.key').toString(),
   cert : fs.readFileSync('/etc/pki/tls/certs/2_mikewarren.me.crt').toString()
};

app.get('/', function (req, res) {
   res.send('Hello World!');
});

https.createServer(options, app).listen(8080, function () {
    console.log(JSON.stringify(options, null, '\t'));
   console.log('Started!');
});
在我的浏览器中进行测试(使用
:8080
),我没有收到服务器的响应

我进入查看私钥和证书的权限,并看到以下内容:

位于
/etc/httpd/conf.d/ssl.conf
中的私钥和证书配置如下所示:

然而,当我在浏览器中进行测试时(即使在URL前面键入
https://
,我也不必这样做),服务器也没有响应


我该怎么办

我想出了解决办法。以下是我所做的:

我将
ca
成员添加到
options
中,并将其指向链证书,如下所示:
ca:fs.readFileSync('/etc/pki/tls/certs/1\u root\u bundle.crt',utf8')
。这就解决了证书问题。至于下一部分,我只是在BASH中编写了一行代码,将https(端口443)重定向到我正在使用的端口(出于方便,我将该端口更改为8443,因为我已经将http重定向到8080)


这让它工作起来了,但我仍然必须在URL前面加上
https://
,这仍然很糟糕。我不该这么做!我认为解决这个问题的方法是做我已经做过的事情,但将http重定向到端口8443,或将代理端口8080重定向到端口8443。

我想出了解决方案。以下是我所做的:

我将
ca
成员添加到
options
中,并将其指向链证书,如下所示:
ca:fs.readFileSync('/etc/pki/tls/certs/1\u root\u bundle.crt',utf8')
。这就解决了证书问题。至于下一部分,我只是在BASH中编写了一行代码,将https(端口443)重定向到我正在使用的端口(出于方便,我将该端口更改为8443,因为我已经将http重定向到8080)


这让它工作起来了,但我仍然必须在URL前面加上
https://
,这仍然很糟糕。我不该这么做!我认为解决这个问题的方法是做我已经做过的事情,但将http重定向到端口8443,或将代理端口8080重定向到端口8443。

我不知道这是否是问题的根源,但我看到两件事。1) 你不能只做:8080。您必须像在
https://yourdomain.com:8080
。并且,2)在调用
readFileSync()
之后删除
.toString()
。证书不是字符串。否。没用。它只是像服务器关闭一样请求内容。是的。这些都是有效的修复方法。很明显,你有更多的错误。你显然在某个地方出了差错。您必须进行一些调试,以确切地了解服务器和客户端上发生了什么,从而了解为什么没有建立连接。我认为在你的问题中没有足够的信息让我们知道发生了什么。几个月前,我按照[这些说明][1]安装了证书(证书是通过StartCOM的某个友好代理获得的),前几天,当我最终让node.js代码可以访问此内容时,我更改了权限(如上所述)。代码本身来自Marc Wandschneider的Learning Node.js书,也可以访问[此处][2][1]:[2]:[2]:怎么回事?它不会正确超链接!!我不知道这是否是你问题的根源,但我看到两件事。1)你不能只做:8080。您必须像在
https://yourdomain.com:8080
。并且,2)在调用
readFileSync()
之后删除
.toString()
。证书不是字符串。否。没用。它只是像服务器关闭一样请求内容。是的。这些都是有效的修复方法。很明显,你有更多的错误。你显然在某个地方出了差错。您必须进行一些调试,以确切地了解服务器和客户端上发生了什么,从而了解为什么没有建立连接。我认为在你的问题中没有足够的信息让我们知道发生了什么。几个月前,我按照[这些说明][1]安装了证书(证书是通过StartCOM的某个友好代理获得的),前几天,当我最终让node.js代码可以访问此内容时,我更改了权限(如上所述)。代码本身来自Marc Wandschneider的Learning Node.js书,也可以访问[此处][2][1]:[2]:怎么回事?它不会正确超链接!!