용어 사전

OpenSSL이란? HTTPS 암호화를 처리하는 라이브러리와 안전하게 유지하는 법

OpenSSL은 HTTPS(TLS/SSL)와 암호화를 떠받치는 오픈소스 라이브러리입니다. 결함 하나가 널리 번지는 이유(Heartbleed)와 버전 파악, EOL 회피, 신속한 패치 등 방어법을 다룹니다.

게시 2026-06-29 업데이트 2026-10-06 6분 읽기
이 페이지에서

HTTPS를 제공하고 있다면 서버는 거의 틀림없이 OpenSSL(또는 호환 구현) 위에서 돌고 있습니다. 직접 손댈 일은 없지만, 결함이 발견되면 엄청난 수의 서버가 영향을 받습니다. 이 라이브러리가 무엇을 하며 어떻게 방어하는지 정리합니다.

어디에서 쓰이는가

OpenSSL의 까다로운 점은 고른 적도 없으면서 쓰고 있다는 것입니다. 앱은 TLS를 웹 서버에 맡기고, 웹 서버는 암호화를 OpenSSL에 맡기며, 그 OpenSSL은 OS가 함께 제공하는, 겹겹이 쌓인 구조입니다.

여러분의 앱
↓ TLS를 맡김
웹 서버(Nginx / Apache) · 언어 런타임
↓ 암호화를 맡김
OpenSSL(OS가 함께 제공)
OpenSSL은 가장 아래 계층이다. 위의 모든 계층이 암호화를 여기에 맡기므로, 취약점 하나가 그 전부에 영향을 준다.

보통은 이것이 편리합니다. 암호화를 전문가가 작성한 공용 구현에 맡길 수 있기 때문입니다. 하지만 그 공용 라이브러리에 취약점이 생기면 그것을 쓰는 모두가 한꺼번에 영향을 받습니다. 기반 라이브러리의 결함은 영향 범위가 넓다는 말의 의미가 바로 이것입니다.

OpenSSL, SSL/TLS, 인증서의 차이

이름이 비슷해 섞여 쓰이지만 각각 역할이 다릅니다.

용어무엇인가예
SSL / TLS연결을 암호화하는 규칙(프로토콜). SSL은 옛 버전이고, 지금은 TLS 1.2 / 1.3을 씀HTTPS는 HTTP를 TLS로 감싼 것
OpenSSLTLS와 암호 연산을 실제로 수행하는 프로그램(라이브러리)과 함께 제공되는 명령줄 도구Nginx와 Apache가 내부에서 호출
인증서인증 기관이 도메인 소유를 보증하는 데이터. 공개 키가 들어 있음Let's Encrypt가 무료로 발급

즉 OpenSSL은 TLS 규칙을 구현하는 도구 중 하나이고, 인증서는 그 도구가 연결 중에 쓰는 데이터입니다. TLS를 구현하는 라이브러리는 그 밖에도 있으며(LibreSSL, BoringSSL, Windows Schannel 등), 어느 것을 쓰는지는 OS와 소프트웨어에 따라 다릅니다.

영향이 넓은 이유: 버그 하나가 많은 서버의 키를 위험에 빠뜨렸다

2014년의 Heartbleed(CVE-2014-0160)는 OpenSSL의 작은 구현 실수(주장된 길이를 검증하지 않고 신뢰한 것)에서 비롯되었습니다. 외부인이 서버 메모리를 조금씩 읽을 수 있었고, 거기에는 개인 키와 세션 데이터가 포함될 수 있었습니다. OpenSSL이 워낙 널리 쓰였던 탓에 전 세계의 수많은 서버가 동시에 표적이 되었습니다(전말 → Heartbleed).

교훈은 분명합니다. 의존성이 스택의 아래쪽에 있을수록 영향 범위는 넓어집니다. 따라서 앱이 직접 가져오는 의존성만이 아니라, 그 밑에서 돌고 있는 OpenSSL 같은 기반 라이브러리도 똑같이 진지하게 감시하고 패치해야 합니다.

어떻게 방어하는가: EOL 회피, 기반 라이브러리 감시

1

자신의 스택이 어떤 OpenSSL을 쓰는지 파악한다

보이지 않는 것은 방어할 수 없습니다. 서버, 컨테이너 베이스 이미지, 언어 런타임이 각각 어떤 OpenSSL(릴리스 라인과 버전)에 의존하는지 목록으로 만드세요.

2

지원 종료(EOL) 버전을 돌리지 않는다

