[network] SSL 에 대해 알아보장~ |
기본 개념
-
SSL 은 Secure Sockets Layer 의 약자
-
SSL 은 서버 인증 (Server Authentication), 클라이언트 인증 (Client Authentication) 그리고 데이터 암호화(Data Encryption) 이렇게 3가지 기능을 제공하는 프로토콜이다.
Netscape 사에서 만들었다.
-
SSL 을 사용하는 URL 은 https 라는 스킴을 사용한다.
-
SSL 3.0 의 업그레이드 버전부터는 TLS 로 이름이 바뀌었다.
TLS 는 Transport Layer Security 의 약자.
-
1. 웹브라우저가 SSL 로 암호화된 페이지를 요청한다. (https scheme 사용)
2. 웹 서버가 public key 를 인증서와 함께 브라우저에 전송한다.
3. 브라우저는 인증서를 trusted root CA 로부터 서명된 것이 맞는지 확인한다. 그리고 유효기간이 괜찮은지, 인증서가 접속하는 사이트와 관련이 있는지 확인한다.
4. 브라우저는 서버로부터 받은 public key 를 사용해서 데이터와 랜덤 대칭 암호화키(Random symmetric encryption key) 를 암호화하여 전송한다.
5. 서버는 private key 를 이용해서 전달받은 데이터를 복호화한다.
6. 서버는 응답을 브라우저로부터 받은 랜덤 대칭 암호화키를 이용해 암호화해서 브라우저로 전송한다.
7. 브라우저는 대칭 키를 이용해서 데이터를 복호화하고 화면에 정보를 뿌려준다.
인증서 (Certificate)
-
SSL Certificate 는 public, private key 를 가지고 있다.
이들은 data 의 암호화에 사용된다.
-
인증서 ( Certificate ) 는 소유자의 공개키가 맞는지를 검증하는 도구이다.
X.509 표준을 준수하는 인증서는 다음과 같은 서명( Signature ) 영역을 가지고 있다.
공개키를 소유하고 있는 자의 구별 가능한 이름
공개키를 발급(Issue)한 자의 구별 가능한 이름
인증서의 유효기간 ( 언제부터 언제까지 유효한가 )
공개키 그 자체
-
인증서는 인증서 기관 ( CA, Certificate Authority ) 를 통해 발급받을 수 있다.
CA 를 통한 인증서가 아닌 자기 서명 인증서 ( Self-signed Certificate ) 를 만들 수도 있다.
-
인증서를 발급하는 인증기관은 서로간에 Hierarchy 관계가 있다.
루트 CA 는 자기 서명 인증서를 가지고 있다.
그리고 그 하부 CA 들은 자신의 parent CA 가 발급한 인증서를 가지고 있다.
Leaf node 를 차지하는 CA 는 EE ( End Entity ) 라고 부른다.
특정 CA 는 인증서 체인 ( Certificate Chain ) 을 갖는다.
인증서 체인은 Parent 의 CA 가 발급한 인증서를 가지고 있고, 그 Parent CA 는 그의 Parent CA 의 인증서를 갖는 셈이다.
SSL 인증
-
서버측 인증과 상호 인증 두 가지 형태의 인증이 있다.
-
서버측 인증은 대부분의 전자 상거래 사이트들이 사용하고 있는 형태이다.
클라이언트는 웹서버로 인증서를 요구하고, 그 인증서가 신뢰성 있는 것인지 확인한다.
신뢰성이 검증되었을 때에만 전자 상거래를 지속한다.
웹 서버로부터 전달되는 인증서의 서명을 확인하기 위해서 CA 의 Trust store 를 사용한다.
( 클라이언트 인증은 주로 아이디 + 암호 입력 방식으로 한다 )
-
상호 인증은 서버와 클라이언트 양쪽 모두를 인증하는 것이다.
서버측 인증은 동일하며, 추가로 웹서버는 클라이언트가 신뢰성이 있는지 마찬가지로 확인하는 과정을 거친다.
KeyStore & TrustStore
-
KeyStore 는 클라이언트 인증을 위해 클라이언트 측에 놓이는 것이고,
TrustStore 는 서버를 인증하기 위한 것이다.
-
KeyStore 는 비밀키, 관련된 인증서( 또는 인증서 체인 ) 을 가지고 있는 데이터베이스이다.
클라이언트 인증을 요구하는 경우에만 필요하다.
-
TrustStore 는 클라이언트가 신뢰할 수 있는 인증서만을 가지고 있다.
이들 인증서는 CA 루트 인증서 ( 자기 서명 인증서 ) 이다.
보통 웹서버가 설치되면 cacerts.jks 라는 파일명으로 이 TrustStore 가 저장된다.
PEM & DER
-
PEM ( Privacy-enhanced Electronic Mail ) 포맷은 인증기관에서 가장 많이 사용하는 포맷이다.
PEM 인증서는 보통 .pem, .crt, .cer, .key 와 같은 확장자를 갖는다.
Base64 로 인코딩된 ASCII 텍스트 파일이다.
"------BEGIN CERTIFICATE----"와 "----END CERTIFICATE----"와 같은 시작과 끝을 알리는 문구가 들어 간다.
-
DER ( Distinguished Encoding Rules ) 포맷은 바이너리 포맷이다.
확장자는 주로 .der 이지만 종종 .cer 도 쓰인다.
DER 은 주로 Java 플랫폼에서 쓰인다.
-
DER 과 PEM 은 서로 Converting 이 가능하다.
'프로그래밍 놀이터 > Tips' 카테고리의 다른 글
[암호학] RSA 에 대해 간단히 알아보자 (0) | 2018.05.12 |
---|---|
[보안] 디지털 서명 ( Digital Signature ) (0) | 2018.05.03 |
[보안] MAC, DAC, RBAC (0) | 2018.05.01 |
starUML 에서 static method or static field 마킹하는 방법 (0) | 2018.04.02 |
[Facebook] Access Token, Permissions and Roles (0) | 2018.02.27 |
댓글