2016-04-29 25 views
4

Also habe ich eine Nodes.js-App geerbt, die ich auf einer Vagrant-Box ausgeführt habe.Zugriff auf die Node.js-App auf Vagrant über die SSL/TLS-Verbindung

Ich habe die App Bindung an "0.0.0.0", und es hat eine eigene server.key und Zertifikate im Ordner securekey.

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'); 

Wenn ich die app laufen, ich voraussichtlich in der Lage sein, darauf zuzugreifen auf meinem Windows über die URL-Browser (Vagrant ist auf meinem Windows-PC läuft) https://localhost:3001

Aber ich „Sichere Verbindung fehlgeschlagen“ erhalten auf Mozilla.

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

Und

$ 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 

Aber diese Befehle sind wieder erfolgreiche Verbindungen, wenn sie auf dem Vagabunden vm Terminal laufen:

ich dies auf Windows-PC mit Cygwin haben versucht!

Was muss ich tun, damit mein Windows PC/Browser die Zertifikate der App akzeptiert, damit ich über Mozilla Firefox auf die App zugreifen kann? Da es bereits server.key und certs hat, muss ich sicherlich nicht wieder eigene Schlüssel generieren, damit die App sie verwenden kann.

EDIT: Hier ist meine Vagrant-Datei:

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 

Ich habe nur den Port bekam configs..the Rest Spedition Standard sind.

Und wenn die App auf Vagrant ausgeführt wird, zeigt netstat, dass der Anschluss für die Verbindung hört

$ netstat -an | grep 3001 
    TCP 0.0.0.0:3001   0.0.0.0:0    LISTENING 

Und wenn ich https://localhost:3001 Zugriff auf den Browser, ich sehe dies:

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 

Scheint Wie die Port-Verbindungen sind in Ordnung, aber vm ist nicht in der Lage, Daten zurückzugeben.

Antwort

1

Nach viel Graben um stieß ich auf diesen Kommentar: https://unix.stackexchange.com/a/255404

Weil ich auf CentOS 7 war das Deaktivieren firewalld für mich den Trick. Ich habe die Veränderung nicht bemerkt. In gewisser Weise ist die Notiz von joelnb, iptables in seinen Antwortkommentaren zu überprüfen, die richtige Richtung (danke!). Überprüfen Sie die Firewall Ihres Betriebssystems und versuchen Sie, sie zu deaktivieren, um festzustellen, ob sie für das Problem hilfreich ist. Wenn ja, können Sie mit der Konfiguration einer Regel für den Port fortfahren.

Für 7, CentOS einen Port auf firewalld zu öffnen: centos 7 - open firewall port

Ich hoffe, das jemand hilft.

0

Ich vermute, dass Sie nicht die Port-Forward-Setup in Ihrem Vagrantfile haben, weil ich genau diesen Fehler bekomme, wenn ich nicht/wenn nichts auf diesen Port hört. Sieht Ihr Vagrantfile wie folgt aus? Der forwarded_port-Teil ist das wichtige Bit.

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

Sonst könnten Sie bitte Ihre Vagrantfile posten und ich werde meine Antwort revidieren.

+0

Hallo, ich habe meine Vagrant-Datei hinzugefügt. Ich habe Port 3000 und 3001 weitergeleitet, aber momentan nur 3001 für SSL. – evkwan

+0

Okay, was ist die Ausgabe von 'sudo iptables -L in der VM? Und vielleicht möchten Sie auch die Ausgabe von 'vagrant up' überprüfen - da Sie auto_correct auf den Ports haben, kann es einen anderen Port zuweisen, wenn etwas anderes auf 3001 hört (obwohl dies weniger wahrscheinlich ist). – joelnb

+0

Da ich die App nur für den Test ausgeführt habe, habe ich iptables auf der VM deaktiviert. – evkwan