Request: エラー:DEPTH_ZERO_SELF_SIGNED_CERT

作成日 2013年01月22日  ·  51コメント  ·  ソース: request/request

Apache2サーバーで自己署名テスト証明書を使用していますが、requestを呼び出すと、次のエラーが発生します。

エラー:DEPTH_ZERO_SELF_SIGNED_CERT

以下のコードを使用してテストしています。 私もneedleを使用していて、 rejectUnauthorized = trueオプションで動作することにくださいリクエストに応じて同等のものを見つけることができませんでした( strictSSL = falseを試し

var request = require('request'),
    needle = require('needle');

request('https://127.0.0.1', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log("REQUEST:"+body);
  } else {
    console.error("REQUEST: "+error)
  }
});

needle.get('https://127.0.0.1',{rejectUnauthorized:false},function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log("NEEDLE:"+body);
  }
});

最も参考になるコメント

rejectUnauthorized: falseは私にはうまくいきませんでした。 代わりに、以下を追加するとエラーが削除されました。

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" // Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs

全てのコメント51件

ここでも同じ問題があります。 ノードv0.10.1と最新のリクエストバージョンを使用します。

ここでv0.10.2を使用して同じ問題

v0.11.1-preでも同じ問題が発生します。 セキュリティツールを開発しているため、無効な証明書を受け入れる必要があります。

@client = tls.connect @ port@ target 、{rejectUnhauthorized:false}、=>
@ client.writeメッセージ
@ client.setEncoding'utf-8 '

必要なコードは次のとおりです。

request({ url : 'https://127.0.0.1', rejectUnhauthorized : false }, function...

編集:私が作ったラメのコメントを削除しました、原因、それは私のラメです....

rejectUnauthorized: false

rejectUnauthorized: falseは私にはうまくいきませんでした。 代わりに、以下を追加するとエラーが削除されました。

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" // Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs

NODE_TLS_REJECT_UNAUTHORIZED = 0が機能することを確認できますが、rejectUnauthorized:falseは機能しません。
ノードv0.10.1を使用する

@ dankohn@ cliffano + 1ここであなたの提案のために。

@case NODE_TLS_REJECT_UNAUTHORIZEDは、 https://github.com/joyent/node/pull/4023によると、古い動作(無効な自己署名証明書を許可)に戻すためのエスケープハッチにすぎないため、自分自身を取得するための回避策にすぎません。 -署名された証明書が機能しています。
したがって、rejectUnauthorizedのように見えます。falseは、本来の動作を行っていません。

多くの場合、 {rejectUnauthorized:false}機能し、他のいくつかの場合はコアに伝播しないように見えることを私たちは知っています。 答える必要のある質問は、「リクエストがこのオプションを適切に設定しないエッジケースがありますか、それともコアが一部のエッジケースでオプションを適切に監視していないか」です。

その質問に答えるには、完全に再現可能なテストが必要です。

残念ながら、私はテストケースを持っていませんが、これは役立つかもしれません:

  • 私が話しているサーバーは、何らかの理由でSSLv3を必要とします(参照用のPythonコード;ノードで同じエラーが発生していました)
  • これが私がSSLv3を強制する方法です(これはリクエストで行う方法を見つけることができませんでした): https.globalAgent.options.secureProtocol = 'SSLv3_method';

やあみんな、

図書館で働いているすべての人に感謝します。 いくつかのテストに自己署名証明書を使用しようとしましたが、同じエラーが発生しました。 以下に詳細を記載しました。 他に何か必要な場合はお知らせください。 strictSSLとrejectUnauthorizedのすべての組み合わせを試しましたが、機能しないようです。

ノードバージョン:0.10.10
OS:Windows 7 x64
OpenSSL:Win32 1.0.1e
以下を使用して生成された証明書:
openssl genrsa –out priv.pem 1024
openssl req -x509 -new -key priv.pem -days 3650 -out cert.crt

サーバーを作成するためのコード

var https = require('https');
var express = require('express');
var app = express();
var credentials = {
    key: fs.readFileSync(__dirname + '/priv.pem', 'utf8'),
    cert: fs.readFileSync(__dirname + '/cert.crt', 'utf8')
};
var server = https.createServer(credentials, app);
server.listen(3000);

このようにリクエストを使用する:

var request = require('request');
request.defaults({
    strictSSL: false, // allow us to use our self-signed cert for testing
    rejectUnauthorized: false
});
request('https://localhost:3000', function(err) {
    console.error(err); // outputs the zero_depth error
});

@dankohnは私のために働いた

[email protected]とnodejs v0.10.15 rejectUnauthorized: falseまだ機能しない場合でも、このハックを使用する必要があります。

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

有効性を確認し、自己署名証明書を受け入れたいので、これは醜いです。

テストの作成中に問題が見つかりましたが、複製できませんでした。

この問題の興味深い発生がありました。 strictSSL:falseを設定します。これは、あるボックスでは機能しましたが、別のボックスでは機能しませんでした(rejectUnauthorized = falseも失敗しました)。 @dankohnの提案は

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

Restlerにも使用できます。

rejectUnauthorized: false (ノードv0.10.26)を使用して動作させることができました

私は閉じてマージされていることを知っています
しかし、おそらく言及する価値があります:
一部のサードパーティライブラリは、依然としてリクエストに依存しており、 rejectUnauthorized: falseなしで使用します

これはまだ問題ですか?

これはとても古いので閉じます。それでも問題が解決しない場合は、お知らせください。再開します。

これはまだ私にとっての問題です

ノード0.10.31 /リクエスト:2.42.0

スクリーンショット: http

request.defaults(
  strictSSL: false # allow us to use our self-signed cert for testing
  rejectUnauthorized: false)

request "https://localhost:8000/index.html", (err, res, body) ->
  return console.error err if err # DEPTH_ZERO_SELF_SIGNED_CERT

私はまだこれにも問題があります、v0.10.20

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"を使用します。 今のところトリック

@frankfuuこの「トリック」はドキュメントに含めるべきだと思いますか?

はい、このようなSSLの問題や#811のドキュメントとテストを使用できます。 すべての証明書を受け入れ、必要な証明書のみを受け入れることを含める必要があります。

@syzerおそらく? 少なくとも私はそれが便利だと思った

それでも私にとっては問題です、v0.10.22。

@ dankohn@ cliffano 「NODE_TLS_REJECT_UNAUTHORIZED」:「0」はどこに入れましたか?

これは私のコードです(動作しません):
var soap = require( 'soap');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email: ' my @ email.de '、Passwort: 'passwort123'、deviceMac:'00 -14-22-01-23-45 '};
soap.createClient(url、{"NODE_TLS_REJECT_UNAUTHORIZED": "0"}、function(err、client){
client.myOperation(args、function(err、result){
console.log(err、result);
});
});

ファイルの一番上に配置します。

// Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

ダンコーンmailto:[email protected]
tel:+ 1-415-233-1000

11時41分AMに木、2014年10月9日には、タン[email protected]書きました:

@dankohn https://github.com/dankohn、@cliffano
https://github.com/cliffanoどこに置きましたか
"NODE_TLS_REJECT_UNAUTHORIZED": "0" in?

これは私のコードです(動作しません):
var soap = require( 'soap');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email: ' my @ email.de '、Passwort: 'passwort123'、deviceMac:
'00 -14-22-01-23-45 '};
soap.createClient(url、{"NODE_TLS_REJECT_UNAUTHORIZED": "0"}、
function(err、client){
client.myOperation(args、function(err、result){
console.log(err、result);
});
});


このメールに直接返信するか、GitHubで表示してください
https://github.com/mikeal/request/issues/418#issuecomment-58528954

