[SSL] SSL 프로토콜과 인증서

2019. 10. 29. 18:06Engineering/Network

Contents

1. SSL의 개념
2. SSL HadnShake
3. SSC (Self Signed Cerificate) 생성하기


 

 

 

SSL 프로토콜이 무엇인지 이해하고 openssl을 통해 ssl 인증서를 직접 생성하는 방법을 알아봅니다.


 

1. SSL의 개념

1.1 SSL의 기능

SSL(Secure Socket Layer) 프로토콜은 웹 서버와 브라우저 간 보안 통신규약 입니다.

SSL 프로토콜이 제공하는 기능은 크게 아래와 같이 두 가지 입니다. 

  - 인증 : 웹 서버의 진위성을 확인 합니다.  

  - 데이터암호화 : 암호화 키를 가지고 송수신 되는 데이터를 암호화 합니다. 

 

1.2 SSL과 HTTPS

SSL 프로토콜 위에서 돌아가는 HTTP 프로토콜을 HTTPS(HTTP over Secure Socker Layer)라고 합니다.

데이터의 암호화를 제공하지 않는 HTTP와 달리 HTTPS는 데이터 암호화를 제공하므로 보안이 강화된 프로콜입니다. 

 

1.3 SSL 인증서

SSL 프로토콜은 Certificate Autority(CA)라 불리는 제 3자 기관에서 발급된 SSL 인증서를 통해 서버와 클라이언트의 인증 및 데이터 암호화를 수행 합니다. 

 

SSL 인증서에는 아래와 같이 두 가지 정보가 포함되어 있습니다. 

  - 웹 서비스의 정보 : 인증서를 발급한 CA 정보, 서비스의 도메인 정보 등등

  - 서버 Public Key : 서버 Public Key 값 및 암호화 알고리즘 

 

1.4 용어

CA(Certificate Authority) 

SSL 인증서를 발급해주는 기관 입니다. 가장 대중적인 CA 기관으로는 Global Sign, GeoTrust, COMODO 등등 이 있습니다. 

보통  이러한 기관에서 SSL 인증서를 발급 받을 때는 일정 비용을 지불해야 합니다. 

따라서 테스트 또는 개발용 웹 서비스의 경우에는 OpenSSL을 이용하여 SSC (Self Signed Certificate)라는 사설 인증서를 사용합니다. 

 

Public Key

데이터 암호화를 위해 사용되는 key 입니다.

SSL 통신을 위해서는 서버와 클라이언트가 Public key를 사전에 교환하고, 

데이터를 전송할 때마다, 상대방의 public key로 데이터를 암호화해 송신합니다. 

 

Private Key

암호화되어 수신된 정보를 복호하기 위해 사용되는 key 입니다. 

 

CSR (Certificate Signing Request)

SSL 인증서를 발급받기 위해 필요한 요구 사항들을 정의하는 파일입니다. 

 

SSC (Self Signed Certificate)

CA가 아닌 웹 서비스 소유자가 직접 생성한 인증서 입니다. 

SSC 인증서를 사용한 웹 서비스에 접근한 경우 웹 브라우저가 보안 경고를 띄우긴 하지만,

개발/테스트 용 웹 서비스에서 사용에는 무리가 없습니다. 

따라서, 정식 서비스가 아닌 경우, CA를 통한  SSL 인증서 발급 비용을 절약하기 위해 많이 사용 됩니다. 

 

SAN (Subject Alternative Name)

멀티도메인 인증서와 동일합니다. 

하나의 인증서에 둘 이상의 도메인을 추가하여 사용하는 인증서 입니다. 

 

 

2. SSL Hand Shake

SSL 프로토콜의 동작 원리를 이해하기 위해 SSL Handshake 과정을 간단히 소개하고자 합니다.

SSL Handshake 과정의 가장 큰 목적은 서버와 클라이언트의 Public Key 교환이며, 

자세한 과정은 아래 사진과 같습니다.

 

출처 : https://m.blog.naver.com/xcripts/70122755291

 

서버와 클라이언트는 Hand Shake 과정을 통해 서로의 Public Key를 공유합니다.

서로의 Public Key가 공유 완료 되면, 그 다음 부터는 상대방의 Public Key를 사용하여 암호화된 데이터를 송수신 할 수 있습니다. 

 

 

3. OpenSSL을 통한 SSC 생성

 

SSC 인증서 생성 절차는 아래와 같습니다.

 a. Private Key 생성

 b. CSR 생성

 c. Private Key 암호화 해제 
 d. SSC 생성


a. openssl genrsa 명령어를 통해 RSA 기반의 Private Key를 생성 합니다.

$ openssl genrsa -des3 -out {outkeyfilename}.key 2048

 

b. openssl req 명령어를 통해 csr 파일을 생성 합니다. 

$ openssl req -new -key {outkeyfilename}.key -out {outcsrfilename}.csr

 CSR 정보를 아래 사진과 유사한 형태로 입력 합니다. 

 Country Name : 국가 코드 (대한민국의 경우 KR)

 State Name : 

 Locality Name :  

 Organization Name : 회사 또는 소속기관 명

 Common Name : 해당 서비스의 도메인 명 

 ....

 

c. Private Key의 암호화를 해제 합니다. 

$ openssl rsa -in {outkeyfilename}.key -out {decryptoutkeyfilename}.key

 

d. SSC 인증서를 생성합니다. 

$ openssl x509 -req -days {인증서유효기간} -in {outcsrfilename}.csr -signkey {decryptoutkeyfilename}.key -out {outcrtfilename}.crt

 

생성된 Private Key의 모습은 아래와 유사 합니다. 

 

생성된 인증서의 모습은 아래와 유사합니다. 

 

 


Reference 

https://m.blog.naver.com/xcripts/70122755291

 

[보안용어] SSL(Secure Socket Layer)의 개념과 동작원리

최근, 개인정보보호법의 시행과 함께, 데이터 암호화의 필요성 및 SSL의 개념이 강조되고 있습니다. 이...

blog.naver.com

https://keithus.tistory.com/entry/OpenSSL-self-signed-certificate-%EC%83%9D%EC%84%B1