피드로 돌아가기
Node.js 17.0.0 (Current)
Node.js BlogNode.js Blog
Backend

Node.js 17.0.0이 OpenSSL 3.0 통합과 V8 9.5 업그레이드로 암호화 알고리즘 제약 강화 및 JavaScript 언어 기능 확대

Node.js 17.0.0 (Current)

2021년 10월 19일6intermediate

Context

Node.js는 보안 강화와 언어 런타임 최신화를 위해 주요 의존성 업그레이드가 필요했다. OpenSSL 1.1.1의 장기 지원 종료와 V8 JavaScript 엔진의 기능 확대 요구사항이 있었다.

Technical Solution

  • OpenSSL 3.0 (quictls/openssl) 통합: QUIC 프로토콜 지원 추가 및 FIPS 모듈을 통한 규정 준수 기능 제공
  • 암호화 알고리즘 제약 적용: 약한 알고리즘과 부족한 키 크기에 대한 기본 거부 정책 실행
  • --openssl-legacy-provider 플래그 제공: 레거시 암호화 알고리즘 사용 필요 시 임시 우회 옵션 제공
  • V8 9.5 엔진 업그레이드: Intl.DisplayNames API 추가 타입 지원 및 Intl.DateTimeFormat API의 Extended timeZoneName 옵션 추가
  • DNS 및 Module API 런타임 Deprecation: dns.lookup() 옵션의 타입 강제 변환 폐기, 모듈 서브경로 폴더 매핑 및 후행 슬래시 패턴 폐기
  • readline 모듈 Promise 기반 인터페이스: node:readline/promises를 통한 비동기 I/O 지원

Impact

ERR_OSSL_EVP_UNSUPPORTED 에러 발생으로 인한 생태계 영향 예상되며, 구체적인 성능 수치나 호환성 백분율은 아티클에 명시되지 않음.

Key Takeaway

OpenSSL 3.0의 기본 제약 정책은 장기적 보안 태세를 강화하지만 단기적으로 레거시 애플리케이션과 의존성 모듈에 즉각적 수정을 요구한다. 마이그레이션 기간 동안 --openssl-legacy-provider 옵션으로 점진적 전환 가능하다.


Node.js 17 이상으로 업그레이드하는 팀은 애플리케이션에서 ERR_OSSL_EVP_UNSUPPORTED 에러 발생 시 먼저 의존성 모듈 버전을 최신화하고, 해결되지 않으면 --openssl-legacy-provider 플래그로 임시 운영하면서 암호화 로직을 OpenSSL

3.0 호환으로 리팩토링해야 한다.

원문 읽기