TLS(SSL): Difference between revisions

From CS Wiki
No edit summary
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
;브라우저-서버 구간 암호화를 지원하는 보안 프로토콜
;Transport Layer Security (Secure Sockets Layer)
브라우저-서버 구간 암호화를 지원하는 보안 프로토콜


== SSL과 TLS ==
== SSL과 TLS ==
* Netscape에서 처음 개발할 때 이름이 SSL이었다. 이 때부터 사실상 표준 처럼 많이 쓰였다.
* Netscape에서 처음 개발할 때 이름이 SSL이었다. 이때부터 사실상 표준처럼 많이 쓰였다.
* [[SSL/TLS|IETF에서 SSLv3을 기반으로 표준화를 진행하면서 TLS로 명칭이 변경되었다.]]
* [[SSL/TLS|IETF에서 SSLv3을 기반으로 표준화를 진행하면서 TLS로 명칭이 변경되었다.]]
: (모 기업의 상용 제품과 이름이 겹쳐서 혼동을 피하고자 했다.)
: (모 기업의 상용 제품과 이름이 겹쳐서 혼동을 피하고자 했다.)
Line 24: Line 25:


=== Handshake 프로토콜 ===
=== Handshake 프로토콜 ===
* 세션에 대한 세션정보와 연결 정보를 공유하기 위한 프로토콜
; 세션에 대한 세션정보와 연결 정보를 공유하기 위한 프로토콜
* 초기 연결 시 세션 형성을 관장한다.
* 초기 연결 시 세션 형성을 관장한다.
* '''동작순서'''
* '''동작순서'''
*# 초기 협상 단계 : 프로토콜 버전, 암호화 방식 등 보안 파라미터(Cipher Suite)를 협상한다.
{| class="wikitable"
*# 서버 인증 단계
! 원칙
*# 클라이언트 인증 단계
! 설명
*# 종료 단계 : 협상된 보안 알고리즘에 따라 메시지 교환을 시작한다.
! 방향
|-
| Client Hello
| 클라이언트 SSL 버전, 클라이언트 생성 난수, 세션 식별자, Cipher Suit 리스트
| 클라이언트 ▶ 서버
|-
| Server Hello
| 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택
| 서버 ▶ 클라이언트
|-
| Server Certificate
| 서버 인증서, 공개키
| 서버 ▶ 클라이언트
|-
| Certificate Request
| 서버에서 클라이언트 인증서 요청(생략 가능)
| 서버 ▶ 클라이언트
|-
| Server Hello Done
| 서버에서 필요한 내용을 모두 전송했음을 알림
| 서버 ▶ 클라이언트
|-
| Client Certificate
| 서버에서 클라이언트 인증서를 요청한 경우 인증서 송신(생략 가능)
| 클라이언트 ▶ 서버
|-
| Client Key Exchange
| 세션키 생성용 pre_master_secret 을 서버 공개키로 암호화하여 전송
| 클라이언트 ▶ 서버
|-
| Certificate Verify
| 클라이언트 인증서를 확인할 수 있도록 전자서명 발송, 서버에서 검증
| 클라이언트 ▶ 서버
|-
| Client Finish
| 서버에 Change Cipher Spec을 전송하고 Finished 알림
| 클라이언트 ▶ 서버
|-
| Server Finish
| 클라이언트에 Change Cipher Spec 전송하고 Finished 알림
| 서버 ▶ 클라이언트
|}
* '''Cipher Suite'''
* '''Cipher Suite'''
** 서버와 클라이언트가 어떤 암호화 방식을 사용할지 정하기 위해 교환하는 문자열 값
** 서버와 클라이언트가 어떤 암호화 방식을 사용할지 정하기 위해 교환하는 문자열 값
Line 38: Line 80:
** 한동안 통신을 하지 않다가 다시 통신할 때(Session Resumption) 사용되는 프로토콜
** 한동안 통신을 하지 않다가 다시 통신할 때(Session Resumption) 사용되는 프로토콜
** [https://tools.ietf.org/html/rfc5077 RFC5077]
** [https://tools.ietf.org/html/rfc5077 RFC5077]
{| class="wikitable"
! 원칙
! 설명
! 방향
|-
| Client Hello
| 클라이언트 SSL 버전, 클라이언트 생성 난수, 세션 식별자, Cipher Suit 리스트
| 클라이언트 ▶ 서버
|-
| Server Hello
| 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택
| 서버 ▶ 클라이언트
|-
| Server Finish
| 클라이언트에 Change Cipher Spec 전송하고 Finished 알림
| 서버 ▶ 클라이언트
|-
| Client Finish
| 서버에 Change Cipher Spec을 전송하고 Finished 알림
| 클라이언트 ▶ 서버
|}


=== Change Cipher Spec 프로토콜 ===
=== Change Cipher Spec 프로토콜 ===
* 서버와 클라이언트 상호 간의 cipher spec 확인을 위해 메시지를 교환하는데 사용된다.
* 서버와 클라이언트 상호간의 Cipher Spec 확인을 위해 메시지를 교환하는데 사용된다.
=== Alert 프로토콜 ===
=== Alert 프로토콜 ===
* 메시지의 암호화 오류, 인증서 오류 등을 전달한다.
* 메시지의 암호화 오류, 인증서 오류 등을 전달한다.
Line 46: Line 109:
== 인증서의 종류 ==
== 인증서의 종류 ==
=== 보증 범위에 따른 구분 ===
=== 보증 범위에 따른 구분 ===
* Wild Card 인증서 : 서브도메인의 개수와 상관없이 모든 서브도메인을 다 보증한다. 가격이 훨씬 비싸다.
* Wild Card 인증서: 서브도메인의 개수와 상관없이 모든 서브도메인을 다 보증한다. 가격이 훨씬 비싸다.
* 일반 인증서 : 특정 한 도메인에 대해서만 보증하며,서브도메인도 하나의 도메인으로 간주한다.
* 일반 인증서: 특정 한 도메인에 대해서만 보증하며,서브도메인도 하나의 도메인으로 간주한다.


=== 보증 강도에 따른 종류 ===
=== 보증 강도에 따른 종류 ===
* DV(Domain Validation) : 실제 도메인의 소유주인지만 확인한다.
* DV(Domain Validation): 실제 도메인의 소유주인지만 확인한다.
* OV(Organization Validation) : 신청시 업체로부터 담당자(신청자)의 정보와 사용자 등록을 받음으로써 기업의 실체가 인증된다.
* OV(Organization Validation): 신청 시 업체로부터 담당자(신청자)의 정보와 사용자 등록을 받음으로써 기업의 실체가 인증된다.
* EV(Extended Validation) : 업체의 사업자등록증과 기업 신용정보 등 기업의 신뢰도까지 검증하여 피싱, 파밍을 방지할 수 있다.
* EV(Extended Validation): 업체의 사업자등록증과 기업 신용정보 등 기업의 신뢰도까지 검증하여 피싱, 파밍을 방지할 수 있다.


[[분류:네트워크]]
[[분류:네트워크]]

Latest revision as of 07:48, 9 January 2023

Transport Layer Security (Secure Sockets Layer)

브라우저-서버 구간 암호화를 지원하는 보안 프로토콜

SSL과 TLS[edit | edit source]

(모 기업의 상용 제품과 이름이 겹쳐서 혼동을 피하고자 했다.)
  • 즉 SSLv3 ≒ TLS
  • 무선 환경에서는 WTLS가 사용된다.

기본 스펙[edit | edit source]

  • 공개키 알고리즘을 기반으로 동작한다.
  • X.509 인증서를 지원한다.
  • 기본적으로 TCP 443 포트를 이용한다.
  • OSI 7계층 중 4계층(Transport)부터 7계층(Application)에 걸쳐 동작한다.
  • RSA, MD5, SHA-1 등을 사용한다. SHA-1은 최근에 SHA-256으로 대부분 교체되었다.

프로토콜 구성[edit | edit source]

Record 프로토콜[edit | edit source]

  • 기밀성을 위한 데이터 암호화를 수행한다.
  • 무결성을 위한 MAC을 생성한다.
  • 아래 3개의 프로토콜 하위에 위치하며 실질적인 보안을 수행한다.
  • 동작 순서
    • 단편화 → 압축 → MAC추가 → 암호화

Handshake 프로토콜[edit | edit source]

세션에 대한 세션정보와 연결 정보를 공유하기 위한 프로토콜
  • 초기 연결 시 세션 형성을 관장한다.
  • 동작순서
원칙 설명 방향
Client Hello 클라이언트 SSL 버전, 클라이언트 생성 난수, 세션 식별자, Cipher Suit 리스트 클라이언트 ▶ 서버
Server Hello 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택 서버 ▶ 클라이언트
Server Certificate 서버 인증서, 공개키 서버 ▶ 클라이언트
Certificate Request 서버에서 클라이언트 인증서 요청(생략 가능) 서버 ▶ 클라이언트
Server Hello Done 서버에서 필요한 내용을 모두 전송했음을 알림 서버 ▶ 클라이언트
Client Certificate 서버에서 클라이언트 인증서를 요청한 경우 인증서 송신(생략 가능) 클라이언트 ▶ 서버
Client Key Exchange 세션키 생성용 pre_master_secret 을 서버 공개키로 암호화하여 전송 클라이언트 ▶ 서버
Certificate Verify 클라이언트 인증서를 확인할 수 있도록 전자서명 발송, 서버에서 검증 클라이언트 ▶ 서버
Client Finish 서버에 Change Cipher Spec을 전송하고 Finished 알림 클라이언트 ▶ 서버
Server Finish 클라이언트에 Change Cipher Spec 전송하고 Finished 알림 서버 ▶ 클라이언트
  • Cipher Suite
    • 서버와 클라이언트가 어떤 암호화 방식을 사용할지 정하기 위해 교환하는 문자열 값
    • 형식: SSL/TLS_(키 교환 알고리즘)_(인증 알고리즘)_WITH_(대칭키 알고리즘)_(블록 암호 운용 방식)_(해시 알고리즘)
    • 예시) TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • 단축된 핸드셰이크(Abbreviated Handshake)
    • 한동안 통신을 하지 않다가 다시 통신할 때(Session Resumption) 사용되는 프로토콜
    • RFC5077
원칙 설명 방향
Client Hello 클라이언트 SSL 버전, 클라이언트 생성 난수, 세션 식별자, Cipher Suit 리스트 클라이언트 ▶ 서버
Server Hello 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택 서버 ▶ 클라이언트
Server Finish 클라이언트에 Change Cipher Spec 전송하고 Finished 알림 서버 ▶ 클라이언트
Client Finish 서버에 Change Cipher Spec을 전송하고 Finished 알림 클라이언트 ▶ 서버

Change Cipher Spec 프로토콜[edit | edit source]

  • 서버와 클라이언트 상호간의 Cipher Spec 확인을 위해 메시지를 교환하는데 사용된다.

Alert 프로토콜[edit | edit source]

  • 메시지의 암호화 오류, 인증서 오류 등을 전달한다.

인증서의 종류[edit | edit source]

보증 범위에 따른 구분[edit | edit source]

  • Wild Card 인증서: 서브도메인의 개수와 상관없이 모든 서브도메인을 다 보증한다. 가격이 훨씬 비싸다.
  • 일반 인증서: 특정 한 도메인에 대해서만 보증하며,서브도메인도 하나의 도메인으로 간주한다.

보증 강도에 따른 종류[edit | edit source]

  • DV(Domain Validation): 실제 도메인의 소유주인지만 확인한다.
  • OV(Organization Validation): 신청 시 업체로부터 담당자(신청자)의 정보와 사용자 등록을 받음으로써 기업의 실체가 인증된다.
  • EV(Extended Validation): 업체의 사업자등록증과 기업 신용정보 등 기업의 신뢰도까지 검증하여 피싱, 파밍을 방지할 수 있다.