νΉμ SSL μ€λ₯(μ: λ§λ£λ μΈμ¦μ)λ₯Ό 무μνλλ‘ Axios(node.jsμμ μ€ν)λ₯Ό ꡬμ±ν μ μμ΅λκΉ? 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 });
λμμ΄ λμκΈ°λ₯Ό λ°λλλ€!
@nickuraltsev
μμ λ³κ²½ μ¬νμΌλ‘ μλνμ§ μμ΅λλ€
const https = μꡬ('https');
μ‘μμ€μ€({
URL: URL,
λ©μλ: 'GET',
ν€λ: {
'μ½ν
μΈ μ ν': 'μμ© νλ‘κ·Έλ¨/json'
},
μλ΅ μ ν: 'json',
httpsAgent: μλ‘μ΄ https.Agent({ rejectUnauthorized: false })
})
.then(μλ΅ => {
})
.catch(μ€λ₯ => {
})
}
}
μ¬μ€, λλ κ·Έκ²μ΄ μλνλ€λ κ²μ μμμ§ λ§ νΉν μ체 μλͺ λ μΈμ¦μλ₯Ό λ€λ£Ήλλ€. λ§λ£λκ±°λ μ ν¨νμ§ μμ μΈμ¦μλ νμ©νμ§ μμ΅λλ€. _any_ μΈμ¦μλ₯Ό νμ©νλ €λ©΄ μ½λ μλ¨ κ·Όμ²μ μ΄ μ€μ μΆκ°ν΄μΌ ν©λλ€.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
μ΄κ²μ κ±°μ λͺ¨λ κ²μ νμ©νμ§λ§ λν μννλ―λ‘ μ£Όμν΄μ μ¬μ©νμμμ€.
@μλ¦24
λ΄ νμΌμ 첫 λ²μ§Έ μ€μ μμ μ½λλ₯Ό μΆκ°νλ©΄ μλνμ§ μμ΅λλ€.
μ νν μΆκ° κ²½λ‘λ₯Ό μλ €μ£ΌμΈμ.
λλ₯Ό μν΄ (λ§λ£λμμ§λ§ μ ν¨ν μΈμ¦μλ₯Ό 무μν΄μΌ ν¨) "use strict" λ°λ‘ λ€μ μ΄ μ€μ μΆκ°νκΈ°λ§ νλ©΄ λ©λλ€. λ€λ₯Έ μ½λλ³΄λ€ λ¨Όμ κΈ°λ³Έ node.js νμΌμ 맨 μμ μμ΅λλ€. μ λΆ μλλ©΄ μ 무 μ€μ μ΄μ§λ§ κ·Έ λͺ©μ μ μΈμ¦μ λ¬Έμ λ‘ μΈν΄ μμ΄μ νΈκ° νΈλμμ μ μ’ λ£ν λ HTTPS νΈλμμ μ΄ μλ£λλλ‘ νμ©νλ κ²μ λλ€. νΉμ μλ리μ€κ° μΈμ¦μμ κ΄λ ¨μ΄ μμ μ μμ΅λκΉ?
λ Έλμ μμΌλ©΄ https λͺ¨λμ μ»λ λ°©λ²????
https λͺ¨λμ λ°μ λ€μ΄ν°λΈμμ μλνμ§ μμ΅λλ€.
+1
@psahni React Nativeμμ SSL λ¬Έμ λ₯Ό 무μνλ λ°©λ²μ μκ³ μμ΅λκΉ?
@Germinate- λλ μ¬μ ν κ°μ λ¬Έμ λ‘ μ΄λ €μμ κ²ͺκ³ μμ΅λλ€. κΈ°λ³Έ μλλ‘μ΄λ μ½λλ₯Ό λ³κ²½ν΄μΌ ν©λλ€. κ·Έλ¦¬κ³ μμ€μμ λ€μ΄ν°λΈ λ°μμ λΉλν΄μΌ ν©λλ€. λλ μμ§ κ·Έκ²μ νλ λ°©λ²μ λͺ¨λ₯Έλ€.
ν κ°μ§ ν΄κ²°μ±
μ λ°μ λ€μ΄ν°λΈ μλ²μ λ©μΈ μλ² μ¬μ΄μ λ
Έλμ νλ‘μ μλ²λ₯Ό μμ±νλ κ²μ
λλ€. λ°μ λ€μ΄ν°λΈμμ λ
Έλ νλ‘μλ‘μ μμ²μ λ©μΈ μλ²λ‘ λΌμ°ν
ν©λλ€.
@psahni μ΄ μ루μ μ μ¬μ©ν΄ λ³΄μ ¨μ΅λκΉ?
@Germinate -
μ¬μ ν λ°μ λ€μ΄ν°λΈλ‘ μλνμ§ μμ΅λλ€ :/
λΈλΌμ°μ μμ μλν©λκΉ? vue js μμ© νλ‘κ·Έλ¨κ³Ό ν¨κ» axiosλ₯Ό μ¬μ©νκ³ μμΌλ©° μ체 μλͺ λ μΈμ¦μμ ν¨κ» μ΄ net::ERR_CERT_AUTHORITY_INVALID μ€λ₯κ° λ°μν©λλ€. μ μλ μ루μ μ https.Agentλ₯Ό μ¬μ©ν μ μλ€κ³ κ°μ νμ§λ§ vueμμ https λͺ¨λμ μ΄λ»κ² μ¬μ©ν μ μλμ§ λͺ¨λ₯΄κ² μ΅λλ€. λ€λ₯Έ λ°©λ²μ΄ μμ΅λκΉ? κ°μ¬ ν΄μ
react-native λ΄λΆμ 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;
}
});
}
μ΄κ²μ "ν¬μ€νΈ" μλ 무μμ λκΉ?
νμ¬ κ²μ μμ²μ μλνκ³ 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; } }); }
λͺ¨λ ν΄λμ axios.jsλ₯Ό μμ±ν ν κΈ°μ‘΄ asyncData λλ axios μμ²μ λ€λ₯΄κ² νΈμΆν©λκΉ?
μ΄κ²μ 보μΈμ, κ·Έκ²μ μ λ₯Ό μν΄ κ·Έκ²μ ν΄κ²°νμ΅λλ€: 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
})
});
λν νμΌ μμ λΆλΆ( const https = require('https');
μλ)μ process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
λ₯Ό μΆκ°νλ €κ³ μλνμ§λ§ ν¨κ³Όκ° μμμ΅λλ€.
μ΄κ² μ λ«νμ§? μλνλ μ루μ μ΄ μλ κ² κ°μ΅λλ€.
λ΄ λ‘κ·Έμ 'sl νΈλμ °μ΄ν¬ μ€ν¨' μ€λ₯λ‘ μΈν΄ μ΄ μ€λ λλ₯Ό λ°κ²¬νκ³ μμ λ€λ₯Έ μ¬λλ€μ΄ μ€λͺ ν λλ‘ κ²μ¬λ₯Ό ν΄μ νλ €κ³ μλνμ΅λλ€. λ§μ λ¬Έμ ν΄κ²°(μλλ CORS κ΄λ ¨μ΄λΌκ³ μκ°νμ΅λλ€) νμ λ΄ SSL μΈμ¦μμ CA μΈμ¦μκ° λ²λ€λ‘ μ 곡λμ§ μμκΈ° λλ¬Έμ λ°μνμ΅λλ€. μ΄κ²μ΄ μμ¬λλ κ²½μ° λ¬΄λ£ SSL μ€ νλλ₯Ό μ¬μ©νμμμ€. https://www.ssllabs.com/ssltest/ λλ https://www.digicert.com/help/ μ κ°μ μλΉμ€λ₯Ό νμΈνμ¬ μΈμ¦μκ° μνΈνμ§ νμΈνμμμ€. μ΄κ²μ΄ λ€λ₯Έ μ¬λμ λμΈ μ μκΈ°λ₯Ό λ°λλλ€.
λλ κ°μκΈ°(μ무κ²λ λ°κΎΈμ§ μμμμλ λΆκ΅¬νκ³ ) μ΄ λ¬Έμ λ‘ μ΄λ €μμ κ²ͺκ³ μμμ΅λλ€. λλ₯Ό μν΄ κ³ μΉ κ²μ λ¨μν μ νμ ν΅ν΄ νμ€ GET μμ²μ μννλ κ²μ΄μμ΅λλ€. μ¦, "/users" κ²½λ‘κ° μλ κ²½μ° {serverPath}/usersλ‘ μ νμ μ΄μ΄λ³΄μμμ€. μ΄μ λ λͺ¨λ₯΄κ² μ§λ§ λμμ΄ λμμ΅λλ€.
κ°λ° νκ²½μ μμν λ νκ²½ λ³μλ₯Ό μΆκ°ν μλ μμ΅λλ€.
λ΄λ³΄λ΄κΈ° NODE_TLS_REJECT_UNAUTHORIZED=0 && μμ¬ κ°λ° --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)
(컬 μμ²μμ)
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
μ ν¨νμ§ μμ μΈμ¦μλ₯Ό μ¬μ©νλ €λ κ²½μ° λ€μ μ κ·Ό λ°©μμ μλν μ μμ΅λλ€.
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system"/>
<certificates src="user"/>
</trust-anchors>
</base-config>
....
</network-security-config>
μ΄ μ루μ
μ μ μκ² ν¨κ³Όμ μ΄μμ΅λλ€.
κ°μ¬ν©λλ€!
@Fonger plzλ μ‘°νμμ μλ₯Ό ν΅ν΄ λ μμΈν μ€λͺ ν©λλ€.
https λͺ¨λμ λ
Έλμ©μ΄λ©° Vue/React/μμ μλνμ§ μμ΅λλ€... κΈ°λ³Έμ μΌλ‘ κ²°κ³Όλ process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
SSRμ μ¬μ©νκ³ μκ³ μ΄μ¨λ λ‘컬 μλ²μμ λ°μ΄ν°λ₯Ό 미리 κ°μ Έμ€κΈ° λλ¬Έμ SSLμ 무μνλ €λ κ²½μ° λ³΄μ λ¬Έμ κ° λ°μνμ§ μμ΅λλ€.
μλ²μμ ν΄λΉ env λ³μλ₯Ό μ€μ νλμ§ νμΈνμμμ€. ν΄λΌμ΄μΈνΈμμ μ€μ νλ μ€μλ₯Ό μ μ§λ¬μ μλ²κ° μ¬μ ν μΆ©λνμ΅λλ€.
@tamangsuresh μ λμΌ?
κ°μ₯ μ μ©ν λκΈ
μ¬μ©μ μ§μ μμ΄μ νΈλ₯Ό μ¬μ©νλλ‘ axiosλ₯Ό ꡬμ±νκ³ ν΄λΉ μμ΄μ νΈμ λν΄
rejectUnauthorized
λ₯Όfalse
λ‘ μ€μ ν μ μμ΅λλ€.λμμ΄ λμκΈ°λ₯Ό λ°λλλ€!