본문 바로가기
프로그래밍 놀이터/Tips

[network] SSL 에 대해 알아보장~

by 돼지왕 왕돼지 2018. 5. 2.
반응형

[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 이 가능하다.




반응형

댓글