Π― ΠΏΡΡΠ°ΡΡΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Charles Proxy. Π‘Π΅ΡΠ²Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ TSL, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΈΡΡΡΠΉ ΡΡΠ°ΡΠΈΠΊ.
NodeJS/Request ΡΡΠΎ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΉ ΡΠΊΡΠΈΠΏΡ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠ΄Π°Π΅Ρ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ?
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)
ΠΈΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ let's encrypt, ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ, ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π·Π°ΠΊΠΎΠ½Π½ΡΠΌ ΡΠ΅Π½ΡΡΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΡΠ°ΠΌΠΎΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ»Π°.
request.get({
uri: 'https://mydocker.com/v2/_catalog',
rejectUnauthorized: false
}
ΠΠ»Ρ ΡΠ°ΠΌΠΎΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π¦Π‘ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ 'rejectUnauthorized = false'.
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ request.js Π² ΡΡΡΠΎΠΊΠ΅ 623 ΠΈ _tls_wrap.js Π² node.js.
ΠΡΡΡΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ:
Π°) ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΈΡ SSL Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΠΈ
Π±) ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ Π΅Π΄ΠΈΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π²Π°ΡΠΈΡ
ΡΡΠ΅Π΄.
ΠΡ Π±ΡΠ΄Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ Π² ΡΠ²ΠΎΠΈΡ
ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡΡ
ΠΈ ΠΎΡΡΠΈΠ»ΡΡΡΡΠ΅ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°Π½ΡΡΠ΅.
rejectUnauthorized ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² 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 notifier = require('mail-notifier');
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΊΠ°ΡΡΠ° = {
ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ: "anandlintas2017",
ΠΏΠ°ΡΠΎΠ»Ρ: "Ρ
Ρ
Ρ
Ρ
Ρ
Ρ
Ρ
Ρ
Ρ
",
Ρ
ΠΎΡΡ: "imap.gmail.com",
ΠΏΠΎΡΡ: 993, // imap-ΠΏΠΎΡΡ
secure: true // ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
};
ΡΠ²Π΅Π΄ΠΎΠΌΠΈΡΠ΅Π»Ρ(imap).on('ΠΏΠΎΡΡΠ°',ΡΡΠ½ΠΊΡΠΈΡ(ΠΏΠΎΡΡΠ°){console.log(ΠΏΠΎΡΡΠ°);}).start();
?>
Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ rejectUnauthorized=false, ΡΡΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°ΠΌΠΎΠ·Π°Π²Π΅ΡΡΡΡΠΈΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ, Π΄ΡΠΌΠ°Ρ, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° rejectUnauthorized Π½Π° false ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΎΡΠΈΠ±ΠΊΡ, Π½ΠΎ ΠΌΠΎΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π° 100% ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ Π°ΡΠ°ΠΊΠ°ΠΌ MITM, Ρ Π²ΠΈΠΆΡ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ nodejs tls, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½Π° ΡΡΡΠ°Π΄Π°Π΅Ρ, ΠΈ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π½Π°ΠΉΡΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½ΠΈΠ³Π΄Π΅ (Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Google Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ 5 ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Google, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΈ), Ρ Π½Π΅ Π·Π½Π°Ρ, ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ Π½Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΡΡΠΎΠΌ, Ρ ΡΡΠΎ-ΡΠΎ Π·Π΄Π΅ΡΡ ΡΠΏΡΡΠΊΠ°Ρ! !!!!! ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΠΏΡΠ°Π²ΡΡΠ΅ ΠΌΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΠ±Π°ΡΡΡ!!
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 ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ΄Π° ΠΈΠ· ELECTRON Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ»Π°Π³ΠΎΠΌ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ssl.
ΠΠ»Ρ ΠΌΠ΅Π½Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ° ΠΠ°ΡΠΏΠ΅ΡΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
https://github.com/request/request/issues/2061#issuecomment -182573171 ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ²Π΅ΡΠΎΠΌ Π½Π° ΠΎΠ±ΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
ΠΠ΅ Π΄Π°Π΅Ρ ΡΡΡΠ΅ΠΊΡΠ°.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅. Π― ΡΠ·Π½Π°Π», ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
ΠΡΠΈ ΡΡΠΎΠΌ Ρ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π»ΡΡΠΈΠ²ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ SSL Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.