Javascript 通过SSL/TLS连接访问Vagrant上的Node.js应用程序

Javascript 通过SSL/TLS连接访问Vagrant上的Node.js应用程序,javascript,node.js,ssl,vagrant,vagrant-windows,Javascript,Node.js,Ssl,Vagrant,Vagrant Windows,所以我继承了一个Nodes.js应用程序,我在一个流浪者盒子上运行它 我将应用程序绑定到“0.0.0.0”,并且它在securekey文件夹中有自己的server.key和证书 var https = require('https'); var fs = require('fs'); var ssl_options = { key: fs.readFileSync('./securekey/server.key'), cert: fs.readFileSync('./secure

所以我继承了一个Nodes.js应用程序,我在一个流浪者盒子上运行它

我将应用程序绑定到“0.0.0.0”,并且它在securekey文件夹中有自己的server.key和证书

var https = require('https');
var fs = require('fs');
var ssl_options = {
    key: fs.readFileSync('./securekey/server.key'),
    cert: fs.readFileSync('./securekey/server.crt'),
    ca: fs.readFileSync('./securekey/ca.crt')
     };

https.createServer(ssl_options, app).listen(3001, '0.0.0.0');
当我运行应用程序时,我希望能够通过URL在我的Windows(Vagrant正在我的Windows PC上运行)浏览器上访问它

但我在Mozilla上看到“安全连接失败”

我确实使用Cygwin在Windows pc上尝试过:

$ openssl s_client -host 127.0.0.1 -port 3001
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 316 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1461923745
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

但是这些命令在Vagrant vm终端上运行时返回成功连接

我需要做什么才能让我的Windows PC/浏览器接受应用程序的证书,以便我可以从Mozilla Firefox访问应用程序?既然它已经有了server.key和certs,我当然不需要再次生成自己的密钥供应用程序使用

编辑: 这是我的流浪汉档案:

Vagrant.configure(2) do |config|
  config.vm.box = "centos7"
  config.vm.network "forwarded_port", guest: 3000, host: 3000, auto_correct: true
  config.vm.network "forwarded_port", guest: 3001, host: 3001, auto_correct: true
end
我只配置了端口转发。其余都是默认的

当应用程序在Vagrant上运行时,netstat显示端口正在侦听连接

$ netstat -an | grep 3001
  TCP    0.0.0.0:3001           0.0.0.0:0              LISTENING
当我在浏览器上访问时,我看到:

 netstat -an | grep 3001
  TCP    0.0.0.0:3001           0.0.0.0:0              LISTENING
  TCP    127.0.0.1:3001         127.0.0.1:49651        ESTABLISHED
  TCP    127.0.0.1:49651        127.0.0.1:3001         ESTABLISHED

端口连接似乎很好,但vm无法返回数据。

我怀疑您的Vagrant文件中没有端口转发设置,因为如果我没有/如果该端口上没有任何内容正在侦听,我会收到确切的错误。您的流浪汉档案是否如下所示?转发端口部分是重要的位

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 3001, host: 3001
end

否则,请你把你的流浪汉档案贴出来,我会修改我的答案。

经过反复研究,我无意中发现了以下评论:

因为我在CentOS 7上,禁用firewalld帮了我的忙。我没有意识到变化。从某种意义上说,joelnb在回答评论中检查iptables的说明是正确的方向(谢谢!)。一定要检查操作系统的防火墙,并尝试禁用它,看看它是否有助于解决这个问题。如果是,则如果愿意,可以继续为端口配置规则

对于CentOS 7,要在firewalld上打开端口:


我希望这对某人有所帮助。

嗨,我已经添加了我的流浪汉档案。我转发了端口3000和3001,但目前仅使用3001进行SSL。好的,VM中的
sudo iptables-L
的输出是什么?此外,您可能希望检查vagrant up的输出-因为您在端口上有auto_correct,如果3001上有其他内容正在侦听,它可能会分配不同的端口(尽管这种可能性较小)。因为我运行应用程序只是为了测试,所以我实际上已经在vm上禁用了iptables。您是如何做到的?使用类似于
sudo iptables-P INPUT ACCEPT
?显然,似乎无法通过该端口连接到应用程序(而不是证书有任何问题)。我这样做了:
当机器启动时,服务iptables停止。
。我不希望iptables干扰连接。有趣的是netstat显示端口连接已建立。我已经更新了上面摘要中的信息。
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 3001, host: 3001
end