特定のSSLエラー(期限切れの証明書など)を無視するようにAxios(node.jsで実行)を構成することは可能ですか? SSL証明書に問題があることを知りたいのですが、とにかくトランザクションを完了させたいです(デフォルトでは失敗します)。
カスタムエージェントを使用するようにaxiosを構成し、そのエージェントのrejectUnauthorized
をfalse
に設定できます。
// At instance level
const instance = axios.create({
httpsAgent: new https.Agent({
rejectUnauthorized: false
})
});
instance.get('https://something.com/foo');
// At request level
const agent = new https.Agent({
rejectUnauthorized: false
});
axios.get('https://something.com/foo', { httpsAgent: agent });
お役に立てれば!
@nickuraltsev
上記の変更では機能しません
const https = require( 'https');
axios({
url:url、
メソッド: 'GET'、
ヘッダー:{
'Content-Type': 'application / json'
}、
responseType: 'json'、
httpsAgent:new https.Agent({rejectUnauthorized:false})
})
.then(response => {
})
.catch(error => {
})
}
}
実際、私はそれが機能することを発見しました、しかしそれは特に自己署名証明書に対処します。 期限切れまたは無効な証明書は許可されません。 _any_証明書を許可するには、コードの先頭近くにこの行を追加する必要があります。
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
これでほぼ何でも可能ですが、危険でもあるので注意して使用してください。
@ Eric24
上記のコードをファイルの最初の行に追加すると、機能しません。
追加の正確なパスを教えてください。
私にとっては(期限切れであるが有効な証明書を無視する必要があります)、「usestrict」の直後にこの行を追加するだけで機能しました。 メインのnode.jsファイルの先頭、他のコードの前。 これはオールオアナッシングの設定ですが、証明書の問題が原因でエージェントがトランザクションを終了する場合に、HTTPSトランザクションを完了できるようにすることが目的です。 たぶんあなたの特定のシナリオは証明書に関連していませんか?
ノードにない場合、httpsモジュールを取得する方法????
httpsモジュールはreact-nativeでは機能しません
+1
@psahni React Nativeの
@ Germinate-私はまだ同じ問題に苦しんでいます。 ネイティブのAndroidコードを変更する必要があります。 そして、ソースからネイティブに反応するように構築する必要があります。 どうすればいいのかまだわかりません。
1つの解決策は、ReactNativeサーバーとメインサーバーの間のノードにプロキシサーバーを作成することです。 そして、ReactNativeからノードプロキシへのリクエストをメインサーバーにルーティングします。
@psahniこのソリューションを試しましたか?
@ Germinate-見栄えがいいです!。 共有していただきありがとうございます。 したがって、これらの変更を行った後。 react-nativeモジュールを直接使用できますか?
まだreactnativeで動作していません:/
ブラウザで動作しますか? vue jsアプリケーションでaxiosを使用していますが、自己署名証明書でこのnet :: ERR_CERT_AUTHORITY_INVALIDエラーが発生します。 提案されたソリューションは、https.Agentを使用できることを前提としていますが、vueでhttpsモジュールを使用する方法がわかりません。 別の方法はありますか? ありがとう
react-native内にhttpsがありますか? はいの場合、どのように含めるのですか?
nuxt / axiosを使用している場合は、次のコードでプラグインを作成することで上記を実現できます。
nuxtでプラグインを作成するための文書化された方法は次のとおりです: https ://axios.nuxtjs.org/extend.html
この開発パターンは、自己署名証明書を使用してローカルでAPIを開発している場合に役立ちます。
import https from 'https';
export default function ({ $axios, store }) {
const agent = new https.Agent({
rejectUnauthorized: false
});
$axios.onRequest(config => {
if (process.env.dev) {
config.httpsAgent = agent;
}
});
}
これの「投稿」の例は何ですか?
現在、POSTリクエストを実行しようとしており、SSLを無視します。
nuxt / axiosを使用している場合は、次のコードでプラグインを作成することで上記を実現できます。
nuxtでプラグインを作成するための文書化された方法は次のとおりです: https ://axios.nuxtjs.org/extend.htmlこの開発パターンは、自己署名証明書を使用してローカルでAPIを開発している場合に役立ちます。
import https from 'https'; export default function ({ $axios, store }) { const agent = new https.Agent({ rejectUnauthorized: false }); $axios.onRequest(config => { if (process.env.dev) { config.httpsAgent = agent; } }); }
modulesフォルダーにaxios.jsを作成した後、既存のasyncDataまたはaxiosリクエストを別の方法で呼び出しますか?
これを見てください、それは私のためにそれを解決しました: https :
まだこの問題が発生しています。 https-browserifyを使用して、ブラウザでノードのhttps
モジュールを取得します。
const instance = axios.create({
httpsAgent: new https.Agent({
rejectUnauthorized: false
})
});
instance.post("https://...");
ERR_CERT_AUTHORITY_INVALID
返します
また、react-create-appで作成されたアプリを使用するとエラーが発生します
const axios = require('axios');
const https = require('https');
const result = await axios('https://localhost:8080/search/' + text, {
headers: {"lang": lang},
httpsAgent: new https.Agent({
rejectUnauthorized: false
})
});
また、ファイルの先頭( const https = require('https');
)にprocess.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
を追加しようとしましたが、効果はありませんでした。
なぜこれが閉鎖されたのですか? 実用的な解決策があるようには見えません。
ログの「sslハンドシェイクに失敗しました」エラーが原因でこのスレッドに遭遇し、上記の他の人が説明したようにチェックをオフにしようと考えました。 多くのトラブルシューティングを行った後(当初はCORS関連だと思っていました)、SSL証明書にCA証明書がバンドルされていなかったことが原因でした。これが原因である可能性があると思われる場合は、無料のSSLのいずれかを使用してください。 https://www.ssllabs.com/ssltest/やhttps://www.digicert.com/help/などのサービスをチェックして、証明書が適切であることを確認します。 これが他の誰かを助けることができることを願っています。
私も突然この問題に苦しんでいました(何も変更していませんでしたが)。 私にとってそれを修正したのは、単に新しいタブを介して標準のGETリクエストを実行することでした。 つまり、ルート「/ users」がある場合は、{serverPath} / usersで新しいタブを開いてみてください。 理由はわかりませんが、それは私を助けました。
開発環境を開始するときに、環境変数を追加することもできます。
export NODE_TLS_REJECT_UNAUTHORIZED = 0 &&ヤーン開発--env.NODE_TLS_REJECT_UNAUTHORIZED = 0
そしておそらくそれをあなたのpackage.jsonファイルに追加してください
"scripts": {
"dev": "export NODE_TLS_REJECT_UNAUTHORIZED=0 && nuxt --env.NODE_TLS_REJECT_UNAUTHORIZED=0",
私は同じ問題に直面しています。 axios
を使用しており、POSTメソッドを使用しています。 上記のすべての解決策を試しましたが、うまくいきませんでした。 誰かが実用的な解決策を見つけましたか? ありがとうございました。
単一のインスタンスで機能させることができませんでした。
// doesn't work
axios.create({
httpsAgent: new https.Agent({ rejectUnauthorized: false })
});
// it works
https.globalAgent.options.rejectUnauthorized = false;
ノードを使用します。
これはSSLエラーです: unable to get local issuer certificate (20)
(curlリクエストから)
React Nativeのこれに関する更新はありますか?
@Falciと同じ問題がError: self signed certificate in certificate chain
私は同じ問題に直面しています。
axios
を使用しており、POSTメソッドを使用しています。 上記のすべての解決策を試しましたが、うまくいきませんでした。 誰かが実用的な解決策を見つけましたか? ありがとうございました。
import axios from "axios";
const https = require('https');
const resp = await axios({
url,
method: "POST",
auth,
httpsAgent: new https.Agent({
rejectUnauthorized: false
})
});
私のために働いた。
ReactNative環境のためにここで立ち往生しました。 React Nativeアプリの解決策はありますか?
こんにちは@fozhao
無効な証明書を使用しようとしている場合は、次の方法を試すことができます。
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system"/>
<certificates src="user"/>
</trust-anchors>
</base-config>
....
</network-security-config>
この解決策は私のために働いた。
ありがとうございました!
@Fonger plzは、ヒットと例でさらに詳しく説明します。
httpsモジュールはノード用で、Vue / React /では機能しません...基本的にはprocess.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
と同じ結果になります
SSRを使用していて、とにかくローカルサーバーでデータをプリフェッチしているためにSSLを無視したい場合、これによってセキュリティの問題が発生することはありません。
ただし、サーバーでそのenv変数を設定してください。クライアントで設定しようとして間違えたため、サーバーがクラッシュしました。
@tamangsureshなぜ私?
最も参考になるコメント
カスタムエージェントを使用するようにaxiosを構成し、そのエージェントの
rejectUnauthorized
をfalse
に設定できます。お役に立てれば!