Axios: So ignorieren Sie SSL-Probleme

Erstellt am 13. Nov. 2016  ·  35Kommentare  ·  Quelle: axios/axios

Ist es möglich, Axios (ausgeführt in node.js) so zu konfigurieren, dass bestimmte SSL-Fehler (wie abgelaufene Zertifikate) ignoriert werden? Ich würde gerne wissen, dass das SSL-Zertifikat ein Problem hat, aber ich möchte, dass die Transaktion trotzdem abgeschlossen wird (standardmäßig schlägt sie fehl).

Hilfreichster Kommentar

Sie können axios so konfigurieren, dass ein benutzerdefinierter Agent verwendet wird, und rejectUnauthorized false für diesen Agenten auf

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

Hoffe das hilft!

Alle 35 Kommentare

Sie können axios so konfigurieren, dass ein benutzerdefinierter Agent verwendet wird, und rejectUnauthorized false für diesen Agenten auf

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

Hoffe das hilft!

@nickuraltsev
Es funktioniert nicht mit den obigen Änderungen
const https = require('https');
Axios ({
URL: URL,
Methode: 'GET',
Überschriften: {
'Inhaltstyp': 'Anwendung/json'
},
Antworttyp: 'json',
httpsAgent: new https.Agent({ ablehnenUnauthorized: false })
})
.dann(Antwort => {
})
.catch(Fehler => {
})
}
}

Eigentlich finde ich, dass es funktioniert, aber es adressiert speziell selbstsignierte Zertifikate. Es lässt keine abgelaufenen oder ungültigen Zertifikate zu. Um _jedes_ Zertifikat zuzulassen, müssen Sie diese Zeile oben in Ihrem Code hinzufügen.

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

Dies erlaubt fast alles, ist aber auch gefährlich, also mit Vorsicht.

@Eric24
Es funktioniert nicht, wenn ich den obigen Code in der ersten Zeile meiner Datei hinzufüge.
Bitte teilen Sie mir den genauen Pfad zum Hinzufügen mit.

Für mich (da ich ein abgelaufenes, aber ansonsten gültiges Zertifikat ignorieren musste) funktionierte es, indem ich einfach diese Zeile direkt nach "use strict" hinzufügte; am Anfang der Hauptdatei node.js vor jedem anderen Code. Es handelt sich um eine Alles-oder-Nichts-Einstellung, deren Zweck jedoch darin besteht, den Abschluss einer HTTPS-Transaktion zu ermöglichen, wenn der Agent die Transaktion ansonsten aufgrund eines Zertifikatsproblems beenden würde. Vielleicht hängt Ihr spezielles Szenario nicht mit dem Zertifikat zusammen?

wenn nicht im Knoten, wie bekomme ich das https-Modul????

https-Modul funktioniert NICHT mit Reactive-native

+1

@psahni Wissen Sie, wie Sie das SSL-Problem in React Native ignorieren können?

@Germinate - Ich habe immer noch mit dem gleichen Problem zu kämpfen. Wir müssen den nativen Android-Code ändern. Und wir müssen reagieren nativ aus der Quelle bauen. Ich weiß noch nicht, wie es geht.
Eine Lösung besteht darin, einen Proxy-Server im Knoten zwischen dem React-Native- und dem Hauptserver zu erstellen. Und leiten Sie die Anfrage von React native to Node Proxy an den Hauptserver weiter.

@psahni Hast du diese Lösung ausprobiert?

@Germinate - Sieht toll aus

Funktioniert immer noch nicht mit React Native :/

Funktioniert es im Browser? Ich verwende axios mit einer vue js-Anwendung und erhalte diesen net::ERR_CERT_AUTHORITY_INVALID-Fehler mit einem selbstsignierten Zertifikat. Die vorgeschlagene Lösung geht davon aus, dass ich https.Agent verwenden kann, aber ich weiß nicht, wie ich das https-Modul auf vue verwenden kann. Gibt es eine andere Art und Weise? Danke

Haben wir https in Reactive-Native? wenn ja, wie fügen wir es ein?

Wenn Sie nuxt/axios verwenden, können Sie das oben genannte erreichen, indem Sie ein Plugin mit dem folgenden Code erstellen:
Hier ist die dokumentierte Methode zum Erstellen des Plugins in nuxt: https://axios.nuxtjs.org/extend.html

Dieses Entwicklungsmuster kann nützlich sein, wenn Sie eine API lokal mit einem selbstsignierten Zertifikat entwickeln.

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

Was ist ein "Beitrag"-Beispiel dafür?

Versucht derzeit, eine Post-Anfrage zu senden und SSL zu ignorieren.

Wenn Sie nuxt/axios verwenden, können Sie das oben genannte erreichen, indem Sie ein Plugin mit dem folgenden Code erstellen:
Hier ist die dokumentierte Methode zum Erstellen des Plugins in nuxt: https://axios.nuxtjs.org/extend.html

