2013-03-14 6 views
54

私はnode-requestモジュールを使用しています。定期的にURLのセットにGETリクエストを送信しています。node-request - エラー "SSL23_GET_SERVER_HELLO:不明なプロトコル"

Error: 29472:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:683

問題は、私はちょうど時々、いくつかのURLに常にか、常にこのエラーを取得しないということです。また、 "strictSSL: false"では無視できません。

これは私が間違ったプロトコル(SSLv2、SSLv3、TLS ..)でSSLリクエストを送信することに関連している可能性があると読んでいます。しかし、これはなぜそれが不規則に起こるか説明していない。

Btw、私はWindows 2008サーバー上でnodejsを実行しています。

何か助けていただければ幸いです。

+0

あなたは数秒で後者同じURLを再試行したときに何が起こりますか? – generalhenry

+1

数秒後にエラーは発生しません。エラーは時々だけ返されます。 – umutm

答えて

12

これは全く悪いことでした。

httpアドレスだけにリクエストを送信するコードの一部で標準ノードhttp.requestを使用していました。 dbのように、ランダムな間隔で照会された単一のhttpsアドレスがあるようです。

単に、httpsにhttpリクエストを送信しようとしていました。

+6

エラーはhttpポートにhttpsリクエストを送信するようなものですか? –

+1

エラーメッセージには、HTTPS(SSLなど)を使用していることが明示されています。また、サーバーが「不明なプロトコル」メッセージをSSLで送信しています。あなたは、HTTPまたはHTTPSをデータベースに話すことはありません。答えは意味をなさない。 – EJP

4

サイトの一部がSSLv2を発言しているか、少なくともSSLv2サーバーを送信していますが、お客様のクライアントは発言していないか、SSLv2を発言するように設定されていません。ここで政策決定をする必要があります。 SSLv2は数年前に地球の顔から消滅したはずであり、まだそれを使用しているサイトは安全ではありません。しかし、もしあなたがそれらに話をしなければならないならば、あなたはできる限りそれを有効にしなければなりません。私はあなたができる場合でもサイトの所有者に苦情を言います。

+0

エラーはこのように聞こえますが、同じURLを考慮している場合は、時にはエラーを返すこともあります。 Btwは、ノードリクエストで、SSLv2とSSLv3の両方を有効にする方法はありますか?または、Wndoor OSレベルでこれを行う必要がありますか? – umutm

+0

サイトがファームであり、異なる要素に異なるSSLレベルがある場合に起こります。これは狂った設定になりますが、SSLv2がまったく存在しない場合、既に狂っています。 node.jsについてはお伝えできませんが、明らかにOpenSSLを使用しており、OpenSSLは設定が非常に簡単です。私は最初に問題のサイトを調査したいと思いますが、本当に正当な理由がなければ、SSLv2を有効にしたくありません。 – EJP

+1

問題を正確に特定できませんでした。完了したら、私はこのエントリを更新します。 – umutm

-3

間欠的なエラーがあなたをハングアップしないように、いくつかの再試行ロジックが必要なように聞こえます。

function faultTolerantRequest (url, trys, retryTime, cb) { 
    var attempts = 0; 
    function requestFinished (err, res, body) { 
    if (err) { 
     if (attempts < trys) { 
     return setTimeout(tryRequest, retryTime); 
     } 
     return cb(err); 
    } 
    return cb(err, res, body); 
    } 
    function tryRequest() { 
    attempts++; 
    return request(url, requestFinished); 
    } 
    return tryRequest(); 
} 
88

間違ったポート(80など)からHTTPSリソースを要求すると、このようなエラーメッセージが表示されます。リクエストオプションに正しいポート443を指定してください。

+0

ちょうどドッカーでこの問題があった、私のドッカーで作成:ポート: - "443:80" – IAmJulianAcosta

2
var https = require('https'); 
https.globalAgent.options.secureProtocol = 'SSLv3_method'; 
+1

は私の問題を解決しませんでしたが、有用な情報tha – keinabel

+0

SSLv3は危険で古くなっています...代わりにsecureProtocol: "TLSv1_method " –

2

私はrequire('http')を使用している必要がありますrequire('https')を使用していたので、私はこのエラーを得ました。

0

Amazon RDSに接続中にこのエラーが発生しました。私はそれが開発サーバーであり、誰もそれを使用していない間、サーバーの使用状況の50%を確認しました。

以前は動作していましたが、接続設定で何も変更されていませんでした。 サーバをリブートすると、問題が解決しました。

0

私はこの問題を抱えていました(それぞれのパッケージで403エラー)、私はそれを解決するためにインターネット上で何も素晴らしいものを見つけませんでした。 私のユーザーフォルダ内の.nprmcファイルが間違っていて誤解されていました。 私は

proxy=http://XX.XX.XXX.XXX:XXX/ 

からこのnpmrcラインを変更:

proxy = XX.XX.XXX.XXX:XXXX 
関連する問題