728x90
1. SSL/TLS
SSL과 TLS는 모두 인터넷 상의 통신을 암호화하고 보안성을 확보하기 위한 암호화 프로토콜입니다.
많이 혼용되어 쓰이지만, 정확히는 TLS가 SSL의 후속 버전이며, 현재는 TLS만 사용됩니다.
항목SSL (Secure Sockets Layer)TLS (Transport Layer Security)
개발사 | Netscape | IETF (인터넷 표준화 기구) |
등장 | 1995년 (SSL 2.0) | 1999년 (TLS 1.0) |
현재 지원 여부 | ❌ 사용 중단됨 (보안 취약) | ✅ TLS 1.2, 1.3 사용 중 |
목적 | 통신 암호화, 기밀성, 무결성, 인증 |
2. SSL/TLS 동작 원리 (핸드셰이크 기반 암호화)
TLS 핸드셰이크 단계
- 클라이언트 Hello
- 지원하는 TLS 버전, 암호화 알고리즘 목록, 랜덤값 전송
- 서버 Hello
- TLS 버전, 암호화 방식 선택
- 서버 인증서(공개키 포함) 전송
- 서버 인증서 검증
- 클라이언트가 인증서 유효성 확인 (CA 신뢰, 만료일 등)
- 세션 키 생성
- 클라이언트가 대칭키를 생성해 서버 공개키로 암호화해 전송
- 세션 암호화 시작
- 이제부터는 대칭키 기반 암호화된 통신 수행 (빠르고 안전)
3. TLS의 주요 기능
기능설명
🔒 암호화 (Encryption) | 데이터가 도청되지 않도록 암호화 |
✅ 인증 (Authentication) | 인증서를 통해 서버 또는 클라이언트 신원 확인 |
✅ 무결성 (Integrity) | 데이터가 전송 중 변경되지 않았음을 검증 (HMAC 등 사용) |
4. SSL/TLS 인증서란?
- **공개키 기반 구조(PKI)**를 기반으로 한 서버 인증서
- 주로 X.509 형식을 따름
- 주요 필드:
- CN (Common Name): 호스트 이름
- Issuer: 발급자 (CA)
- Validity: 유효 기간
- Public Key: 공개키
- Signature: CA의 서명
5. DB에서 TLS 적용 사례
MySQL | ✅ 지원 (SSL 옵션 또는 require_secure_transport) | |
PostgreSQL | ✅ ssl = on, ssl_cert_file, ssl_key_file 등 | |
Oracle | ✅ TCPS 프로토콜 사용 (Oracle Wallet 기반 인증) | |
SQL Server | ✅ 암호화 통신 및 인증서 등록 가능 |
6. TLS 버전별 차이점
버전상태주요 특징
SSL 2.0 / 3.0 | ❌ 취약, 사용 중단 | CBC 공격, POODLE 등 심각한 취약점 |
TLS 1.0 / 1.1 | ⚠️ 점진적 중단 중 | 안전성 미흡 (2020년 이후 대부분 미지원) |
TLS 1.2 | ✅ 광범위하게 사용 | SHA-256 이상, PFS 지원 |
TLS 1.3 | ✅ 최신 표준 | 핸드셰이크 단순화, 더 빠름, 보안 강화 |
7. TLS 적용 시 고려사항
항목설명
🔐 인증서 관리 | CA에서 발급받은 인증서 필요 또는 자체 서명 사용 가능 |
🔄 성능 영향 | 초기 핸드셰이크에 CPU 부담, 이후 대칭키 사용으로 성능 영향 적음 |
✅ 접근제어 영향 | 스니핑 방식 접근제어와 충돌 (복호화 불가) |
⚙️ 설정 위치 | my.cnf, postgresql.conf, Oracle Wallet, SQL Server Configuration 등 |
실제 사용되는 경우
🔐 금융/공공기관 | 개인정보, 금융거래정보를 보호하기 위해 WAS ↔ DB 간에도 암호화 연결을 필수로 요구하는 경우 많음 |
📜 보안 인증 준수 (ISMS, PCI-DSS 등) | “모든 전송 구간의 암호화”를 요구하므로, DB 구간도 포함됨 |
☁️ 클라우드/하이브리드 환경 | WAS ↔ DB가 **다른 네트워크(예: IDC ↔ VPC)**에 있거나, 인터넷 경로를 일부 거치는 경우 |
🧪 외부 감사 또는 보안 감수 지적 사항 | 감시 로그에 “DB 구간 평문 전송”이 발견될 경우, TLS로 전환 지시됨 |
어떤 DB에서 TLS 연결을 지원하나?
MySQL | ✅ --ssl-mode=REQUIRED 등 | jdbc:mysql://host/db?useSSL=true |
Oracle | ✅ TCPS 프로토콜 + Wallet | jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)... |
PostgreSQL | ✅ ssl=true 설정 | jdbc:postgresql://host:5432/db?ssl=true |
SQL Server | ✅ 인증서 기반 | encrypt=true;trustServerCertificate=false 등 |
장점
- 데이터 전송 중 도청 방지
- 패킷 스니핑 및 중간자 공격(MITM) 차단
- 보안 인증, 외부 감사 대응 가능
단점
- 초기 핸드셰이크 시 CPU 부담 (TLS 1.3은 개선됨)
- 일부 JDBC 드라이버/연결 라이브러리의 추가 설정 필요
- 접근제어 스니핑 솔루션과 충돌 가능 (복호화 불가)
실무 적용 예시 (MySQL 기준)
🔐 1. 서버 (MySQL) 설정
[mysqld]
require_secure_transport = ON
ssl_cert = /etc/mysql/server-cert.pem
ssl_key = /etc/mysql/server-key.pem
ssl_ca = /etc/mysql/ca-cert.pem
🔐 2. 클라이언트 (WAS, Java 등) 설정
JDBC URL 예시:
jdbc:mysql://dbhost:3306/mydb?useSSL=true&requireSSL=true&verifyServerCertificate=true
또는 인증서 직접 지정:
-Djavax.net.ssl.keyStore=/path/to/client-keystore.jks
-Djavax.net.ssl.trustStore=/path/to/truststore.jks
구간 TLS 사용 여부 설명
WAS ↔ DB | ✅ 점점 증가 추세 | 클라우드/보안감사/금융기관 등에서 필수 적용 중 |
- 과거에는 내부망을 신뢰해서 평문 연결이 일반적이었지만,
- 최근은 **“내부망도 더 이상 안전하지 않다”**는 인식으로 TLS 적용이 확산되고 있습니다.
728x90
반응형