web-dev-qa-db-ja.com

node-request-エラー「SSL23_GET_SERVER_HELLO:unknown protocol」を取得

node-request モジュールを使用して、GET要求を一連のURLに定期的に送信し、一部のサイトで以下のエラーを取得する場合があります。

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要求を送信することに関連している可能性があることを読みました。しかし、これはそれが不規則に起こる理由を説明しません。

ところで、私はWin 2008サーバーでnodejsを実行しています。

どんな助けも大歓迎です。

69
umutm

これは完全に私の悪でした。

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

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

14
umutm

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

105
Gaf King

一部のサイトはSSLv2を使用しているか、少なくともSSLv2サーバーハローを送信していますが、クライアントはSSLv2を使用しないか、使用するように構成されていません。ここでポリシーを決定する必要があります。 SSLv2は数年前に地球の表面から姿を消したはずであり、それをまだ使用しているサイトは安全ではありません。ただし、彼らと話をする必要がある場合は、可能であれば、最後に有効にする必要があります。できればサイト所有者に文句を言うでしょう。

4
user207421

この問題(パッケージごとに403エラー)がありましたが、インターネットでそれを解決するものはありませんでした。 ユーザーフォルダー内の.npmrcファイルが間違っていて誤解されていました。このnpmrc行を

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

に:

proxy = XX.XX.XXX.XXX:XXXX
3

require('https')を使用していたはずの場所でrequire('http')を使用していたため、このエラーが発生しました。

2
Ben
var https = require('https');
https.globalAgent.options.secureProtocol = 'SSLv3_method';
2
user3180229

私の場合(WebサイトSSLはev曲線を使用)、SSLの問題はこのオプションを追加することで解決されましたecdhCurve: 'P-521:P-384:P-256'

request({ url, 
   agentOptions: { ecdhCurve: 'P-521:P-384:P-256', }
}, (err,res,body) => {
...

JFYI、これは誰かを助けるかもしれない

0
Denisix

Amazon RDSへの接続中にこのエラーが発生しました。サーバーが開発サーバーであり、誰も使用していないときに、CPU使用率の50%のサーバーステータスを確認しました。

以前は機能していましたが、接続構成の変更はありません。サーバーを再起動すると問題が解決しました。

0
Diaa Kasem

要するに、

vi ~/.proxy_info

export http_proxy=<username>:<password>@<proxy>:8080
export https_proxy=<username>:<password>@<proxy>:8080

source ~/.proxy_info

これが急いで誰かを助けることを願っています:)

0
Prateek Mishra