Axios: Comment ignorer les problèmes SSL

Créé le 13 nov. 2016  ·  35Commentaires  ·  Source: axios/axios

Est-il possible de configurer Axios (exécuté dans node.js) pour ignorer les erreurs SSL spécifiques (comme les certificats expirés) ? J'aimerais savoir que le certificat SSL a un problème, mais je souhaite que la transaction se termine quand même (par défaut, elle échoue).

Commentaire le plus utile

Vous pouvez configurer axios pour utiliser un agent personnalisé et définir rejectUnauthorized sur false pour cet agent :

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

J'espère que cela t'aides!

Tous les 35 commentaires

Vous pouvez configurer axios pour utiliser un agent personnalisé et définir rejectUnauthorized sur false pour cet agent :

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

J'espère que cela t'aides!

@nickuraltsev
cela ne fonctionne pas avec les changements ci-dessus
const https = require('https');
axios({
url : url,
méthode : 'GET',
en-têtes : {
« Type de contenu » : « application/json »
},
Type de réponse : 'json',
httpsAgent : nouveau https.Agent({ rejeterUnauthorized : false })
})
.then(réponse => {
})
.catch(erreur => {
})
}
}

En fait, je trouve que cela fonctionne, mais cela concerne spécifiquement les certificats auto-signés. Il n'autorise pas les certificats expirés ou invalides. Pour autoriser _n'importe quel_ certificat, vous devez ajouter cette ligne en haut de votre code ;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

Cela permettra à peu près tout, mais c'est aussi dangereux, alors utilisez-le avec prudence.

@Eric24
Cela ne fonctionne pas si j'ajoute le code ci-dessus à la première ligne de mon fichier.
S'il vous plaît laissez-moi savoir le chemin exact pour l'ajout.

Pour moi (ayant besoin d'ignorer un certificat expiré mais sinon valide), cela a fonctionné en ajoutant simplement cette ligne juste après "use strict"; en haut du fichier node.js principal, avant tout autre code. Il s'agit d'un paramètre tout ou rien, mais son objectif est de permettre à une transaction HTTPS de se terminer lorsque l'agent mettrait autrement fin à la transaction en raison d'un problème de certificat. Peut-être que votre scénario particulier n'est pas lié au certificat ?

sinon dans le nœud, comment obtenir le module https ????

Le module https ne fonctionne pas avec react-native

+1

@psahni Savez-vous comment ignorer le problème SSL dans React Native ?

@Germinate - Je suis toujours aux prises avec le même problème. Nous devons changer le code Android natif. Et nous devons créer des réactions natives à partir de la source. Je ne sais pas encore comment faire.
Une solution consiste à créer un serveur proxy dans le nœud entre le serveur natif de réaction et le serveur principal. Et acheminez la demande de réagir natif au proxy de nœud vers le serveur principal.

@psahni Avez-vous essayé cette solution ?

@Germinate - C'est super !. Merci de l'avoir partagé. Donc après avoir fait ces changements. Peut-on utiliser directement le module react-native ?

Ne fonctionne toujours pas avec React Native :/

Est-ce que ça marche dans le navigateur ? J'utilise axios avec une application vue js et j'obtiens cette erreur net :: ERR_CERT_AUTHORITY_INVALID avec un certificat auto-signé. La solution proposée suppose que je peux utiliser https.Agent mais je ne sais pas comment puis-je utiliser le module https sur vue. Y a-t-il un autre moyen ? Merci

avons-nous https à l'intérieur de react-native? si oui comment l'incluons-nous?

si vous utilisez nuxt/axios, vous pouvez réaliser ce qui précède en créant un plugin avec le code suivant :
Voici la méthode documentée pour créer le plugin dans nuxt : https://axios.nuxtjs.org/extend.html

Ce modèle de développement peut être utile si vous développez une API localement avec un certificat auto-signé.

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

qu'est-ce qu'un exemple « post » ?

J'essaye actuellement de faire une demande de publication et d'ignorer SSL.

si vous utilisez nuxt/axios, vous pouvez réaliser ce qui précède en créant un plugin avec le code suivant :
Voici la méthode documentée pour créer le plugin dans nuxt : https://axios.nuxtjs.org/extend.html

Ce modèle de développement peut être utile si vous développez une API localement avec un certificat auto-signé.

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

Dois-je appeler mes requêtes asyncData ou axios existantes différemment après avoir créé axios.js dans le dossier modules ?

Regarde ça, ça l'a résolu pour moi : https://stackoverflow.com/a/54475750/8577483

Toujours confronté à ce problème. Utilisation de https-browserify pour obtenir le module https du nœud dans le navigateur.

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

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

renvoie ERR_CERT_AUTHORITY_INVALID

J'obtiens également l'erreur, en utilisant l'application créée avec 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
    })
});