릴리스 라인이 지원 기간을 지나면 거기서 새로 발견되는 취약점은 수정되지 않습니다. EOL을 계속 돌리면 취약점이 발견되어도 수정되지 않은 채 남습니다. 지원되는 라인으로 업그레이드할 계획을 세우세요.

3

기반 라이브러리도 CVE 감시에 포함한다

앱 의존성은 osv-scanner 같은 도구로 쉽게 추적할 수 있지만, OS가 함께 제공하는 OpenSSL은 놓치기 쉽습니다. 기반 라이브러리의 새 CVE도 드러나도록 해 두세요(→ CVE 대응 플레이북).

4

심각할 때는 신속하게 패치한다

Heartbleed급 버그는 공개되는 순간 공격받습니다. 심각도가 요구할 때는 '다음 정기 업데이트 때'가 아니라 당일에 기반 패치를 배포할 수 있도록 업데이트 경로를 가볍게 유지하세요.

지원 중인 버전(2026년 10월 기준)

OpenSSL 프로젝트는 홀수 해 4월에 장기 지원(LTS) 버전을 내고 최소 5년간 지원합니다. 3.5 이후에 나온 LTS가 아닌 버전은 출시 후 13개월간 지원됩니다.

라인종류지원 종료
4.0일반2027년 5월 14일
3.6일반2026년 11월 1일
3.5LTS2030년 4월 8일
3.4일반2026년 10월 22일
3.0 / 1.1.1 / 1.0.2—종료(OpenSSL Corporation의 유료 연장 지원만)

OS가 제공하는 OpenSSL은 사정이 다릅니다. Red Hat 계열을 비롯한 많은 Linux 배포판은 버전 번호를 올리지 않고 수정만 가져옵니다(백포트). OS의 지원 기간 동안에는 3.0으로 표시되는 패키지도 OS 벤더로부터 수정을 계속 받을 수 있습니다. 번호만 보고 '오래됐으니 취약하다', '새것이니 안전하다'고 판단하지 말고, OS 벤더의 보안 공지를 확인하세요.

자신의 환경에서 확인하는 방법

1

OS의 OpenSSL을 확인한다

openssl version -a로 버전을 봅니다. 패키지 버전은 Debian/Ubuntu에서는 dpkg -l 'libssl*' openssl, Red Hat 계열에서는 rpm -q openssl로 확인합니다. 그 패키지 버전을 OS 벤더의 보안 공지와 대조해 수정이 들어 있는지 봅니다.
2

애플리케이션이 실제로 쓰는 것을 확인한다

OS와 별도로 자체 OpenSSL을 번들하는 소프트웨어도 있습니다. Nginx는 nginx -V, Python은 python3 -c "import ssl; print(ssl.OPENSSL_VERSION)", Node.js는 node -p process.versions.openssl로 내장 버전을 볼 수 있습니다.
3

컨테이너 이미지도 확인한다

컨테이너 안의 OpenSSL은 호스트 OS를 업데이트해도 바뀌지 않습니다. 베이스 이미지를 정기적으로 다시 빌드하고, 이미지마다 취약점 스캔을 합니다.
4

OpenSSL 보안 공지를 구독한다

심각한 수정이 담긴 릴리스는 약 일주일 전에 openssl-announce 메일링 리스트에 날짜와 심각도가 예고됩니다(세부 내용 제외). 이 예고가 있으면 업데이트할 시간을 미리 확보할 수 있습니다.

취약점 심각도 읽는 법

OpenSSL 프로젝트는 자체 취약점을 네 단계로 평가하고, 그에 따라 수정의 배포 방식을 바꿉니다.

심각도대략적인 의미수정의 배포 방식
Critical흔한 설정에 영향을 주고 악용이 쉬움(서버 메모리의 대량 유출, 개인 키 탈취 등)모든 지원 버전에 즉시 수정판 출시
HighCritical보다는 덜하지만 여전히 심각(덜 흔한 설정, 클라이언트 측만 해당 등)비공개로 준비한 뒤 모든 지원 버전에 출시
Moderate서비스 거부, 드문 프로토콜 등에 한정다음 정기 릴리스에 포함
Low명령줄 도구만 해당, 일어나기 어려운 조건 조합 등다음 정기 릴리스에 포함

Heartbleed처럼 외부에서 서버 메모리를 읽을 수 있는 결함은 Critical의 정의에 해당합니다. Critical과 High는 예고를 본 시점부터 업데이트 준비를 시작하세요.

