2016-04-29 33 views
4

私はVagrantボックスで実行しているNodes.jsアプリケーションを継承しました。SSL/TLS接続経由でVagrantのNode.jsアプリケーションにアクセス

私は、 "0.0.0.0"にバインドしているアプリケーションを持っていて、独自のserver.keyとcertsを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'); 

私はアプリを実行すると、私は(ベイグラントは私のWindows PC上で実行されている)私のWindows上でそれにアクセスすることができると期待ブラウザURL https://localhost:3001

経由しかし、私は、「安全な接続に失敗しました」を取得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) 
--- 

そして

$ 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 

をしかしベイグラントVM端子上で実行すると、これらのコマンドは、成功した接続が戻ってきている。

私はCygwinを使用して、Windows PC上でこれを試してみましたよ!

Mozilla Firefoxからアプリにアクセスできるように、WindowsのPC /ブラウザでアプリの証明書を受け入れるにはどうすればよいですか?すでにserver.keyとcertsを持っているので、確かに自分の鍵を生成してアプリを使用する必要はありません。

編集:私は唯一のデフォルトをconfigs..the残りをされているポート転送を持って

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 

: はここに私のベイグラントファイルです。

とアプリがベイグラント上で実行されている場合、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はデータを返すことができません。

答えて

1

ずっと周り掘り後、私はこのコメントにつまずい:私はCentOSの7の上にあったので、firewalldが私のためにトリックをした無効化、 https://unix.stackexchange.com/a/255404

。私はその変化を認識しませんでした。ある意味では、彼の答えのコメントの中のjoelnbからiptablesを調べるというメモは正しい方向です(ありがとう!)。お使いのOSのファイアウォールをチェックし、それを無効にして問題の解決に役立つかどうか確認してください。はいの場合は、必要に応じてポートのルールを設定することができます。CentOSの7の場合

、firewalldのポートを開くために: centos 7 - open firewall port

私は、これは誰かに役立ちます願っています。

0

Vagrantfileにポートフォワードセットアップがないと思うのですが、そのポートでリッスンしているものがない場合は、その正確なエラーが表示されるためです。 Vagrantfileは次のように見えますか? forwarded_port部分は重要なビットです。

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

それ以外の場合は、あなたのヴァリアントファイルを投稿してください。私は自分の答えを改訂します。

+0

こんにちは、私はバゲージファイルを追加しました。ポート3000と3001の両方を転送しましたが、現在はSSL用に3001しか使用していません。 – evkwan

+0

さて、VMの 'sudo iptables -L'の出力は?また、 'vagrant up'の出力を確認したいかもしれません - ポートにauto_correctがあるので、3001で他の何かが聞こえている場合には別のポートを割り当てるかもしれません(これはそうではありませんが)。 – joelnb

+0

私はテストのためだけにアプリを実行しているので、私は実際にVM上でiptablesを無効にしました。 – evkwan

関連する問題