Dieses Entwicklungsmuster kann nützlich sein, wenn Sie eine API lokal mit einem selbstsignierten Zertifikat entwickeln.

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

Rufe ich meine bestehenden asyncData- oder axios-Anfragen anders auf, nachdem ich axios.js im Modulordner erstellt habe?

Schau dir das an, es hat es für mich gelöst: https://stackoverflow.com/a/54475750/8577483

Habe immer noch dieses Problem. Verwenden von https-browserify, um das https Modul des Knotens im Browser abzurufen.

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

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

gibt ERR_CERT_AUTHORITY_INVALID

Ich erhalte auch den Fehler, wenn ich eine App verwende, die mit React-Create-App erstellt wurde

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

Ich habe auch versucht, process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; am Anfang der Datei (unter const https = require('https'); ) ohne Wirkung hinzuzufügen.

Warum wurde das geschlossen? Scheint keine funktionierende Lösung zu geben.

Ich bin auf diesen Thread aufgrund eines Fehlers 'ssl handshake failed' in meinen Protokollen gestoßen und habe in Erwägung gezogen, die Überprüfungen wie von anderen oben beschrieben zu deaktivieren. Nach vielen Fehlerbehebungen (ich dachte ursprünglich, es sei CORS-bezogen) lag es daran, dass in meinem SSL-Zertifikat das CA-Zertifikat nicht enthalten war. Wenn Sie vermuten, dass dies daran liegen könnte, verwenden Sie eines der kostenlosen SSL Überprüfen Sie Dienste wie https://www.ssllabs.com/ssltest/ oder https://www.digicert.com/help/ , um zu bestätigen, dass Ihr Zertifikat gut ist. Hoffe das kann jemand anderem helfen.

Ich hatte plötzlich auch mit diesem Problem zu kämpfen (obwohl ich nichts geändert hatte). Was es für mich behoben hat, war einfach das Ausführen einer Standard-GET-Anfrage über eine neue Registerkarte. Damit meine ich, wenn Sie eine Route "/users" haben, versuchen Sie, einen neuen Tab mit {serverPath}/users zu öffnen. Es hat mir geholfen, obwohl ich nicht sicher bin warum.

Sie können auch einfach die Umgebungsvariable hinzufügen, wenn Sie Ihre Entwicklungsumgebung starten:

export NODE_TLS_REJECT_UNAUTHORIZED=0 && Garnentwicklung --env.NODE_TLS_REJECT_UNAUTHORIZED=0

Und vielleicht fügen Sie es Ihrer package.json-Datei hinzu

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

Ich stehe vor dem gleichen Problem. Ich verwende axios und verwende die POST-Methode. Ich habe alle oben genannten Lösungen ausprobiert, aber kein Glück. Hat jemand die funktionierenden Lösungen gefunden? Dankeschön.

Ich konnte es nicht für eine einzige Instanz zum Laufen bringen.

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

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

Knoten verwenden;
Dies ist der SSL-Fehler: unable to get local issuer certificate (20) (von einer curl-Anfrage)

Gibt es dazu ein Update für React Native?

Ich habe das gleiche Problem wie @Falci - funktioniert nur, wenn das Flag global gesetzt wird. Mein Problem ist jedoch ein bisschen anders, Error: self signed certificate in certificate chain

Ich stehe vor dem gleichen Problem. Ich verwende axios und verwende die POST-Methode. Ich habe alle oben genannten Lösungen ausprobiert, aber kein Glück. Hat jemand die funktionierenden Lösungen gefunden? Dankeschön.

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

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

Hat bei mir funktioniert.

Bin hier wegen der React Native-Umgebung stecken geblieben. Irgendeine Lösung für die React Native App bitte?

Hallo @fozhao

Wenn Sie versuchen, ungültige Zertifikate zu verwenden, können Sie diesen Ansatz verfolgen:

  1. Installieren Sie das Zertifikat in Ihrem MacBook
  2. Vertrauen Sie dem Zertifikat erzwingen und exportieren Sie es
  3. iOS - Installieren Sie das Exportzertifikat auf den Geräten und das Problem ist gelöst.
    Android – Installieren Sie das exportierte Zertifikat auf dem Gerät und fügen Sie Ihrer Datei network_security_config.xml Folgendes hinzu.
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
     ....
</network-security-config>

Bei mir hat diese Lösung funktioniert.
Dankeschön!

@Fonger plz ausführlicher mit Hits und Beispielen.

https-Modul ist für Knoten, funktioniert nicht in Vue/React/... Ergibt im Grunde dasselbe wie process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
Wenn Sie SSL ignorieren möchten, weil Sie SSR verwenden und ohnehin Daten auf dem lokalen Server vorab abrufen, führt dies zu keinen Sicherheitsproblemen.

Stellen Sie jedoch sicher, dass Sie diese env-Variable auf dem Server setzen. Ich habe den Fehler gemacht, sie auf dem Client zu setzen, und der Server stürzte immer noch ab.

@tamangsuresh warum ich?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen