SSL 인증서

Younghwan Cha·2023년 3월 16일
0

node-postgres 공식 문서를 보던 도중에 내 입장에서는 뜬금없는 단어가 튀어나왔다.
그것은 바로 SSL. 예전에 HTTP/HTTPS 웹 수업을 듣던 도중 SSL 이라는 것을 듣고
나중에 자연스럽게 알게되겠지~ 하고 넘겼던 바로 그 녀석이 DB 공부를 하면서 나오다니,
올것이 왔구나 하는 생각이 들었다.
생각해보면 DB 도 결국에는 서버이기 때문에 추가로 보안적인 요소들이 필요할 법이다.
이 보안적인 요소를 위해서 SSL 이 쓰이는 것인가? 하는 질문에서 부터 이 글이 시작되었다.

SSL?!

가장 먼저, SSL 이 무엇인지 부터 알아보자.
SSL 은 Secure Sockets Layer 의 약자로, 그 이름에서 부터 역시나 보안적인 아우라를
풀풀 풍기는 친구이다. 암호화 기반 인터넷 보안 프로토콜이라고 정의 되어있다.
현재 사용중인 TLS 암호화의 전신이라고 불리우는 SSL 에 대해서 살펴보자

SSL/TLS 인증서는 무엇이 포함되어 있을까?

SSL/TLS 인증서에는 다음과 같은 정보들이 포함된다.

  • 도메인 이름
  • 인증 기관
  • 인증 기관의 디지털 서명
  • 발급 날짜
  • 만료 날짜
  • 퍼블릭 키
  • SSL/TLS 버전

SSL/TLS 의 작동원리

브라우저는 먼저 SSL/TLS 인증서를 사용하여 SSL/TLS handshake 를 통해 웹 서버와 보안 연결을 시작한다.

SSL/TLS Handshake

  1. 브라우저가 SSL/TLS 보안 웹 사이트를 열고 웹 서버에 연결합니다.
  2. 브라우저는 식별 가능한 정보를 요청하여 웹 서버의 진위 여부를 확인하려고 시도합니다.
  3. 웹 서버는 공개 키가 포함된 SSL/TLS 인증서를 회신으로 보냅니다.
  4. 브라우저는 SSL/TLS 인증서가 유효하고 웹 사이트 도메인과 일치하는지 확인합니다. 브라우저가 SSL/TLS 인증서에 만족하면 공개 키를 사용하여 비밀 세션 키가 포함된 메시지를 암호화하고 전송합니다.
  5. 웹 서버는 개인 키를 사용하여 메시지를 해독하고 세션 키를 검색합니다. 그런 다음 세션 키를 사용하여 암호화하고 브라우저에 승인 메시지를 보냅니다.
  6. 이제 브라우저와 웹 서버 모두 동일한 세션 키를 사용하여 메시지를 안전하게 교환하도록 전환합니다.
  • SSL은 높은 수준의 개인정보 보호를 제공하기 위해, 웹에서 전송되는 데이터를 암호화합니다. 따라서, 데이터를 가로채려는 자는 거의 해독할 수 없는 복잡한 문자만 보게 됩니다.
  • SSL은 두 통신 장치 사이에 핸드셰이크라는 인증 프로세스를 시작하여 두 장치의 ID를 확인합니다.
  • SSL은 또한 데이터 무결성을 제공하기 위해 데이터에 디지털 서명하여 데이터가 의도된 수신자에 도착하기 전에 조작되지 않았다는 것을 확인합니다.

왜 사용하는거지?

원래 웹 상의 데이터는 메시지를 가로채면 누구나 읽을 수 있는 일반 텍스트 형태로 전송됐습니다. 가령 고객이 쇼핑 웹사이트를 방문하여 주문하고, 신용 카드 번호를 입력했다고 하면, 해당 신용 카드 번호가 숨겨지지 않은 채 인터넷을 이동하게 됩니다.

SSL은 이 문제를 바로잡고, 사용자 개인 정보를 보호하기 위해 제작됐습니다. SSL은 사용자와 웹 서버 사이를 이동하는 모든 데이터를 암호화하여, 누군가 데이터를 가로채더라도 무작위 문자만 볼 수 있게 합니다. 이제 고객의 신용 카드 번호는 안전해졌으며, 고객이 번호를 입력한 쇼핑 웹사이트만 이를 볼 수 있습니다.

SSL은 특정한 유형의 사이버 공격도 차단합니다. SSL은 웹 서버를 인증하는데, 공격자들이 사용자를 속여 데이터를 훔치기 위한 가짜 웹사이트를 만드는 일이 있기 때문에, 이러한 인증이 중요합니다. 또한 약병의 조작 방지 봉인처럼, 공격자가 전송 중인 데이터를 조작하지 못하게 막기도 합니다.

더 알아볼 내용
caching_sha2_password / mysql_native_password


어제 SSL 에 관한 이야기를 마저해보려 한다.

사이트 신뢰성

내가 velog 에 접속하는 것 처럼 client 가 어떤 사이트에 접속했을 때,
그 사이트가 믿을만한 사이트인지 어떻게 알까?
우리가 velog 에 접속하면 다양한 정보들을 제공한다. 회원가입을 위한 개인정보와
차후에 제공하는 다양한 데이터들이 있다. 이 정보들이 불순한 목적을 갖고 만들어진
사이트에 제공된다면 어떻게 될까? 혹은, 정상적인 사이트로 전달되던 도중
패킷이 공격자들에 의해 탈취되어 데이터들이 유출된다면 어떻게 될까? 이것은 신뢰성 있는
인터넷을 만들기 위해서 반드시 해결되어야 하는 문제였다.
여기서 등장하는 것이 인증서의 개념이다.
우리가 인증서를 사용하는 경우는 무엇이 있을까? 보통은 은행 업무를 보는 것과 같이
개인의 신원 확인이 중요할 때 공인인증서와 같은 방법을 사용한다.
여기에서 말하는 인증서도 마찬가지 이다. 다른 점은 여기서 인증서의 대상이 사이트 라는 것이다.

전 세계적으로 신뢰 가능한 Geotrust 와 같은 회사가 인증서를 발급하는 역할을 한다.
그렇다면 인증서의 인증은 어떻게 진행할까?

Chain of trust

Geotrust 와 같은 회사들의 public key 는 대부분의 사람들의 컴퓨터에 내장되어 있다.
그래서 만약 google 에서 인증서를 발급 받기를 원한다면,
google 은 geotrust 에 자신들의 데이터를 종합해 해시화한 값을 geotrust 의
private key 를 통해서 함호화 해 달라고 요청한다.
그러면 geotrust 는 자신들의 private key 를 통해서 암호화 한다.
사용자들의 입장에서는 자신들은 geotrust 의 public key 를 갖고 있기 때문에, 만약
자신들이 갖고 있는 public key 로 복호화 할 수 있는 인증서가 있다면 이것이 geotrust가
발급한 인증서임을 알 수 있는 것이다. 그래서 geotrust 가 인증한 회사라면 google 도 믿을 수 있게 되는 것이다. 이러한 원리를 Chain of trust 라고 부른다.
상위 계층의 인증서(Geotrust) 가 신뢰할 수 있는 기관이라면,
해당 인증서(Geotrust)의 비밀키로 암호화된 하위 인증서(Google) 또한 신뢰 가능하다고 간주하는 것이다.

왜 하필 해시화한 값을 암호화..?

위의 순서는 이해가간다. 하지만 그냥 데이터를 바로 암호화 하면 되지 왜 한번 해시화한 값을
암호화 할까? 이는 데이터 변조를 잡아내기 위함이다. 만약 우리가 public key 로 데이터를
복호화해서 기존 데이터의 해시값을 얻었다고 가정해보자. 하지만 만약에 얻은 해시값과
인증서에 들어있는 내용물을 다시 해시값으로 만든 값이 다르다면 어떨까?
이는 인증서의 내용물이 변조되었음을 의미한다!
그렇기 때문에 해시화를 한번 해서 암호화를 한다면 데이터의 변조 또한 잡아낼 수 있게되는 것이다.

인증서 발급 절차

  • 사이트에서 private key 생성
  • 사이트의 정보가 담긴 인증 서명 요청서(CSR)를 작성
  • CSR 을 인증기관(CA)로 전송하여 인증서(CRT) 발급 요청
  • 해당 인증기관에서는 신청서의 내용을 토대로 사이트 검증
  • 사이트의 정보와 공개키가 담긴 인증서를 인증기관의 비공개키로 암호화 하여 발급

SSL 인증 절차

  • 사용자가 브라우저로 접속하면 서버에서 인증서를 제공
  • 브라우저는 인증서를 발급한 인증기관이 브라우저에서 제공하는 인증기관 목록에 있는지 확인
  • 인증기관의 공개키를 이용해서 인증서를 복호화
  • 복호화에 성공하는 것으로 인증완료

[aws article about ssl] https://aws.amazon.com/ko/what-is/ssl-certificate/

profile
개발 기록

0개의 댓글