TLS(SSL) 편집하기
IT위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
; | ;브라우저-서버 구간 암호화를 지원하는 보안 프로토콜 | ||
브라우저-서버 구간 암호화를 지원하는 보안 프로토콜 | |||
== SSL과 TLS == | == SSL과 TLS == | ||
* Netscape에서 처음 개발할 때 이름이 SSL이었다. | * Netscape에서 처음 개발할 때 이름이 SSL이었다. 이 때부터 사실상 표준 처럼 많이 쓰였다. | ||
* [[SSL/TLS|IETF에서 SSLv3을 기반으로 표준화를 진행하면서 TLS로 명칭이 변경되었다.]] | * [[SSL/TLS|IETF에서 SSLv3을 기반으로 표준화를 진행하면서 TLS로 명칭이 변경되었다.]] | ||
: (모 기업의 상용 제품과 이름이 겹쳐서 혼동을 피하고자 했다.) | : (모 기업의 상용 제품과 이름이 겹쳐서 혼동을 피하고자 했다.) | ||
25번째 줄: | 24번째 줄: | ||
=== Handshake 프로토콜 === | === Handshake 프로토콜 === | ||
* 세션에 대한 세션정보와 연결 정보를 공유하기 위한 프로토콜 | |||
* 초기 연결 시 세션 형성을 관장한다. | * 초기 연결 시 세션 형성을 관장한다. | ||
* '''동작순서''' | * '''동작순서''' | ||
*# 초기 협상 단계 : 프로토콜 버전, 암호화 방식 등 보안 파라미터(Cipher Suite)를 협상한다. | |||
*# 서버 인증 단계 | |||
*# 클라이언트 인증 단계 | |||
*# 종료 단계 : 협상된 보안 알고리즘에 따라 메시지 교환을 시작한다. | |||
* '''Cipher Suite''' | |||
** 서버와 클라이언트가 어떤 암호화 방식을 사용할지 정하기 위해 교환하는 문자열 값 | |||
** 형식: SSL/TLS_(키 교환 알고리즘)_(인증 알고리즘)_WITH_(대칭키 알고리즘)_(블록 암호 운용 방식)_(해시 알고리즘) | |||
** 예시) TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | |||
* '''단축된 핸드셰이크(Abbreviated Handshake)''' | |||
** 한동안 통신을 하지 않다가 다시 통신할 때(Session Resumption) 사용되는 프로토콜 | |||
** [https://tools.ietf.org/html/rfc5077 RFC5077] | |||
=== Change Cipher Spec 프로토콜 === | |||
* 서버와 클라이언트 상호 간의 cipher spec 확인을 위해 메시지를 교환하는데 사용된다. | |||
=== Alert 프로토콜 === | |||
* 메시지의 암호화 오류, 인증서 오류 등을 전달한다. | |||
== TLS Handshake == | |||
=== 일반 핸드셰이크 === | |||
{| class="wikitable" | {| class="wikitable" | ||
! 원칙 | ! 원칙 | ||
39번째 줄: | 57번째 줄: | ||
| Server Hello | | Server Hello | ||
| 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택 | | 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택 | ||
| 서버 | | 서버 ◀ 클라이언트 | ||
|- | |- | ||
| Server Certificate | | Server Certificate | ||
| 서버 인증서, 공개키 | | 서버 인증서, 공개키 | ||
| 서버 | | 서버 ◀ 클라이언트 | ||
|- | |- | ||
| Certificate Request | | Certificate Request | ||
| 서버에서 클라이언트 인증서 요청(생략 가능) | | 서버에서 클라이언트 인증서 요청(생략 가능) | ||
| 서버 | | 서버 ◀ 클라이언트 | ||
|- | |- | ||
| Server Hello Done | | Server Hello Done | ||
| 서버에서 필요한 내용을 모두 전송했음을 알림 | | 서버에서 필요한 내용을 모두 전송했음을 알림 | ||
| 서버 | | 서버 ◀ 클라이언트 | ||
|- | |- | ||
| Client Certificate | | Client Certificate | ||
61번째 줄: | 79번째 줄: | ||
| 클라이언트 ▶ 서버 | | 클라이언트 ▶ 서버 | ||
|- | |- | ||
| Certificate | | Certificate Verity | ||
| 클라이언트 인증서를 확인할 수 있도록 전자서명 발송, 서버에서 검증 | | 클라이언트 인증서를 확인할 수 있도록 전자서명 발송, 서버에서 검증 | ||
| 클라이언트 ▶ 서버 | | 클라이언트 ▶ 서버 | ||
71번째 줄: | 89번째 줄: | ||
| Server Finish | | Server Finish | ||
| 클라이언트에 Change Cipher Spec 전송하고 Finished 알림 | | 클라이언트에 Change Cipher Spec 전송하고 Finished 알림 | ||
| 서버 | | 서버 ◀ 클라이언트 | ||
|} | |} | ||
=== 단축 핸드셰이크 === | |||
;Abbreviated Handshake | |||
{| class="wikitable" | {| class="wikitable" | ||
! 원칙 | ! 원칙 | ||
91번째 줄: | 104번째 줄: | ||
| Server Hello | | Server Hello | ||
| 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택 | | 서버의 SSL 버전,서버 생성 난수, 세션 식별자, 클라이언트의 Cipher Suit 중 선택 | ||
| 서버 | | 서버 ◀ 클라이언트 | ||
|- | |- | ||
| Server Finish | | Server Finish | ||
| 클라이언트에 Change Cipher Spec 전송하고 Finished 알림 | | 클라이언트에 Change Cipher Spec 전송하고 Finished 알림 | ||
| 서버 | | 서버 ◀ 클라이언트 | ||
|- | |- | ||
| Client Finish | | Client Finish | ||
101번째 줄: | 114번째 줄: | ||
| 클라이언트 ▶ 서버 | | 클라이언트 ▶ 서버 | ||
|} | |} | ||
== 인증서의 종류 == | == 인증서의 종류 == | ||
=== 보증 범위에 따른 구분 === | === 보증 범위에 따른 구분 === | ||
* Wild Card 인증서: 서브도메인의 개수와 상관없이 모든 서브도메인을 다 보증한다. 가격이 훨씬 비싸다. | * Wild Card 인증서 : 서브도메인의 개수와 상관없이 모든 서브도메인을 다 보증한다. 가격이 훨씬 비싸다. | ||
* 일반 인증서: 특정 한 도메인에 대해서만 보증하며,서브도메인도 하나의 도메인으로 간주한다. | * 일반 인증서 : 특정 한 도메인에 대해서만 보증하며,서브도메인도 하나의 도메인으로 간주한다. | ||
=== 보증 강도에 따른 종류 === | === 보증 강도에 따른 종류 === | ||
* DV(Domain Validation): 실제 도메인의 소유주인지만 확인한다. | * DV(Domain Validation) : 실제 도메인의 소유주인지만 확인한다. | ||
* OV(Organization Validation): | * OV(Organization Validation) : 신청시 업체로부터 담당자(신청자)의 정보와 사용자 등록을 받음으로써 기업의 실체가 인증된다. | ||
* EV(Extended Validation): 업체의 사업자등록증과 기업 신용정보 등 기업의 신뢰도까지 검증하여 피싱, 파밍을 방지할 수 있다. | * EV(Extended Validation) : 업체의 사업자등록증과 기업 신용정보 등 기업의 신뢰도까지 검증하여 피싱, 파밍을 방지할 수 있다. | ||
[[분류:네트워크]] | [[분류:네트워크]] |