J'ai également essayé d'ajouter process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; au début du fichier (en dessous de const https = require('https'); ) sans effet.

Pourquoi était-ce fermé ? Il ne semble pas qu'il y ait une solution de travail.

Je suis tombé sur ce fil en raison d'une erreur « échec de la négociation SSL » dans mes journaux et j'ai envisagé d'essayer de désactiver les vérifications comme décrit par d'autres ci-dessus. Après de nombreux dépannages (à l'origine, je pensais que c'était lié au CORS), c'était parce que mon certificat SSL n'avait pas le certificat CA intégré. Si vous pensez que cela pourrait être le cas, utilisez l'un des SSL gratuits vérifier des services comme https://www.ssllabs.com/ssltest/ ou https://www.digicert.com/help/ pour confirmer que votre certificat est bon. J'espère que cela pourra aider quelqu'un d'autre.

Je luttais soudainement avec ce problème également (bien que je n'aie rien changé). Ce qui a résolu le problème pour moi, c'était simplement d'effectuer une requête GET standard via un nouvel onglet. J'entends par là si vous avez une route "/users", essayez d'ouvrir un nouvel onglet avec {serverPath}/users. Cela m'a aidé, même si je ne sais pas pourquoi.

Vous pouvez également simplement ajouter la variable d'environnement lorsque vous démarrez votre environnement de développement :

export NODE_TLS_REJECT_UNAUTHORIZED=0 && fil dev --env.NODE_TLS_REJECT_UNAUTHORIZED=0

Et peut-être l'ajouter à votre fichier package.json

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

Je suis confronté au même problème. J'utilise axios et j'utilise la méthode POST. J'ai essayé toutes les solutions mentionnées ci-dessus mais sans succès. Quelqu'un a-t-il trouvé les solutions de travail? Merci.

Je ne pouvais pas le faire fonctionner pour une seule instance.

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

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

Utilisation du nœud ;
Voici l'erreur SSL : unable to get local issuer certificate (20) (à partir d'une requête curl)

Il y a une mise à jour à ce sujet pour React Native ?

Je rencontre le même problème que @Falci - ne fonctionne que lors de la définition du drapeau globalement. Mon problème est un peu différent cependant, Error: self signed certificate in certificate chain

Je suis confronté au même problème. J'utilise axios et j'utilise la méthode POST. J'ai essayé toutes les solutions mentionnées ci-dessus mais sans succès. Quelqu'un a-t-il trouvé les solutions de travail? Merci.

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

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

A travaillé pour moi.

Je suis coincé ici pour l'environnement React Native. Une solution pour l'application React Native s'il vous plaît ?

Salut @fozhao

Si vous essayez d'utiliser des certificats non valides, vous pouvez essayer de suivre cette approche :

  1. Installez le certificat dans votre macbook
  2. Forcer la confiance du certificat et l'exporter
  3. iOS - Installez le certificat d'exportation sur les appareils et le problème est résolu.
    Android - Installez le certificat exporté sur l'appareil et ajoutez ce qui suit à votre fichier network_security_config.xml.
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
     ....
</network-security-config>

Cette solution a fonctionné pour mon.
Merci!

@Fonger plz élabore plus avec des hits et des exemples.

Le module https est pour le nœud, ne fonctionne pas dans Vue/React/... En gros, le résultat est le même que process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
Si vous souhaitez ignorer SSL parce que vous utilisez SSR et que vous prélevez de toute façon des données sur le serveur local, cela n'entraîne aucun problème de sécurité.

Assurez-vous de définir cette variable d'environnement sur le serveur, j'ai fait l'erreur d'essayer de la définir sur le client et le serveur est donc toujours tombé en panne.

@tamangsuresh pourquoi moi ?

Cette page vous a été utile?
0 / 5 - 0 notes