Charles Proxyλ₯Ό μ¬μ©νμ¬ μλ²μ λν μμ²μ λΆμνλ €κ³ ν©λλ€. μλ²λ TSLμ μ¬μ©νλ―λ‘ λͺ νν νΈλν½μ λ³Ό μ μλ κ³ μ μ μΈ κ°μ§ μΈμ¦μκ° μμ΅λλ€.
NodeJS / μμ²μ΄ κ·Έκ²μ μ’μνμ§ μμΌλ―λ‘ λ΄ μ€ν¬λ¦½νΈκ° μ€νλμ§ μκ³ ν΄λΉ μ€λ₯κ° λ°μν©λλ€.
μ΄λ»κ² μ°νν μ μμ΅λκΉ?
console.log('Response status: ' + response.statusCode);
^
TypeError: Cannot read property 'statusCode' of undefined
at Request._callback (/xxx:88:59)
at self.callback (/xxx:199:22)
at Request.emit (events.js:107:17)
at Request.onRequestError (/xxx:821:8)
at ClientRequest.emit (events.js:107:17)
at TLSSocket.socketErrorListener (_http_client.js:271:9)
at TLSSocket.emit (events.js:107:17)
at TLSSocket.<anonymous> (_tls_wrap.js:942:18)
at TLSSocket.emit (events.js:104:17)
at TLSSocket._finishInit (_tls_wrap.js:460:8)
Error: Error: self signed certificate in certificate chain
μ΄ κ²½μ° response
λ μ μλμ§ μμ΅λλ€.
μλ΅μ μ μν νμκ° μμ΅λλ€.
μλ΅μ μ€μ μλ΅μ΄ λμ°©ν κ²½μ°μλ§ μ μλ©λλ€.
μΌλΆ μ°κ²° μ€λ₯κ° μλ κ²½μ° κ·Έλ μ§ μμ΅λλ€.
μ μν error
λλ response.statusCode
κ° 400λ³΄λ€ ν¬κ±°λ κ°μμ§ νμΈνμμμ€.
μ΄ μ¬μ©μ λλ²κ·Ένλ €λ©΄
env NODE_DEBUG="*" node asdf.js
μ€λͺ κ°μ¬ν©λλ€. κ΄μ¬ μλ μ¬λμ΄ μμ κ²½μ°λ₯Ό λλΉνμ¬ κ°μ§ μΈμ¦μ λ¬Έμ λ₯Ό νΌνλ λ°©λ²μ μμλμ΅λλ€.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
μ΄λ₯Ό ν΅ν΄ κ°μ§ SSL μΈμ¦μ μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ κ²μ¬ν μ μμ΅λλ€.
λ΄ μ€λ₯λ λΉμ·νμ§λ§ μ§κΈμ κ°μ¬ν©λλ€ @nmaxcom
μ€λ₯: 첫 λ²μ§Έ μΈμ¦μλ₯Ό νμΈν μ μμ΅λλ€.
μ€λ₯ μ(κΈ°λ³Έ)
TLSSocketμμ.
TLSSocket.emitμμ(events.js:104:17)
TLSSocket._finishInitμμ (_tls_wrap.js:460:8)
λλ ν©λ²μ μΈ CAμμ μλͺ
ν μΈμ¦μλ₯Ό μνΈννμ¬ μ¬μ©ν μ μμ΅λλ€.
μ체 μλͺ
λ μΈμ¦μλ μ΄μ μλ―Έκ° μμ΅λλ€.
request.get({
uri: 'https://mydocker.com/v2/_catalog',
rejectUnauthorized: false
}
μ체 μλͺ
λ CAμ κ²½μ° 'rejectUnauthorized = false'λ₯Ό μ§μ ν μ μμ΅λλ€.
623νμμ request.jsλ₯Ό νμΈνκ³ node.jsμμ _tls_wrap.jsλ₯Ό νμΈν©λλ€.
λ λμ λμμ λ€μκ³Ό κ°μ΅λλ€.
a) λ‘λ λ°Έλ°μμμ SSL μ’
λ£ μν
b) λ¬΄λ£ μΈμ¦μ μ¬μ©
μ΄λ¬ν λ°©μμΌλ‘ λͺ¨λ νκ²½μμ λ¨μΌ ꡬμ±μ κ°κ² λ©λλ€.
λ°°ν¬μ λν΄ λ λμ νμ μ κ°κ³ λ μΌμ° μ€λ₯λ₯Ό νν°λ§ν μ μμ΅λλ€.
options.rejectUnauthorized = false
μΉμΈλμ§ μμ μμ
κ±°λΆ
νμ§λ§ options.agentOptions.rejectUnauthorized = false
μ΄μ λ₯Ό λͺ°λΌμ π’
https://github.com/request/request/blob/v2.81.1/request.js#L257 -L259
μ£μ‘ν©λλ€. μ½λλ§ λ³΄μΈμ. strictSSL
λ rejectUnauthorized
μ λ³μΉμΌ λΏμ
λλ€.
λμ μ΄λ¦μ΄λΌκ³ ν΄μΌ νλ, κ·Έλ₯ rejectUnauthorized
π
μ½λλ₯Ό μ€ννλ λμ μ΄ μ€λ₯κ° λ°μν©λλ€.
ꡬ문 λΆμ μ€λ₯: ꡬ문 μ€λ₯, μκΈ°μΉ μμ 'var'(T_VAR), C:xampphtdocsPHPIMAPadminindex.phpμ νμΌ λμ΄ 146νμ μμ΄μΌ ν©λλ€.
var μ리미 = require('λ©μΌ μ리미');
var imap = {
μ¬μ©μ μ΄λ¦: "anandlintas2017",
λΉλ°λ²νΈ: "xxxxxxxxx",
νΈμ€νΈ: "imap.gmail.com",
ν¬νΈ: 993, // imap ν¬νΈ
secure: true // 보μ μ°κ²° μ¬μ©
};
μ리미(imap).on('λ©μΌ',ν¨μ(λ©μΌ){console.log(λ©μΌ);}).start();
?>
RejectUnauthorized=falseλ₯Ό μ€μ νλλ‘ μ μνλ μ¬λλ€μ κ²½μ° μ체 μλͺ λ μΈμ¦μλ₯Ό μ¬μ©νμ¬ μλ‘ μνΈνλ μ°κ²°μ΄ μμ΄μΌ νλ λ΄λΆ μλ²κ° μλ κ²½μ°μλ rejectUnauthorizedλ₯Ό falseλ‘ μ€μ νλ©΄ μ€λ₯κ° μ€μ§λμ§λ§ λ΄ μ°κ²°μ MITM 곡격μ 100% μ·¨μ½ν©λλ€. μ΄κ²μ΄ nodejs tls λΌμ΄λΈλ¬λ¦¬μ λ²κ·Έμ΄λ©° μ΄λμλ μμ μ¬νμ μ°Ύμ μ μμ΅λλ€. κ·Έκ²μ λν΄ μ΄μΌκΈ°νμμμ€. AM λ΄κ° μ¬κΈ°μ λκ°λ₯Ό λμΉκ³ μμ΅λλ€! !!!!! λ΄κ° νλ Έλ€λ©΄ μ λ₯Ό μμ νμμμ€ !!
rejectUnauthorized works in options.rejectUnauthorized = false
but not in options.agentOptions.rejectUnauthorized = false
λ λ€ λλ₯Ό μν΄ μλνμ§ μμ΅λλ€
request.get({ uri: 'https://s3.amazonaws.com/...',
rejectUnauthorized: false,
// strictSSL: false,
proxy: '127.0.0.1:8080',
agentOptions: {
rejectUnauthorized: false,
// strictSSL: false,
},
}, (...args) => {
console.log(args);
process.exit();
});
PS SSL λΉνμ±ν νλκ·Έκ° μΌμ§ μνμμ ELECTRON λ΄μμ μ½λλ₯Ό μ€νν©λλ€.
μ μκ² Kaspersky λ°μ΄λ¬μ€ λ°±μ μ λΉνμ±ννλ©΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
https://github.com/request/request/issues/2061#issuecomment -182573171 μΌλ°μ μΈ μ§λ¬Έμ λν λ΅λ³μΈ κ² κ°μ΅λλ€.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
ν¨κ³Όκ° μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μ€λͺ κ°μ¬ν©λλ€. κ΄μ¬ μλ μ¬λμ΄ μμ κ²½μ°λ₯Ό λλΉνμ¬ κ°μ§ μΈμ¦μ λ¬Έμ λ₯Ό νΌνλ λ°©λ²μ μμλμ΅λλ€.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
μ΄λ₯Ό ν΅ν΄ κ°μ§ SSL μΈμ¦μ μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ κ²μ¬ν μ μμ΅λλ€.