R&D/클라우드

OpenSSL 보안 기초 - 1장

sunshout1 2026. 8. 12. 16:39
반응형

TLS(Transport Layer Security)와 SSL(Secure Sockets Layer)은 인터넷 통신에서 데이터의 기밀성, 무결성, 신원 인증을 보장하기 위해 암호화 패킷을 주고받는 보안 프로토콜입니다. 웹 브라우저 주소창의 https://에서 s가 바로 TLS/SSL이 적용되었음을 의미합니다.

1. TLS/SSL이 제공하는 3대 보안 요소

TLS/SSL은 네트워크 통신 과정에서 발생할 수 있는 3가지 주요 위협을 방지합니다.

       [클라이언트] <===============================> [서버]
                         TLS/SSL 암호화 터널
                         
  1. 기밀성 (Confidentiality) : 도청 방지 (데이터 암호화)
  2. 무결성 (Integrity)       : 위·변조 방지 (해시 검증)
  3. 인증 (Authentication)   : 위장 서버 방지 (디지털 인증서)
  1. 기밀성 (Confidentiality): 통신 데이터를 암호화하여 제3자가 중간에서 패킷을 훔쳐보더라도(도청) 내용을 알 수 없게 합니다.
  2. 무결성 (Integrity): 전송 중인 데이터가 중간에서 변조되거나 손상되지 않았음을 해시 알고리즘(MAC)으로 검증합니다.
  3. 인증 (Authentication): 접속하려는 서버가 진짜 해당 도메인의 주인이 맞는지 공인된 인증기관(CA)의 디지털 인증서를 통해 신원을 확인합니다.

2. SSL과 TLS의 차이점

두 용어는 혼용되어 사용되지만, SSL은 과거 규격이며 TLS가 현재 사용되는 표준입니다.

구분 SSL (Secure Sockets Layer) TLS (Transport Layer Security)
개발 주체 Netscape (1990년대) IETF (국제 인터넷 표준화 기구)
버전 역사 SSL 1.0, 2.0, 3.0 TLS 1.0, 1.1, 1.2, 1.3
현재 상태 모두 폐기 (사용 금지) TLS 1.2, TLS 1.3 사용 필수
비고 취약점(POODLE 등)으로 폐기됨 SSL 3.0을 기반으로 개선된 차세대 표준

참고: 관습적으로 TLS를 여전히 'SSL 인증서', 'SSL 통신'이라고 부르는 경우가 많지만, 실제 기술 규격은 모두 TLS를 의미합니다.

3. 핵심 동작 원리: 비대칭키와 대칭키의 조합

TLS는 성능과 보안을 모두 잡기 위해 비대칭키(공개키) 암호화대칭키 암호화 방식을 함께 사용합니다.

[1단계: 핸드셰이크 (비대칭키)]
- 속도는 느리지만 안전함
- 서버 신원 검증 + 안전하게 대칭키(세션키) 나눠갖기

[2단계: 데이터 전송 (대칭키)]
- 속도가 매우 빠름
- 나눠가진 세션키로 실제 웹 트래픽을 대량 암호화하여 전송
  • 비대칭키 (Key Exchange): 암호화 키와 복호화 키가 다름. 키를 안전하게 공유하는 핸드셰이크 단계에서 사용.
  • 대칭키 (Symmetric Encryption): 암호화와 복호화에 동일한 키 사용. 연산이 빨라 실제 데이터를 주고받을 때 사용.

4. TLS 핸드셰이크 (Handshake) 4단계 흐름

클라이언트(브라우저)와 서버가 처음 만나 암호화 통신을 시작하는 과정을 핸드셰이크라고 합니다.

  1. Client Hello: 클라이언트가 지원하는 TLS 버전, Cipher Suite(암호 알고리즘 목록), 난수 값을 서버로 전송합니다.
  2. Server Hello & Certificate: 서버가 사용할 TLS 버전과 Cipher Suite를 결정한 뒤, 자신의 SSL 인증서와 서버 난수 값을 클라이언트에 전달합니다.
  3. Key Exchange (키 교환): 클라이언트는 서버 인증서의 유효성을 검증(CA 서명 확인)한 후, 비대칭키 알고리즘(ECDHE 등)을 사용해 양쪽이 동일하게 가질 대칭키(세션키)를 생성합니다.
  4. Finished: 핸드셰이크가 완료되면 이후의 모든 HTTP 요청/응답은 완성된 세션키로 암호화되어 전송됩니다.

--------

OpenSSL 보안은 웹 서비스, OS, 네트워크 장비 등 인터넷 통신 전반의 암호화 무결성과 직결되는 핵심 요소입니다. OpenSSL을 안전하게 운용하기 위해서는 프로토콜 설정, Cipher Suite 경량화/강화, 키 및 인증서 관리, 그리고 버전을 지속해서 업데이트하는 패치 체계가 통합되어야 합니다.

1. OpenSSL 보안의 4대 핵심 축