@dankohn :同じエラーメッセージが表示されます。 私のコードは次のようになります。

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var soap = require( 'soap');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email: ' my @ email.de '、Passwort: 'passwort123'、deviceMac:'00 -14-22-01-23-45 '};
soap.createClient(url、{rejectUna uthorized:false }、function(err、client){
client.myOperation(args、function(err、result){
console.log(err、result);
});
});

@apiton :もう解決してもらえますか? 私はまだ同じ問題を抱えています。

私のURLは「 https:// www。 」ではなく「 https:// link。 」で始まりますが、これが問題である可能性がありますか?

@jksduaの例は通常であり、エラーを再現することができました。

@fourq@jksduaの両方の問題を解決するには、これを実行します

var request = require('request');
var request = request.defaults({
  strictSSL: false,
  rejectUnauthorized: false
});

または

var request = require('request').defaults({
  strictSSL: false,
  rejectUnauthorized: false
});

defaultsメソッドは関数を返します。
したがって、デフォルトのオプションを機能させるには、変数requestを関数に割り当てる必要があります。

また、 @ frankfuuは、 rejectUnauthorizedオプションでリクエストをどのように使用しているかの例を提供できますか?

それでも問題が解決しない場合は、別のテストケースを入手したいと思います。

@thadeuszlay私はあなたがちょうど使用の助けを求めたことを知っています:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

あなたはまだこれについて助けが必要ですか?

Requestのバージョン2.45.0では、 strictSSLをfalseに設定するだけで、 rejectUnauthorizedもfalseになります。

ただし、 strictSSLをfalseに指定しない場合、 rejectUnauthorizedデフォルトでundefinedます。
私はそれが望ましい振る舞いであると仮定しています。

こんにちは@seanstrom

私が作った例を思い出せませんが、それは@fourqが持っていたものと似てい

request.defaults(
strictSSL:false
requireUnauthorized:false)

「トリック」を使ってから問題はありません

@frankfuu
@fourqの例に基づいて、私は上記の解決策を思いつきました。
https://github.com/mikeal/request/issues/418#issuecomment -58959393

見て、それがあなたのために働くかどうか見ることができますか?

Requestのバージョン2.45.0では、strictSSLをfalseに設定するだけで、rejectUnauthorizedもfalseになります。

以前はrejectUnauthorizedなしで失敗したwfmです。

@andig私のチャット用語は少しあいまいなので、Imはあなたが言っていることを確認しています:
strictSSL: falseはあなたのために働いています
正しい?

@andig私のチャット用語は少しあいまいなので、Imはあなたが言っていることを確認しています:

@seanstromは幼稚な言葉を許してください。

strictSSLの使用:falseが機能しています。 正しい?

正しい。 以前に失敗したSSL接続でrejectUnauthorized:falseが必要でしたが、strictSSL:falseのみで機能するようになりました。

この号を締めくくります
それでも問題が解決しない場合は、再度開きます。
お知らせ下さい

まだここで問題v10.0.32
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"を試行するとき;
私は得る:
_stream_readable.js:748
新しいエラーをスローします( '現在、古いモードに切り替えることはできません。');

@webduvetコードサンプルを教えていただけますか?
これは、この問題のデバッグに役立ちます

@seanstrom確かに、それはnodejsドキュメントからの非常に単純なサンプルでした。

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
 var tls = require( 'tls');
 var fs = require( 'fs');
 var options = {
 証明書:fs.readFileSync( 'test-cert.pem')、
 strictSSL:false
 };
 var cleartextStream = tls.connect(8000、options、function(){
 console.log( 'クライアント接続'、
 cleartextStream.authorized? '承認済み': '未承認');
 process.stdin.pipe(cleartextStream);
 process.stdin.resume();
 });

@seanstrom自己署名

それは、rejectUnauthorized:falseはすべての検証をオフにしますよね? PEM、キー、またはアクセス可能な証明書のリストを提供しなくても機能するためです。 証明書(またはキー)を提供し、リクエストエンジンサポートに実際に証明書リストを確認してもらう必要があります。

