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

Node.js가 OpenSSL 1.1.0과 1.0.2 양쪽 모두 지원하도록 암호화 모듈을 재구현해 호환성 확보

Node.js 9.2.0 (Current)

2017년 11월 14일6advanced

Context

Node.js는 OpenSSL 1.1.0으로의 업그레이드 과정에서 1.0.2와의 호환성을 동시에 유지해야 했다. OpenSSL 1.1.0은 내부 API가 크게 변경되었으므로 기존 코드가 작동하지 않는 문제가 발생했다.

Technical Solution

  • CipherBase, Hash, Hmac, SignBase 등 주요 암호화 클래스를 OpenSSL 1.1.0 호환으로 재구현
  • X509_STORE_CTX_new 같은 새로운 API 함수로 전환하고 OpenSSL 1.0 에뮬레이션 로직 추가
  • RSA와 DH 접근자 사용으로 구조체 직접 접근 제거
  • TLS 티켓 스키마와 ALPN 처리를 양쪽 버전에서 동일하게 동작하도록 호환 로직 구현
  • 불필요한 SSLerr 호출 제거 및 locking callback 제거로 1.1.0 권장사항 준수
  • DSS1/dss1 같은 레거시 알고리즘명에 대한 호환성 로직 추가

Key Takeaway

주요 의존성의 대버전 업그레이드 시 기존 사용자의 마이그레이션 경로를 제공하기 위해 내부 구현의 추상화 계층을 구축하는 것이 필수적이다.


Node.js를 사용하는 팀에서 OpenSSL 버전 업그레이드가 필요할 때, 암호화 작업이 포함된 코드는 구체적인 OpenSSL API 호출 대신 Node.js의 고수준 crypto 모듈(createCipheriv, createHmac, createSign 등)을 사용하면 하위 버전 변경에 자동으로 대응할 수 있다.

원문 읽기