Axios: كيفية تجاهل مشكلات SSL

تم إنشاؤها على ١٣ نوفمبر ٢٠١٦  ·  35تعليقات  ·  مصدر: axios/axios

هل من الممكن تكوين Axios (يعمل في node.js) لتجاهل أخطاء SSL معينة (مثل الشهادات منتهية الصلاحية)؟ أود أن أعرف أن شهادة 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 });

أتمنى أن يساعدك هذا!

ال 35 كومينتر

يمكنك تكوين 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 });

أتمنى أن يساعدك هذا!

تضمين التغريدة
لا يعمل مع التغييرات المذكورة أعلاه
const https = تتطلب ('https') ؛
أكسيوس ({
url: url ،
الطريقة: "احصل" ،
الرؤوس: {
"نوع المحتوى": "application / json"
} ،
النوع: "json" ،
httpsAgent: https.Agent جديد ({رفضUnauthorized: false})
})
ثم (استجابة => {
})
. صيد (خطأ => {
})
}
}

في الواقع ، أجد أنها تعمل ، لكنها تتناول على وجه التحديد الشهادات الموقعة ذاتيًا. لا يسمح بالشهادات منتهية الصلاحية أو غير الصالحة. للسماح بشهادة _any_ ، يجب عليك إضافة هذا السطر بالقرب من أعلى الكود الخاص بك ؛

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' ،

سيسمح هذا بأي شيء تقريبًا ، ولكنه خطير أيضًا ، لذا استخدمه بحذر.

ههههههههههه
إنه لا يعمل إذا قمت بإضافة الكود أعلاه في السطر الأول من ملفي.
واسمحوا لي أن أعرف المسار الدقيق للإضافة.

بالنسبة لي (أحتاج إلى تجاهل شهادة منتهية الصلاحية ولكنها سارية المفعول) ، فقد نجحت ببساطة عن طريق إضافة هذا السطر مباشرة بعد "استخدام صارم" ؛ في الجزء العلوي من ملف node.js الرئيسي ، قبل أي كود آخر. إنه إعداد الكل أو لا شيء ، ولكن الغرض منه هو السماح بإكمال معاملة HTTPS عندما ينهي الوكيل المعاملة بخلاف ذلك بسبب مشكلة في الشهادة. ربما لا يرتبط السيناريو الخاص بك بالشهادة؟

إذا لم يكن في العقدة ، كيف تحصل على وحدة https ؟؟؟؟

لا تعمل وحدة https مع التفاعل الأصلي

+1

psahni هل تعرف كيف تتجاهل مشكلة SSL في React Native؟

Germinate - ما زلت أعاني من نفس المشكلة. علينا تغيير كود android الأصلي. وعلينا بناء رد فعل أصلي من المصدر. لا أعرف كيف أفعل ذلك حتى الآن.
أحد الحلول هو إنشاء خادم وكيل في عقدة بين الخادم الأصلي والخادم الرئيسي. وقم بتوجيه الطلب من رد الفعل الأصلي إلى وكيل العقدة إلى الخادم الرئيسي.

psahni هل جربت هذا الحل ؟

Germinate - تبدو رائعة !. شكرا لتقاسمها. لذلك بعد إجراء تلك التغييرات. هل يمكننا استخدام وحدة رد الفعل الأصلية مباشرة؟

ما زلت لا تعمل مع التفاعل الأصلي: /

هل يعمل في المتصفح؟ أنا أستخدم axios مع تطبيق vue js وأحصل على خطأ net :: ERR_CERT_AUTHORITY_INVALID بشهادة موقعة ذاتيًا. يفترض الحل المقترح أنه يمكنني استخدام https.Agent ولكني لا أعرف كيف يمكنني استخدام وحدة https في vue. هل هناك طريقة أخرى؟ شكرا

هل لدينا 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;
        }                     
    });
}

ما هو "ما بعد" مثال على ذلك؟

تحاول حاليًا تنفيذ طلب نشر ، وتجاهل طبقة المقابس الآمنة.

إذا كنت تستخدم 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;
        }                     
    });
}

هل أستدعي طلبات asyncData أو axios الحالية بأي شكل مختلف بعد إنشاء axios.js في مجلد الوحدات النمطية؟

انظر إلى هذا ، لقد حلته بالنسبة لي: https://stackoverflow.com/a/54475750/8577483

لا تزال تواجه هذه المشكلة. استخدام 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
    })
});

حاولت أيضًا إضافة process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; في بداية الملف (أقل من const https = require('https'); ) بدون أي تأثير.

لماذا تم إغلاق هذا؟ لا يبدو أن هناك حل عملي.

لقد صادفت سلسلة الرسائل هذه بسبب خطأ "فشل اتصال ssl" في سجلاتي وفكرت في محاولة إيقاف عمليات التحقق كما وصفها الآخرون أعلاه. بعد الكثير من تحرّي الخلل وإصلاحه (ذهبت في الأصل إلى مسار اعتقدت أنه مرتبط بـ CORS) انتهى به الأمر لأن شهادة SSL الخاصة بي لم تتضمن شهادة CA مجمعة. إذا كنت تشك في أن هذا قد يكون كذلك ، فاستخدم أحد SSL المجاني التحقق من الخدمات مثل https://www.ssllabs.com/ssltest/ أو https://www.digicert.com/help/ للتأكد من أن شهادتك جيدة. أتمنى أن يساعد هذا شخصًا آخر.

كنت أعاني فجأة من هذه المشكلة أيضًا (على الرغم من عدم تغيير أي شيء). ما تم إصلاحه بالنسبة لي هو ببساطة تنفيذ طلب GET قياسي عبر علامة تبويب جديدة. أعني بهذا أنه إذا كان لديك مسار "/ المستخدمون" ، فحاول فتح علامة تبويب جديدة مع {serverPath} / المستخدمين. لقد ساعدني ذلك ، رغم أنني لست متأكدًا من السبب.

يمكنك أيضًا إضافة متغير البيئة عند بدء بيئة التطوير الخاصة بك:

تصدير NODE_TLS_REJECT_UNAUTHORIZED = 0 && yarn dev --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
      })
    });

عملت من أجلي.

تعثرت هنا في بيئة React Native. هل من حل لتطبيق React Native من فضلك؟

مرحبا fozhao

إذا كنت تحاول استخدام شهادات غير صالحة ، يمكنك محاولة اتباع هذا الأسلوب:

  1. قم بتثبيت الشهادة في جهاز macbook الخاص بك
  2. قم بالثقة في الشهادة وقم بتصديرها
  3. iOS - قم بتثبيت شهادة التصدير على الأجهزة وحل المشكلة.
    Android - قم بتثبيت الشهادة التي تم تصديرها على الجهاز وأضف ما يلي إلى ملف yout network_security_config.xml.
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
     ....
</network-security-config>

هذا الحل يعمل من أجلي.
شكرا لك!

Fonger الرجاء توضيح المزيد من خلال الزيارات والمثال.

الوحدة النمطية https مخصصة للعقدة ، ولا تعمل في Vue / React / ... ينتج عنها أساسًا process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
إذا كنت تريد تجاهل SSL لأنك تستخدم SSR وتقوم بجلب البيانات مسبقًا على الخادم المحلي على أي حال ، فإن هذا لا ينتج عنه أي مشكلات أمنية.

تأكد من تعيين متغير env هذا على الخادم بالرغم من ذلك ، لقد ارتكبت خطأ محاولتي تعيينه على العميل وبالتالي لا يزال الخادم يتعطل.

tamangsuresh لماذا أنا؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات