Axios: Как игнорировать проблемы с SSL

Созданный на 13 нояб. 2016  ·  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 });

Надеюсь это поможет!

@nickuraltsev
он не работает с вышеуказанными изменениями
const https = require ('https');
axios ({
url: url,
метод: 'GET',
заголовки: {
'Content-Type': 'приложение / json'
},
responseType: 'json',
httpsAgent: новый https.Agent ({rejectUnauthorized: false})
})
.then (response => {
})
.catch (error => {
})
}
}

На самом деле, я считаю, что это работает, но конкретно касается самозаверяющих сертификатов. Он не допускает просроченных или недействительных сертификатов. Чтобы разрешить _any_ сертификат, вы должны добавить эту строку в верхней части вашего кода;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

Это позволит практически все, но это также опасно, поэтому используйте его с осторожностью.

@ Eric24
Это не сработает, если я добавлю приведенный выше код в первую строку своего файла.
Пожалуйста, дайте мне знать точный путь для добавления.

Для меня (нужно игнорировать истекший, но в остальном действительный сертификат) он работал, просто добавляя эту строку сразу после «use strict»; в верхней части основного файла node.js перед любым другим кодом. Это параметр «все или ничего», но его цель - позволить транзакции HTTPS завершиться, когда агент в противном случае завершил бы транзакцию из-за проблемы с сертификатом. Может ваш конкретный сценарий не имеет отношения к сертификату?

если не в узле, как получить модуль https ????

Модуль https НЕ РАБОТАЕТ с react-native

+1

@psahni Знаете ли вы, как игнорировать проблему ssl в React Native?

@Germinate - я все еще
Одно из решений - создать прокси-сервер в узле между собственным и основным сервером реакции. И перенаправьте запрос от собственного прокси-сервера к главному серверу.

@psahni Вы пробовали это решение ?

@Germinate - Выглядит отлично !. Спасибо, что поделились этим. Итак, после внесения этих изменений. Можем ли мы напрямую использовать реагирующий модуль?

Все еще не работает с реагирующим родным: /

В браузере работает? Я использую axios с приложением vue js и получаю эту ошибку net :: ERR_CERT_AUTHORITY_INVALID с самоподписанным сертификатом. Предлагаемое решение предполагает, что я могу использовать https.Agent, но я не знаю, как использовать модуль https в vue. Есть другой способ? Благодарность

у нас есть https внутри react-native? если да, то как его включить?

если вы используете 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;
        }                     
    });
}

что такое "пост" пример этого?

В настоящее время пытаюсь выполнить почтовый запрос и игнорировать 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;
        }                     
    });
}

Могу ли я по-другому называть мои существующие запросы 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

Я также получаю сообщение об ошибке, используя приложение, созданное с помощью response-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 handshake failed в моих журналах и подумал о попытке отключить проверки, как описано другими выше. После большого количества устранений неполадок (изначально я решил, что это связано с CORS), в конечном итоге это произошло из-за того, что в моем SSL-сертификате не было встроенного сертификата CA. Если вы подозреваете, что это могло быть так, используйте один из бесплатных SSL-сертификатов. службы проверки, такие как https://www.ssllabs.com/ssltest/ или https://www.digicert.com/help/, чтобы убедиться, что ваш сертификат в порядке. Надеюсь, это поможет кому-то другому.

Я внезапно столкнулся с этой проблемой (несмотря на то, что ничего не изменил). Для меня это исправило просто выполнение стандартного запроса GET через новую вкладку. Я имею в виду, что если у вас есть маршрут «/ users», попробуйте открыть новую вкладку с помощью {serverPath} / users. Мне это помогло, хотя я не знаю почему.

Вы также можете просто добавить переменную среды при запуске среды разработки:

экспорт NODE_TLS_REJECT_UNAUTHORIZED = 0 && пряжа 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 рейтинги