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) : 위장 서버 방지 (디지털 인증서)
- 기밀성 (Confidentiality): 통신 데이터를 암호화하여 제3자가 중간에서 패킷을 훔쳐보더라도(도청) 내용을 알 수 없게 합니다.
- 무결성 (Integrity): 전송 중인 데이터가 중간에서 변조되거나 손상되지 않았음을 해시 알고리즘(MAC)으로 검증합니다.
- 인증 (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단계 흐름
클라이언트(브라우저)와 서버가 처음 만나 암호화 통신을 시작하는 과정을 핸드셰이크라고 합니다.
- Client Hello: 클라이언트가 지원하는 TLS 버전, Cipher Suite(암호 알고리즘 목록), 난수 값을 서버로 전송합니다.
- Server Hello & Certificate: 서버가 사용할 TLS 버전과 Cipher Suite를 결정한 뒤, 자신의 SSL 인증서와 서버 난수 값을 클라이언트에 전달합니다.
- Key Exchange (키 교환): 클라이언트는 서버 인증서의 유효성을 검증(CA 서명 확인)한 후, 비대칭키 알고리즘(ECDHE 등)을 사용해 양쪽이 동일하게 가질 대칭키(세션키)를 생성합니다.
- 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 거부 확인)
# 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 목록 확인
# 서버에서 응답하는 Cipher 상세 정보 출력
openssl s_client -connect example.com:443 -cipher ALL:COMPLEMENTOFALL
③ 인증서 유효기간 및 키 정보 점검
# 인증서 만료일 및 주체 정보 출력
openssl x509 -in certificate.crt -noout -text -dates