Axios: Cara mengabaikan masalah SSL

Dibuat pada 13 Nov 2016  ·  35Komentar  ·  Sumber: axios/axios

Apakah mungkin untuk mengonfigurasi Axios (berjalan di node.js) untuk mengabaikan kesalahan SSL tertentu (seperti sertifikat yang kedaluwarsa)? Saya ingin tahu bahwa sertifikat SSL bermasalah, tetapi saya ingin transaksi tetap selesai (secara default, gagal).

Komentar yang paling membantu

Anda dapat mengonfigurasi aksioma untuk menggunakan agen khusus dan menyetel rejectUnauthorized ke false untuk agen tersebut:

// 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 });

Semoga ini membantu!

Semua 35 komentar

Anda dapat mengonfigurasi aksioma untuk menggunakan agen khusus dan menyetel rejectUnauthorized ke false untuk agen tersebut:

// 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 });

Semoga ini membantu!

@nickuraltsev
itu tidak berfungsi dengan perubahan di atas
const https = membutuhkan('https');
aksio({
url: url,
metode: 'DAPATKAN',
header: {
'Jenis Konten': 'aplikasi/json'
},
tipe respons: 'json',
httpsAgent: baru https.Agent({ rejectUnauthorized: false })
})
.kemudian(tanggapan => {
})
.catch(kesalahan => {
})
}
}

Sebenarnya, saya menemukan itu berfungsi, tetapi secara khusus membahas sertifikat yang ditandatangani sendiri. Itu tidak mengizinkan sertifikat yang kedaluwarsa atau tidak valid. Untuk mengizinkan sertifikat _any_, Anda harus menambahkan baris ini di dekat bagian atas kode Anda;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

Ini akan memungkinkan apa saja, tetapi juga berbahaya, jadi gunakan dengan hati-hati.

@Eric24
Tidak berfungsi jika saya menambahkan kode di atas pada baris pertama file saya.
Tolong beri tahu saya jalur yang tepat untuk menambahkan.

Bagi saya (perlu mengabaikan sertifikat yang kedaluwarsa tetapi sebaliknya valid), itu berfungsi hanya dengan menambahkan baris ini tepat setelah "gunakan ketat"; di bagian atas file node.js utama, sebelum kode lainnya. Ini adalah pengaturan semua-atau-tidak sama sekali, tetapi tujuannya adalah untuk memungkinkan transaksi HTTPS selesai ketika agen akan menghentikan transaksi karena masalah sertifikat. Mungkin skenario khusus Anda tidak terkait dengan sertifikat?

jika tidak dalam simpul, bagaimana cara mendapatkan modul https????

modul https TIDAK berfungsi dengan reaksi asli

+1

@psahni Apakah Anda tahu cara mengabaikan masalah ssl di React Native?

@Germinate - Saya masih berjuang dengan masalah yang sama. Kita harus mengubah kode android asli. Dan kita harus membangun reaksi asli dari sumber. Saya belum tahu bagaimana melakukannya.
Salah satu solusinya adalah silakan buat server proxy di simpul di antara server asli dan server utama yang bereaksi. Dan rutekan permintaan dari reaksi asli ke proxy node ke server utama.

@psahni Sudahkah Anda mencoba solusi ini?

@Germinate - Tampak hebat!. Terima kasih telah membagikannya. Jadi setelah melakukan perubahan itu. Bisakah kita menggunakan modul react-native secara langsung?

Masih tidak bekerja dengan reaksi asli :/

Apakah itu berfungsi di browser? Saya menggunakan axios dengan aplikasi vue js dan saya mendapatkan kesalahan net::ERR_CERT_AUTHORITY_INVALID ini dengan sertifikat yang ditandatangani sendiri. Solusi yang diusulkan mengasumsikan bahwa saya dapat menggunakan https.Agent tetapi saya tidak tahu bagaimana saya dapat menggunakan modul https di vue. Apakah ada cara lain? Terima kasih

apakah kita memiliki https di dalam react-native? jika ya bagaimana kita memasukkannya?

jika Anda menggunakan nuxt/axios, Anda dapat mencapai hal di atas dengan membuat plugin dengan kode berikut:
Berikut adalah metode yang didokumentasikan untuk membuat plugin di nuxt: https://axios.nuxtjs.org/extend.html

Pola pengembangan ini dapat berguna jika Anda mengembangkan API secara lokal dengan sertifikat yang ditandatangani sendiri.

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;
        }                     
    });
}

apa contoh "posting" ini?

Saat ini mencoba melakukan permintaan posting, dan mengabaikan SSL.

jika Anda menggunakan nuxt/axios, Anda dapat mencapai hal di atas dengan membuat plugin dengan kode berikut:
Berikut adalah metode yang didokumentasikan untuk membuat plugin di nuxt: https://axios.nuxtjs.org/extend.html

Pola pengembangan ini dapat berguna jika Anda mengembangkan API secara lokal dengan sertifikat yang ditandatangani sendiri.

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;
        }                     
    });
}

