[컴] node v20.x 에서 TLS v1.2 사용

node v20.x 에서 TLS v1.2 사용

댓글fetch, axios 에선 TLS v1.2 를 사용할 수 없다고 한다.

axios 는 모르겠지만, fetch 에선 TLS v1.2 로 통신하지 못했다. 그래서 https 를 사용해서 해결했다.

node, SSL_OP_LEGACY_SERVER_CONNECT

https.Agent

axios 나 fetch 나 이방법으로 해결이 가능하다.

const httpsAgent = new https.Agent({
  // for self signed you could also add
  // rejectUnauthorized: false,
  
  // allow legacy server
  secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT,
});
const response = await fetch(url, {
  agent: httpsAgent,
});

const html = await response.text();
console.log(html)

실패: secureOptions 없이 node-fetch 에서 https.Agent 를 사용

이 방법은 적어도 windows 에서는 동작하지 않았다.

import https from "https";
const agent = new https.Agent({
  rejectUnauthorized: false
});
fetch(myUrl, { agent });

아래와 같은 error 가 떴다.

reason: write EPROTO 382D0000:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:c:\ws\deps\openssl\openssl\ssl\statem\extensions.c:922:

    at ClientRequest.<anonymous> (D:\a\prog\typescript\nextjs\budgetbuddy\budgetbuddybrain\node_modules\node-fetch\lib\index.js:1501:11)
    at ClientRequest.emit (node:events:518:28)
    at TLSSocket.socketErrorListener (node:_http_client:500:9)
    at TLSSocket.emit (node:events:518:28)
    at emitErrorNT (node:internal/streams/destroy:169:8)
    at emitErrorCloseNT (node:internal/streams/destroy:128:3)
    at processTicksAndRejections (node:internal/process/task_queues:82:21) {
  type: 'system',
  errno: 'EPROTO',
  code: 'EPROTO'
}
...

실패: https.request

처음에는 req.on('data', (chunk) => {}) 부분을 실행하지 않았어서 잘 동작하는 줄 알았는데, 아니었다. 이 방법도 에러가 나온다.

const options = {
  hostname: 'www.howsmyssl.com',
  port: 443,
  path: '/a/check',
  method: 'GET',
  secureProtocol: "TLSv1_2_method"
}
const req = await https.request(options)
let responseBody = '';
req.on('data', (chunk) => {
  console.log(chunk)
  responseBody += chunk;
});
req.on('end', () => {
  console.log('end')
  console.log(`BODY: ${responseBody}`);
});
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

Reference

  1. node.js - Configure https agent to allow only TLS1.2 for outgoing requests - Stack Overflow

댓글 없음:

댓글 쓰기