이 사이트의 관점: 기반 라이브러리는 기계로 감시한다

기반 라이브러리의 결함은 사람의 기억으로 추적할 수 없습니다. 이 사이트는 자체 의존성과 기반을 기계적인 CVE 감시 아래에 두고 있습니다. Let's Encrypt로 제공하는 인증서도 그 밑에서는 OpenSSL 계열 구현으로 암호화를 수행합니다. 그러므로 평소 의식하지 않는 기반 라이브러리를 목록으로 만들고 감시하는 것이 영향 범위가 넓은 사고를 막는 가장 직접적인 방법입니다.

이어서 읽기

출처(1차 자료)

  • OpenSSL Library, "Release Strategy" — openssl-library.org(LTS 방침, 라인별 지원 종료일)
  • OpenSSL Library, "Security Policy" — openssl-library.org(심각도 4단계, 사전 예고)
  • Red Hat, "Backporting Security Fixes" — access.redhat.com(버전 번호만으로는 취약 여부를 알 수 없는 이유)
  • NIST NVD, "CVE-2014-0160" — nvd.nist.gov(Heartbleed)

FAQ

QOpenSSL을 설치한 적이 없는데, 그래도 쓰고 있을 수 있나요?
A

거의 틀림없이 그렇습니다. OpenSSL은 웹 서버(Nginx/Apache), 운영체제, 언어 런타임이 내부적으로 사용하는 기반 라이브러리입니다. 코드에서 한 번도 참조한 적이 없더라도 HTTPS를 제공하고 있다면 그 밑에서 OpenSSL(또는 호환 구현)이 돌고 있을 가능성이 매우 높습니다. '나는 안 쓴다'고 가정하는 것이야말로 기반 취약점을 놓치는 전형적인 경로입니다.

QLibreSSL이나 BoringSSL과는 어떻게 다른가요?
A

둘 다 OpenSSL의 포크입니다. LibreSSL은 Heartbleed 이후 OpenBSD 프로젝트가 코드베이스를 정리하기 위해 만들었고, BoringSSL은 Google이 자체 용도로 만든 변형입니다. 대부분의 사용자는 둘 중 무엇을 고를지 고민할 필요가 없습니다. 훨씬 더 중요한 것은 자신의 플랫폼에 들어 있는 구현이 무엇이든 지원되는 최신 버전으로 유지하는 일입니다.

Q버전을 확인하거나 업데이트하려면 어떻게 하나요?
A

많은 시스템에서 `openssl version`으로 확인할 수 있고, 업데이트는 OS의 패키지 관리자를 통하거나 컨테이너의 베이스 이미지를 다시 빌드해서 합니다. 핵심은 지원 종료(EOL)된 릴리스를 계속 돌리지 않는 것입니다. 릴리스 라인이 EOL이 되면 거기서 새로 발견되는 취약점은 수정되지 않습니다. 기반 의존성도 애플리케이션의 의존성과 똑같이 추적하세요.

QOpenSSL과 SSL은 무엇이 다른가요?
A

SSL(현재는 후속인 TLS)은 연결을 암호화하는 규칙(프로토콜)의 이름입니다. OpenSSL은 그 규칙을 실제로 실행하는 프로그램(라이브러리)의 이름입니다. HTTPS로 연결하면 웹 서버가 OpenSSL 같은 라이브러리로 TLS를 처리합니다.

QOpenSSL 3.0을 계속 써도 되나요?
A

OpenSSL 프로젝트의 3.0 지원은 끝났습니다(유료 연장 지원 제외). 다만 Linux 배포판이 제공하는 3.0 패키지는 그 OS의 지원 기간 동안 백포트된 수정을 계속 받을 수 있습니다. 직접 빌드한 3.0이나 애플리케이션에 번들된 3.0은 수정을 받지 못하므로, 3.5(LTS, 2030년 4월까지 지원) 같은 지원 라인으로 옮기세요.

QOpenSSL 취약점이 발표되었습니다. 먼저 무엇을 해야 하나요?
A

먼저 심각도를 확인합니다. Critical이나 High라면 서버, 컨테이너, 애플리케이션이 영향받는 OpenSSL 라인을 쓰는지 확인하고, OS 벤더나 이미지 배포자가 수정판을 내면 바로 업데이트합니다. 업데이트한 뒤에는 OpenSSL을 불러오는 프로세스(웹 서버 등)를 재시작하세요. 그러지 않으면 오래된 라이브러리가 메모리에 남습니다.