はい、 rejectUnauthorized: falseまたはstrictSSL: falseは、すべての証明書の検証をオフにするため、理想的なソリューションではありません。 ただし、自己署名証明書または認識されない証明書用に独自のCAを追加することは可能です。 これを行う方法の例については、HTTPSテストをご覧ください//github.com/request/request/blob/master/tests/test-https.js

ありがとう、ナイレン。 そのテストは、私たちが間違っていたことを明らかにするのに役立ちました。 最初に自己署名CAを作成し、次にそのCAを使用してサーバー証明書に署名するのではなく、自己署名証明書を使用していました。 それは私たちがやっていることだと思っていましたが、そうではありませんでした。

原理を理解したい方へ。

https://nodejs.org/dist/v0.12.9/docs/api/tls.html#tls_tls_connect_options_callback

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "1";
var tls = require('tls');
var fs = require('fs');
var constants = require('constants');
var util = require('util');

var options = {
    host: 'localhost',
    strictSSL: true,
    ca: [fs.readFileSync('trusted1.pem'), fs.readFileSync('trusted2.pem') ],
    rejectUnauthorized: true, // Trust to listed certificates only. Don't trust even google's certificates.
    secureOptions: constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_TLSv1 | constants.SSL_OP_NO_TLSv1_1,
    secureProtocol: 'SSLv23_method',
    ciphers: 'ECDHE-RSA-AES128-SHA256'
};

var socket = tls.connect(3001, options, function() {
    console.log('client connected',
        socket.authorized ? 'authorized' : 'unauthorized',
        socket.encrypted ? 'encrypted' : 'unencrypted',
        '\nCipher: ' + util.inspect(socket.getCipher()),
        '\nCert Info: \n' + util.inspect(socket.getPeerCertificate(true)));
    //process.stdin.pipe(socket);
    //process.stdin.resume();
});

本当にそれはあなたのすべての問題に聞こえますあなたのクライアントシステムにはSSL証明書の設定がありません
最初にシステムのopenSslを構成し、次にリクエストを追加して、プロセスに取得するか投稿するかを指定します。env.NODE_TLS_REJECT_UNAUTHORIZED= "0"; それはインシャアッラーで動作します

やあ、

私は同様の問題に直面していますが、「GET」が正常に機能している間は「POST」メソッドでのみ発生します。 詳細情報は次のとおりです。

テストコード:

`
var frisby = require( 'frisby');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var CONF = process.env ['CONF'];
var config = require( '../ config /' + CONF);
var data = require( '../ tests_data / batch_data.json');

frisby.globalSetup({
リクエスト: {
strictSSL:false、
requireUnauthorized:false、
ヘッダー:{'認証': 'トークン'}、
inspectOnFailure:true
}
});

frisby.create( 'テスト#1:晴れた日のシナリオ')
.post(config.api_url + data.api_endpoint、data.test_strace、{rejectUnauthorized:false}、{json:true})
.inspectHeaders()
.inspectRequest()
.inspectJSON()
.expectJSON(data.batch_test_response_1)
。投げ捨てる();
`

実行エラー:
エラー-1
Message: Error: Error parsing JSON string: Unexpected token D Given: Destination URL may be down or URL is invalid, Error: ESOCKETTIMEDOUT Stacktrace: Error: Error parsing JSON string: Unexpected token D Given: Destination URL may be down or URL is invalid, Error: ESOCKETTIMEDOUT at _jsonParse (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:1219:11) at null.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:650:20) at null.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:1074:43) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

エラー-2

Message: TypeError: Cannot read property 'headers' of undefined Stacktrace: TypeError: Cannot read property 'headers' of undefined at Frisby.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:894:20) at Frisby.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:940:8) at null.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:1112:18) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

これらの問題を修正するには、ここで何を更新する必要がありますか?

ありがとう

これを追加すると、解決するはずです。

https.globalAgent.options.rejectUnauthorized = false;

このページは役に立ちましたか?
0 / 5 - 0 評価