본문 바로가기

System/System

TLS/SSL 인증서에 대한 정리

0. 들어가며,

업무를 진행하며, 외부 REST API 통신을 하는 업체에서 인증서 갱신으로 인한 영향도 파악 요청 또는

인증서 발급 대행 업체에서 CA 인증서 또는 ICA 인증서 변경에 따른 내용을 공지를 하곤 한다. 

CA 인증서 변경으로 인한 공지 메일 발췌

필수적으로 사용되는 TLS/SSL 통신에 대해 메커니즘을 이해하고자, TLS/SSL 인증서에 대해 내용을 간략히 정리해보려고한다.

 

1. 인증서란 ?

TLS/SSL 통신을 위해 CA(Cerificate Authority)에서 발급한 인증서이며, 다양한 확장자가 존재한다.

2. 인증서 종류

1) ROOTCA 인증서

최상위 발급 기관의 인증서로써 공인된 기관(DigiCert,GeoTrust등)에서 발급한 인증서다. 자기 자신의 비밀키로 자체 서명(Self-Signing)을 한것이 특징이다.

 

2) ICA인증서(중간 인증서)
ROOTCA와 구분하기 위해 ICA(Immediate CA)라는 명칭을 부여한 것이며, ROOTCA의 비밀키로 서명(Digital Signing) 이 되어있다.  대다수 인증서 발급은 ICA에서 이루어지며, 이로 인해 ROOTCA인증서를 포함한 3계층(RootCA인증서-ICA인증서-개인인증서) 트리 구조를 많이 가진다. 

 

3) 개인 인증서

개인(회사)이 인증서를 발급 요청할때 받을수있는 인증서. 발급을 위해선 CA에 도메인,공개키등 각종 정보를 전달하여

발급 받아야한다. 대부분 ICA에서 발급하기에 ICA의 비밀키로 서명(Digital Signing)이 되어있다.

 

4) 사설 인증서

공인된 CA에서 발급된게 아닌, 개인이 발행하는 인증서를 사설 인증서라고 한다. 사설 인증서 역시 TLS/SSL통신이 가능하며, Root CA처럼 자체 서명이 되어있는게 특징이지만, 개인이 발급했기에 공인된 보증기관이 없으며, 이로 인해 클라이언트 자체적으로 가지고있는 신뢰인증서 목록에 포함되어있지 않아, 신뢰할수 없는 인증서기에 정상적인 통신이 불가능하다. 주로 사설 VPN이나 자체 CA를 구축하여 사용할때 쓰인다.

 

3. 인증서를 통한 서버 인증  과정

1) 클라이언트(서버 or 브라우저)에서 서버에 접근하면 서버측에서 인증서(개인인증서+체인인증서)를 전달한다.

*openssl을 통해 naver 웹서버에서 보낸 인증서를 확인해보면 체인 인증서와 개인인증서를 확인 할 수 있다.
openssl -showcerts 옵션은 서버측에서 보내는 인증서를 보는 옵션이다.

 

2) 클라이언트는 해당 인증서를 수신하여 자신이 가지고 있는 신뢰 할 수 있는 인증서 목록을 확인한다. 

 

*신뢰 할 수 있는 인증서 목록을 확인하는 법

클라이언트 위치 인증서 목록 파일명
브라우저(크롬) 설정->개인정보 및 보안 -> 보안 -> 인증서->인증서관리 N/A
JDK $JAVA_HOME/jre/lib/security
*jdk에 따라 다를 수 있음.
cacerts
Redhat /etc/pki/ca-trust/extracted/openssl
/etc/pki/ca-trust/extracted/java
/etc/pki/ca-trust/extracted/pem
ca-bundle.trust.crt
cacerts
tls-ca-bundle.pem

 

 

jdk 내에 있는 신뢰할수있는인증서 리스트인 cacerts파일에서 naver.com의 ROOTCA 인증서 지문을 확인 할 수 있다.

 

3) 신뢰 할 수 있는 인증서 목록에 CA인증서가 확인된다면, CA인증서의 공개키를 통하여 서명을 복호화 하여(서명은 인증서 지문값을 CA의 비밀키로 암호화했기에 공개키로 복호화가 가능하다.), 지문과 서명을 복호화한 값이 일치한다면 인증서 무결성이 증명되며, 해당 서버는 신뢰 할 수 있는 서버이므로 TLS/SSL 통신을 진행한다. 

** 상위기관의 공개키를 통하여 하위기관을 신뢰 할 수 있다고 판단하는 이런 구조를 Chain of Trust라고 한다.

**신뢰 할 수 있는 인증서 목록에 ICA인증서가 없는 경우가 있다. 그래서 ICA에서는 개인 인증서를 발급 할 때 ICA인증서를 함께 붙여서 발급하며, ICA인증서가 목록에 없더라도 같이 제출된 ICA 인증서를 ROOTCA의 공개키로 인증 할 수 있다.

 

4. 서버 to 서버 통신시 고려 해야 될 사항

인터넷이 되는 환경 또는 브라우저 같은 경우 대부분의 CA인증서가 들어가있거나 또는 업데이트가 진행될것이다.

하지만, 업데이트가 불가한 폐쇄망 환경이나 서버 to 서버 통신 또는 업체 자체적으로 CA를 운용하는 업체와 통신을 하려고할때 인증서 목록에 대한 업데이트가 필요하다.

업체에서 제공한 인증서 또는 해당 CA인증서를 클라이언트의 CA인증서 목록에 업데이트해주면 정상적으로 통신이 된다.

인증서 import에 대한 방법은 다른 사이트에도 자세히 나와있으니 생략하겠다.

 



'System > System' 카테고리의 다른 글

SFTP서버 운영간 SSH 세션 관리  (0) 2024.08.23