Apakah saya memanggil permintaan asyncData atau axios yang ada secara berbeda setelah membuat axios.js di folder modul?

Lihat ini, ini menyelesaikannya untuk saya: https://stackoverflow.com/a/54475750/8577483

Masih mengalami masalah ini. Menggunakan https-browserify untuk mendapatkan modul https node di browser.

const instance = axios.create({
    httpsAgent: new https.Agent({  
        rejectUnauthorized: false
    })
});

instance.post("https://...");

mengembalikan ERR_CERT_AUTHORITY_INVALID

Saya juga mendapatkan kesalahan, menggunakan aplikasi yang dibuat dengan 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
    })
});

Saya juga mencoba menambahkan process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; di awal file (di bawah const https = require('https'); ) tanpa efek.

Mengapa ini ditutup? Sepertinya tidak ada solusi yang berfungsi.

Saya menemukan utas ini karena kesalahan 'ssl handshake failed' di log saya dan mempertimbangkan untuk mencoba mematikan pemeriksaan seperti yang dijelaskan oleh orang lain di atas. Setelah banyak pemecahan masalah (saya awalnya berpikir bahwa itu terkait dengan CORS) akhirnya karena sertifikat SSL saya tidak memiliki sertifikat CA yang disertakan. Jika Anda menduga ini mungkin, gunakan salah satu SSL gratis memeriksa layanan seperti https://www.ssllabs.com/ssltest/ atau https://www.digicert.com/help/ untuk mengonfirmasi bahwa sertifikat Anda bagus. Semoga ini bisa membantu orang lain.

Saya tiba-tiba berjuang dengan masalah ini juga (meskipun tidak mengubah apa pun). Apa yang memperbaikinya bagi saya hanyalah melakukan permintaan GET standar melalui tab baru. Maksud saya, jika Anda memiliki rute "/ pengguna", coba buka tab baru dengan {serverPath}/pengguna. Itu membantu saya, meskipun saya tidak yakin mengapa.

Anda juga bisa menambahkan variabel lingkungan ketika Anda memulai lingkungan dev Anda:

ekspor NODE_TLS_REJECT_UNAUTHORIZED=0 && benang dev --env.NODE_TLS_REJECT_UNAUTHORIZED=0

Dan mungkin menambahkannya ke file package.json Anda

"scripts": {
  "dev": "export NODE_TLS_REJECT_UNAUTHORIZED=0 && nuxt --env.NODE_TLS_REJECT_UNAUTHORIZED=0",

Saya menghadapi masalah yang sama. Saya menggunakan axios dan menggunakan metode POST. Saya mencoba semua solusi yang disebutkan di atas tetapi tidak berhasil. Apakah ada yang menemukan solusi kerja? Terima kasih.

Saya tidak bisa membuatnya bekerja untuk satu contoh.

// doesn't work
axios.create({
    httpsAgent: new https.Agent({ rejectUnauthorized: false })
});

// it works
https.globalAgent.options.rejectUnauthorized = false;

Menggunakan simpul;
Ini adalah kesalahan SSL: unable to get local issuer certificate (20) (dari permintaan curl)

Adakah pembaruan untuk React Native ini?

Saya mengalami masalah yang sama dengan @Falci - hanya berfungsi saat mengatur bendera secara global. Masalah saya sedikit berbeda, Error: self signed certificate in certificate chain

Saya menghadapi masalah yang sama. Saya menggunakan axios dan menggunakan metode POST. Saya mencoba semua solusi yang disebutkan di atas tetapi tidak berhasil. Apakah ada yang menemukan solusi kerja? Terima kasih.

import axios from "axios";
const https = require('https');

const resp = await axios({
      url,
      method: "POST",
      auth,
      httpsAgent: new https.Agent({
        rejectUnauthorized: false
      })
    });

Bekerja untuk saya.

Terjebak di sini untuk lingkungan React Native. Adakah solusi untuk aplikasi React Native?

Hai @fozhao

Jika Anda mencoba menggunakan sertifikat yang tidak valid, Anda dapat mencoba mengikuti pendekatan ini:

  1. Instal sertifikat di macbook Anda
  2. Paksa percayai sertifikat dan ekspor itu
  3. iOS - Instal sertifikat ekspor pada perangkat dan masalah terpecahkan.
    Android - Instal sertifikat yang diekspor pada perangkat dan tambahkan berikut ini ke file network_security_config.xml Anda.
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
     ....
</network-security-config>

Solusi ini bekerja untuk saya.
Terima kasih!

@Fonger tolong jelaskan lebih lanjut dengan hits dan contoh.

https modul untuk node, tidak berfungsi di Vue/React/... Pada dasarnya hasilnya sama dengan process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
Jika Anda ingin mengabaikan SSL karena Anda menggunakan SSR dan Anda tetap mengambil data di server lokal, ini tidak akan menyebabkan masalah keamanan.

Pastikan untuk mengatur variabel env itu di server, saya membuat kesalahan dengan mencoba mengaturnya di klien dan server masih macet.

@tamangsuresh kenapa saya?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat