만쥬의 개발일기

이번 포스팅에서는 SSL 프로토콜의 작동 방식이 아닌, SSL 인증서와 사설 인증서에 대해 알아보겠습니다.

SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜입니다. 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 출범했고, 현재 사용 중인 TLS 암호화의 전신입니다.

SSL은 사용하고 있는 웹 서버에 SSL 인증서를 설치하여 암호 통신이 가능하도록 합니다.

그리고 SSL 인증서가 설치된 웹서버는 HTTPS 통신이 가능합니다.

공인인증서? 사설인증서?

공인 SSL 인증서

공인 SSL 인증서는 인증 기관(CA)에서 발급하는 인증서입니다.

일반적으로 인터넷에서 접근하는 사이트들은 공인인증서가 적용되어 있다고 생각하시면 됩니다.

사용자 PC에 따로 인증서를 설치하지 않더라도 문제없이 https가 적용된 웹사이트를 사용할 수 있습니다.

사설 SSL 인증서

SSL 인증서는 기본적으로 공용 인터넷 환경을 기준으로 합니다.

사설/폐쇄 환경를 고려하지 않습니다.

따라서 사설 SSL 인증서는 공인 인증 기관이 아닌 특정 조직에서 발급합니다.

예를 들어 A라는 회사가 자사가 인증한 SSL 인증서를 발급할 수 있습니다.

이런 인증서는 인터넷으로 서비스되는 웹서버가 아니라 기업 내 폐쇄망에서 직원들이 접속하는 웹서버에서 주로 사용합니다.

내부망에서 이루어지는 통신이라 할지라도 보안 관련 인증심사에서 https 적용 여부를 확인하기 때문에 심사를 준비하는 기업은 적용하는 경우가 많습니다.

SSL 인증서를 웹사이트에 적용하는 과정

  1. SSL 인증서를 판매하는 기업에서 SSL 인증서를 구매합니다.
  2. 이후 인증서를 적용할 웹 사이트 도메인에 맞게 생성합니다.
  3. 웹 서버에 발급한 SSL 인증서를 설치합니다.
  4. http를 https로 리디렉션 해주는 설정을 해줍니다.

만약 웹 서버에 적용된 인증서가 사설 인증서라면, PC에도 해당 인증서를 설치해야 https로 정상 접속이 가능합니다.

따라서 사설 인증서 적용 시에는 로컬 PC에 인증서를 배포하는 과정도 필요합니다.

왜 사설 인증서를 써야할까?

폐쇄망은 언제든 외부로부터 공격당할 수 있습니다.

대표적으로 2019년 발생한 ‘오퍼레이션 섀도우해머’가 있는데, 글로벌 PC 제조사인 ASUS의 소프트웨어 업데이트 서버를 해킹해, ASUS 이용자들이 악성코드가 심어진 라이브 업데이트 설치 버전을 PC에 다운로드하며 수많은 PC가 감염된 사례가 있습니다.

만약 폐쇄망의 서버에서 글로벌 CA SSL 인증서를 적용한 경우, 인증기관 CA 인증 서버에 접속하여 웹서버에 적용된 SSL 인증서가 유효한지 확인하는 과정이 필요합니다.

따라서 SSL 인증서 파일 자체에 포함된 CA의 CRL,OCSP,CPS 등의 URL 경로를 참조해 해당 URL에 대한 접근만 제한적으로 허용해 줄 수도 있습니다.

하지만 폐쇄망은 위 사례처럼 패치 업데이트를 위해 외부로 열어놓은 포트를 통해 악성코드가 유입되기도 하며 외부의 요인에 의존하지 않는 것이 좋기 때문에 가급적 외부와의 네트워크를 완전히 폐쇄하는 것이 좋습니다.

그렇지만 http보다 https의 보안성이 월등하고, 다음과 같은 이유들 때문에라도 SSL 인증서는 사설 인증서로라도 꼭 등록하는 것이 바람직합니다.

  1. 내부망에서 wireshark 등의 패킷 분석 툴로 감청을 시도했을 때 개인정보(비밀번호 등)을 보호할 수 있습니다.
  2. http 2.0을 지원해 속도 향상을 이끌어냅니다.

SSL 인증서 정보 확인 방법, SSL 인증서 만료일 확인 등

오픈소스 라이브러리인 openssl 을 이용해 특정 도메인,ip의 SSL 인증서 등록 여부를 확인할 수 있습니다.

다음은 리눅스에서 openssl을 이용해 SSL 인증서 정보를 확인하는 예시입니다.

다음 명령으로 SSL 인증서의 등록일/만료일을 확인할 수 있습니다.

 echo | openssl s_client -connect {domain}:443 2>/dev/null | openssl x509 -noout -dates

 

다음 명령으로는 특정 도메인의 SSL 인증서가 어떤 CA를 통해 발급 받았는지를 확인할 수 있습니다.

echo | openssl s_client -connect {domain}[:443](<http://naver.com:443/>) 2>/dev/null | openssl x509 -noout -text | awk -F '\\n' '/Issuer/ {print $0}'


추가로 배포중인 웹사이트에서 사용중인 SSL 인증서의 다양한 정보를 가져오는 간단한 프로그램을 제작해보았습니다. 제작 언어는 Golang 입니다.

Github Docker hub

다음은 프로그램 사용 예시입니다.

reference

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!