openssl : 웹브라우저와 서버 간의 통신을 암호화하는 오픈소스 라이브러리
보통의 경우 웹서비스에 https를 적용할 경우 SSL인증서를 VeriSign라는 곳에서 발급받아야 하는데, 이때 비용이 발생하기 때문에 실제 운영서버가 아니면 발급 받기에 부담이 될 수 있다.
이 때 OpenSSL을 사용하여 인증기관을 직접 만들고, Self Signed Certificate 를 생성하고, SSL인증서를 발급하면 된다.
발급된 SSL인증서는 Apache httpd 등의 웹서버에 설치해서 쉽게 https의 서비스를 이용할 수 있다.
1. SSL (Secure Socket Layer) 및 TLS (Transport Layer Security)
SSL? : Secure Socket Layer로 월드 와이드 웹 브라우저(www)와 웹 서버 간에 데이터를 안전하게 주고받기 위한 업계 표준 프로토콜을 의미한다.
ㅇ 전송계층 상에서 클라이언트,서버에 대한 인증 및 데이터 암호화 수행
- 클라이언트와 서버 양단 간 응용계층 및 TCP 전송계층 사이에서 안전한 보안 채널을
형성해 주는 역할을 수행하는 보안용 프로토콜
ㅇ 주요 응용
- 웹 브라우저와 웹 서버 사이의 안전한 보안 채널을 제공하기 위해 많이 사용됨
. HTTP (HTTPS), FTP, SMTP, SIP 등 에서도 사용 가능
3. SSL/TLS 주요 기능
ㅇ 상호 인증 : 공개키 인증서를 이용한 서버,클라이언트의 상호 인증
- 클라이언트/서버 두 응용 간에 상대방에 대한 인증
ㅇ 메세지 압축
- 디폴트 Null (압축 알고리즘은 미리 정해지지 않고 협상으로 지정 가능)
ㅇ 메세지 인증 (메세지 무결성)
- 메세지 인증 코드 HMAC에 의한 메세지 무결성 제공 (HMAC MD5, HMAC SHA-1 등)
ㅇ 암호화용 세션 키 생성(대칭 키 합의)을 위한 키 교환
- RSA : 두 키(공개 키 및 개인 키)가 하나의 수 체계를 형성 (서버 공개 키 사용)
- Diffie-Hellman : Diffie-Hellman 프로토콜을 기반으로 한 키 교환 방식
ㅇ 생성된 공유 비밀키에 의해 암호화된 종단간 안전한 연결 통로 제공
- 스트림 암호화 : 40, 128 비트의 RC4
- 블록 암호화 : IDEA, 40,56 비트의 DES, 168 비트의 3DES 등
4. SSL/TLS 보안 특징
ㅇ 인증 구조 : X.509
- X.509에서 규정된 공개키 인증서 교환에 의해 상대방에 대한 인증 수행
ㅇ 키 교환 방식 : (협상 선택 가능)
- Null, RSA 공개 키 교환, Anonymous Diffie-Hellman 키 교환,
Ephermeral Diffie-Hellman 키 교환, Fixed Diffie-Hellman 키 교환, Fortezza
ㅇ 대칭키 암호화 방식 : (협상 선택 가능)
- RC2 (40), RC4 (40), RC4 (128), DES, Triple DES, IDEA 등
ㅇ 해쉬 알고리즘 : (협상 선택 가능)
- Null, MD5, SHA-1
5. SSL/TLS 프로토콜 스택
ㅇ 전송계층 TCP 위에서 `보안 소켓/보안 채널/터널링`을 구성
- 응용계층에서 생성된 데이터에 대한 보안(인증,무결성,기밀성),압축 등의 서비스를 제공
- SSL/TLS 보안 터널을 위한 TCP/UDP 포트번호
. 例) 보안 HTTP를 위한 포트번호 443 (HTTPS)
- 한편, UDP 상에서도 가능한 버젼으로,
. DTLS (Datagram Transport Layer Security) RFC 6347(2012년)가 있음
ㅇ 프로토콜 스택 ☞ SSL/TLS 구성 프로토콜 참조
6. TLS 핸드세이크 단계
ㅇ 초기 협상 단계
- 클라이언트,서버 간에 Client Hello,Server Hello 메세지 교환
- 클라이언트가 서버에게 Cipher Suite(사용 가능 암호화,해싱 방식 등)을 보내고
서버 인증서를 요구
ㅇ 인증 단계
- 서버에서 공개키,서버명,인증기관 주소 등을 포함한 인증서를 클라이언트에게 전송
- 이때, 서버는 클라이언트가 제시한 것 중 자신이 선택한 암호화 방식 및 인증서를 보냄
- 필요시 클라이언트는, 인증서를 발급한 인증기관 서버에 접속하여 서버 인증서의 유효성 확인
ㅇ 보안 채널 형성
- 클라이언트는 보안 채널 형성에 필요한 세션키를 만들기 위해,
- 서버의 공개키를 이용하여 임의의 수(Pre Master Key)를 암호화시켜 서버에게 전송하고,
- 서버는 자신의 비밀키(개인키)로 이를 해독(역암호화)하게 됨
- 이때 임의의 수(Pre Master Key)로부터 Master Key를 유도하고,
- 이 Master Key로부터 양측은 암호화,복호화에 필요한 세션키를 생성함
ㅇ 상호 암호화 통신 시작
- 즉, 보안성이 확립된 TLS 터널 내에서 상호 통신
7. SSL/TLS 핸드세이크 프로토콜
ㅇ Application 데이터의 교환 이전의 세션 초기화 중에 이루어짐
- 서버와 클라이언트가 상호 인증
- `암호 키 교환` 및 `암호화 알고리즘` 협상 및 확립을 도모하기 위한 정보 교환
- DES 알고리즘 등에 기반하여 세션키를 생성
ㅇ 주요 협상 내용
- 키 교환 방식 협상
- 암호화 방식 협상
- HMAC 방식 협상
- 압축 방식 협상
ㅇ 클라이언트/서버 간에 공유 암호 키를 만들기 위해 공개 키 방식을 활용
- `데이터 암호화`를 위한 공유 암호 키를 정의 함
- `메세지 인증`을 위한 메세지 인증 코드(TLS : HMAC 코드) 생성
ㅇ 메세지 종류 (Handshake type)
- Hello request (0)
- Client Hello (1) (클라이언트 → 서버)
. 주요 정보 : Version, Client Random Number, Session ID, Cipher Suite,
Compression Method
. Cipher Suite 이란?
.. 클라이언트가 지원 가능한 보안 방식들을 2 바이트 코드 값으로 열거한 것
.. 키 교환 방식, 암호화 방식, MAC 코드(Message Authentication Code) 방식
- Server Hello (2) (서버 → 클라이언트)
. 주요 정보 : Version, Server Random Number, Session ID,
Selected Cipher Set, Selected Compression Method
- Certificate (11) : 서버,클라이언트가 송신하는 X.509 v3 인증서가 이에 수납됨
- Server Key Exchange (12)
- Certificate Request (13)
- Server Hello Done (14)
- Certificate Verify (15)
- Client Key Exchange (16)
- Finished (20)
8. Change Cipher Spec 프로토콜
ㅇ 상호 암호 통신을 수행키 위해 필요한 일련의 보안 알고리즘 정보를 사전에 협의하기
위한 일련의 보안 매개변수(암호학적 비밀)를 상대에게 신속하게 전송하는데 사용
9. Alert 프로토콜
ㅇ 핸드세이크 과정에서 상대방이 제시한 암호화 방식을 지원할 수 없을 때 등의
오류 발생시 상대방에게 오류 통보 기능 수행
10. Record 프로토콜 (또는 데이터 교환 프로토콜)
ㅇ 주요 기능
- 메세지 분할(Fragmentation) : 214 또는 그 이하의 블록으로 데이터를 나눔
- 메세지 압축(Compression)
- 메세지 무결성(Message Integrity)
- 메세지 인증(Message Authentication)
- 메세지 암호화(Encryption)
ㅇ 제공 보안서비스 : 기밀성, 무결성
- 기밀성 : DES 등과 같은 암호화 방식을 선택하여 이를 이용하여 보안성을 제공
- 무결성 : 매 메세지별 HMAC 이용
ㅇ 계층 위치
- TCP 전송계층 바로 위에 위치
. 양단간 통신 연결 시 보안 제공
ㅇ 상위 메세지 종류 (content type)
- Change Cipher Soec 프로토콜 (20)
- Alert 프로토콜 (21)
- Handshake 프로토콜 (22)
- Application Data (23)
ㅇ 특징
- 상위계층 프로토콜들인 핸드세이크,Change Cipher Spec,Alert 프로토콜 등의
제어 메세지 및 Application 메세지들을 수납하여,
레코드 단위(TLS record)로 운반하는 프로토콜
[참조]http://vipeveloper.tistory.com/29
[참조]http://www.ktword.co.kr/abbr_view.php?m_temp1=1957&m_search=ssl
'Network' 카테고리의 다른 글
[Network]무선LAN (0) | 2020.10.14 |
---|---|
[Network] 방화벽이란? (0) | 2018.11.01 |