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

标签 javascript node.js ssl vagrant vagrant-windows

所以我继承了一个在 Vagrant 盒子上运行的 Nodes.js 应用程序。

我将应用程序绑定(bind)到“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 https://localhost:3001 在我的 Windows(Vagrant 在我的 Windows PC 上运行)浏览器上访问它

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

我确实在使用 Cygwin 的 Windows 电脑上尝试过这个:

$ 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)
---

$ curl -v -k 'https://localhost:3001'
* STATE: INIT => CONNECT handle 0x6000574a0; line 1103 (connection #-5000)
* Rebuilt URL to: https://localhost:3001/
* Added connection 0. The cache now contains 1 members
*   Trying 127.0.0.1...
* STATE: CONNECT => WAITCONNECT handle 0x6000574a0; line 1156 (connection #0)
* Connected to localhost (127.0.0.1) port 3001 (#0)
* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x6000574a0; line 1253 (connection #0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* STATE: SENDPROTOCONNECT => PROTOCONNECT handle 0x6000574a0; line 1267 (connection #0)
* Unknown SSL protocol error in connection to localhost:3001
* Curl_done
* Closing connection 0
* The cache now contains 0 members
curl: (35) Unknown SSL protocol error in connection to localhost:3001

但是这些命令在 Vagrant 虚拟机终端上运行时会返回成功的连接!

我需要做什么才能让我的 Windows PC/浏览器接受该应用程序的证书,以便我可以从 Mozilla Firefox 访问该应用程序?因为它已经有 server.key 和证书,我肯定不需要再次生成我自己的 key 供应用程序使用吗?

编辑: 这是我的 Vagrant 文件:

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

当我访问 https://localhost:3001 时在浏览器上,我看到了这个:

 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 无法返回数据。

最佳答案

经过大量挖掘后,我偶然发现了这条评论: https://unix.stackexchange.com/a/255404

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

对于 CentOS 7,在 firewalld 上打开一个端口: centos 7 - open firewall port

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

关于javascript - 通过 SSL/TLS 连接访问 Vagrant 上的 Node.js 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36935873/

相关文章:

javascript - Jasmine,需要和 Play Framework

javascript - 如何使用 jquery 设置边距?

javascript - 定义哪个方法可以被链接

javascript - 如何使用 Node.js 和 mongodb 存储 session 值?

node.js - 按 MongoDB 中具有相同字段的文档数排序/分组

ssl - 使用 startssl.com 的无限域、子域证书?

security - 如果我使用 Stripe,我的电子商务商店是否需要 SSL 证书?

javascript - Open cart v.1.5.1 上的 Jquery Easy Slider

javascript - 如果 if 语句为 true,则隐藏 Vue.js 中的选项卡

php - Cloud Foundry 上的 DokuWiki "Your PHP seems to miss SSL support"