OpenSSL 보안 체계는 크게 네 가지 영역으로 구성됩니다.

+-----------------------------------------------------------------+
|                    OpenSSL 보안 관리 체계                       |
+-----------------------------------------------------------------+
        │                 │                 │                 │
        ▼                 ▼                 ▼                 ▼
 [프로토콜 하드닝]  [Cipher Suite 최적화]  [키/인증서 관리]   [버전 패치]
 TLS 1.2/1.3 강제   ECDHE + AEAD 적용    RSA 2048b+/ECC    3.x 최신 버전 유지

① 프로토콜 하드닝 (Protocol Hardening)

  • 취약 프로토콜 제거: SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1은 POODLE, BEAST, CRIME 등의 구조적 공격에 노출되어 있으므로 시스템에서 완전히 비활성화해야 합니다.
  • 최신 프로토콜 강제: TLS 1.2 및 TLS 1.3만 허용하도록 설정합니다. (TLS 1.3은 핸드셰이크 단계를 단축하고 취약한 알고리즘을 기본적으로 철회하여 보안성과 성능을 동시에 제공)

② Cipher Suite 강화 (Strong Cipher Suites)

  • 순방향 비밀성(Forward Secrecy) 보장: 정적 RSA 키 교환 대신 ECDHE(임시 타원곡선 디피-헬만) 알고리즘을 사용하여, 향후 서버의 개인키가 탈취되어도 과거의 암호화 트래픽을 복호화할 수 없도록 합니다.
  • 인증된 암호화(AEAD) 사용: CBC 모드 대신 AES-GCM 또는 ChaCha20-Poly1305 방식을 사용해 패딩 오라클 공격(Lucky Thirteen 등)을 원천 차단합니다.
  • 약한 알고리즘 폐기: 3DES(Sweet32 공격), RC4(바이어스 결함), MD5/SHA-1(충돌 공격) 기반의 Cipher를 일절 배제합니다.

③ 키 및 인증서 관리 (Key & PKI Security)

  • 키 길이 및 규격: RSA 키는 최소 2048비트(3072비트 권장) 이상, ECC 키는 p-256 또는 p-384 이상을 사용합니다.
  • 개인키 파일 권한 제어: private.key 등 서버 개인키 파일은 Root 또는 특정 서비스 계정만 읽을 수 있도록 파일 권한(chmod 600 또는 400)을 제한합니다.
  • TLS 압축 비활성화: OpenSSL의 TLS Compression 기능은 CRIME/BREACH 공격의 원인이 되므로 명시적으로 비활성화(SSL_OP_NO_COMPRESSION)해야 합니다.

④ 버전 관리 및 취약점 패치 (Lifecycle & Patch)

OpenSSL은 과거 Heartbleed(CVE-2014-0160, 메모리 낭독 취약점)와 같은 파급력이 매우 큰 취약점이 존재했습니다.

  • 버전 수명(EOL) 확인: 레거시 1.0.2, 1.1.1 등 지원이 종료(EOL)된 버전은 심각한 보안 위험에 노출되므로 OpenSSL 3.0 이상의 LTS(Long Term Support) 버전으로 전환해야 합니다.
  • 지속적 보안 권고문 모니터링: OpenSSL 프로젝트의 취약점 공지(High/Critical 등급) 발생 시 즉시 라이브러리를 업데이트하고 재컴파일/재시작을 진행해야 합니다.

2. 안전한 Cipher Suite 구성 권장안

보안성과 호환성을 모두 고려한 OpenSSL 권장 Cipher Suite 조합은 다음과 같습니다.

구분 권장 구성 요소 비권장/제거 대상
Protocol TLS 1.2, TLS 1.3 SSLv2, SSLv3, TLS 1.0, TLS 1.1
Key Exchange ECDHE, DHE Static RSA, DH
Cipher (Symmetric) AES-GCM, ChaCha20-Poly1305 3DES, RC4, DES, SEED, AES-CBC
MAC / Hash SHA256, SHA384 MD5, SHA-1

3. OpenSSL CLI 기반 보안 점검 명령어

OpenSSL 커맨드라인 도구를 활용하여 서버의 TLS/SSL 보안 설정을 직접 점검할 수 있습니다.

① 특정 취약 프로토콜 접속 여부 확인 (TLS 1.0/1.1 거부 확인)

Bash
 
# TLS 1.0으로 접속 시도 (거부되어야 정상)
openssl s_client -connect example.com:443 -tls1

# TLS 1.2로 접속 시도 (성공해야 정상)
openssl s_client -connect example.com:443 -tls1_2

② 서버 지원 Cipher Suite 목록 확인

Bash
 
# 서버에서 응답하는 Cipher 상세 정보 출력
openssl s_client -connect example.com:443 -cipher ALL:COMPLEMENTOFALL

③ 인증서 유효기간 및 키 정보 점검

Bash
 
# 인증서 만료일 및 주체 정보 출력
openssl x509 -in certificate.crt -noout -text -dates
728x90
반응형