web-dev-qa-db-ja.com

葉の署名を確認できません

APIに到達するためにnode.js request.jsを使用しています。このエラーが発生しています

[エラー:UNABLE_TO_VERIFY_LEAF_SIGNATURE]

私の資格情報はすべて正確かつ有効であり、サーバーには問題ありません。郵便配達員と同じリクエストをしました。

request({
    "url": domain+"/api/orders/originator/"+id,
    "method": "GET",
    "headers":{
        "X-API-VERSION": 1,
        "X-API-KEY": key
    },
}, function(err, response, body){
    console.log(err);
    console.log(response);
    console.log(body);
});

このコードは、実行可能スクリプトexで実行されています。 node ./run_file.js、それはなぜですか?サーバーで実行する必要がありますか?

110
ThomasReggi

:以下は危険であり、クライアントとサーバー間でAPIコンテンツをインターセプトおよび変更できます。

これも機能しました

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

124
ThomasReggi

アプリケーションの問題ではなく、中間CAによって署名された証明書の問題です。その事実を受け入れても続行したい場合は、次を追加してオプションをリクエストしてください。

rejectUnauthorized: false

完全なリクエスト:

request({
    "rejectUnauthorized": false,
    "url": domain+"/api/orders/originator/"+id,
    "method": "GET",
    "headers":{
        "X-API-VERSION": 1,
        "X-API-KEY": key
    },
}, function(err, response, body){
    console.log(err);
    console.log(response);
    console.log(body);
});
81

安全なソリューション

セキュリティをオフにする代わりに、必要な証明書をチェーンに追加できます。 npmからの最初のインストールssl-root-casパッケージ:

npm install ssl-root-cas

このパッケージには、ブラウザは信頼するがノードは信頼しない多くの中間証明書が含まれています。

var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject()

不足している証明書を追加します。詳細はこちらをご覧ください:

https://git.coolaj86.com/coolaj86/ssl-root-cas.js

また、次の回答を参照してください

67
CoolAJ86

CoolAJ86のソリューションは正しく、rejectUnauthorizedまたはNODE_TLS_REJECT_UNAUTHORIZEDを使用してすべてのチェックを無効にするなど、セキュリティを損なうことはありません。それでも、追加のCAの証明書を明示的に挿入する必要がある場合があります。

最初に ssl-root-cas モジュールに含まれるルートCAを試しました:

require('ssl-root-cas/latest')
  .inject();

それでもUNABLE_TO_VERIFY_LEAF_SIGNATUREエラーが発生しました。次に、私が COMODO SSL Analyzer で接続しているWebサイトの証明書を発行した人を見つけ、その機関の証明書をダウンロードし、その証明書のみを追加しようとしました。

require('ssl-root-cas/latest')
  .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');

最終的に別のエラーが発生しました:CERT_UNTRUSTED。最後に、追加のルートCAを挿入し、「my」(明らかに中間)CAを含めました。

require('ssl-root-cas/latest')
  .inject()
  .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');
41

Create React App(このエラーも発生し、この質問はGoogleの1位の結果です)の場合、おそらくHTTPS=true npm startproxyname__(package.json内の)を使用しています。開発時に自己署名されるHTTPS API。

その場合は、proxyname__を次のように変更することを検討してください。

"proxy": {
  "/api": {
    "target": "https://localhost:5001",
    "secure": false
  }
}

securename__は、WebPackプロキシが証明書チェーンをチェックするかどうかを決定し、データを取得するためにAPI自己署名証明書が検証されないことを無効にします。

2

同じ問題がありました。私は@ThomasReggiと@ CoolAJ86のソリューションをフォローしてきましたが、うまくいきましたが、ソリューションに満足していません。

証明書の構成レベルが原因で「UNABLE_TO_VERIFY_LEAF_SIGNATURE」問題が発生するためです。

@thirdenderソリューションを受け入れますが、その部分的なソリューションです nginx 公式Webサイトによると、証明書はサーバー証明書とチェーン証明書の組み合わせであることが明確に記載されています。

enter image description here

2
Sharathi RB

請願書にrejectUnauthorized:falseを入れてください。

1
Amn

これが誰かを助けるためにここに置くだけで、私の場合は異なっていて、ちょっと変わったミックスです。 superagent を介してアクセスされたリクエストでこれを取得していました-問題は証明書(適切にセットアップされている)とは関係がなく、すべてがスーパーエージェントの結果を渡すという事実と関係がありました async モジュールのウォーターフォールコールバック。修正方法:結果全体を渡す代わりに、ウォーターフォールのコールバックにresult.bodyを渡すだけです。

1
k00k

サーバーに中間証明書を含める必要があります。これにより、[エラー:UNABLE_TO_VERIFY_LEAF_SIGNATURE]が解決されます

0
Abey Thomas

GoDaddy証明書をサブドメインにインストールした後、Apacheの構成に問題がありました。元々、NodeがServer Name Indicator(SNI)を送信しない問題だと思っていましたが、そうではありませんでした。 https://www.ssllabs.com/ssltest/ を使用してサブドメインのSSL証明書を分析すると、エラーが返されましたチェーンの問題:Incomplete

SSLCertificateChainFile Apacheディレクティブを介してGoDaddyが提供するGd_bundle-g2-g1.crtファイルを追加すると、NodeはHTTPS経由で接続でき、エラーはなくなりました。

0
thirdender