본문 바로가기

네트워크

SSL

SSL

L7의 암호화 프로토콜

  1. 암호화
  2. 해시화
  3. 디지털 인증서

를 사용한다.

암호화

공통키 암호화 방식과 공개키 암호화 방식을 혼합해서 사용한다.

  1. 서버는 공개키와 비밀키를 만든다.
  2. 서버는 공개키를 배포하고 비밀키는 보관한다.
  3. 브라우저는 공통키의 재료를 공개키로 암호화해서 서버로 보낸다.
  4. 서버는 공통키의 재료를 복호화한다.
  5. 서버와 브라우저는 공통키의 재료로부터 공통키를 생성한다.

이후 브라우저는 데이터를 공통키로 암호화해서 서버로 전송한다.

해시화

송신자는 데이터와 데이터의 해시값을 전송한다.

수신자는 데이터로부터 해시값을 계산하고, 송신자가 보낸 해시값과 자신이 만든 해시값을 비교한다. 다르다면 변조되었다고 판단한다.

SSL에서는 단방향 해시 함수가 아닌 MAC(Message Authentiction Code)라는 기술을 사용한다.

메세지 인증 코드는 데이터와 MAC키(공통키)를 뒤섞어 MAC값(해시값)을 계산한다.

디지털 인증서

디지털 인증서는

  1. 서명전 인증서
    1. common name (url)
    2. 인증서 유효 기간
    3. 공개키
  2. 디지털 서명 알고리즘 - 디지털 서명에서 사용하는 해시 함수
  3. 디지털 서명 - 서명 전 인증서를 디지털 서명 알고리즘으로 지정된 해시함수로 해시화한 뒤, 인증기관의 비밀키로 암호화 한 것

으로 구성된다.

디지털 인증서를 받은 수신자는 디지털 서명을 인증기관의 공개키로 복호화해서 서명 전 인증서의 해시값과 비교한다. 값이 일치하지 않으면 변조되었다고 판단한다.

인증서 준비하기

  1. HTTPS 서버에서 비밀키를 만든다.
  2. 서명 전 인증서의 정보를 비밀키를 기반으로 암호화한ㄷ CSR(Certificate Signing Request)를 만들어 인증기관에 보낸다.
    • 서명 전 인증서의 정보는 다음을 포함한다.
    • SSL 서버의 URL
    • 조직 이름
    • 부문 이름
  3. 인증기관이 신청자의 신원을 조사한다. 조사를 통과하면 CSR을 해시화하고 인증기관의 비밀키로 암호화해 디지털 서명으로 만든다. 이 인증서를 서버에 전송한다.
  4. 서버가 인증 기관에서 받은 인증서를 서버에 설치한다.

SSL Handshake

SSL은 TCP 3way handshake로 TCP 커넥션을 연 뒤, SSL handshake를 한다.

  1. 대응 방식 제시
  2. 통신 상대 증명
  3. 공통키 재료 교환
  4. 최종확인

의 4 단계로 구성되어있다.

대응 방식 제시

1.Client Hello
웹 브라우저가 사용할 수 있는 암호화 방식과 단방향 해시함수를 제시한다. 이를 cipher suite라고 부른다.
SSL의 버전, HTTP 버전, 공통키 작성에 필요한 client random 등도 파라미터로 전송한다.

통신 상대 증명

1.Server Hello
서버는 Client Hello에서 받은 암호 스위트 리스트와 자신이 가진 암호 스위트 리스트를 참조해서 일치한 암호 스위트 안에서 가장 우선도가 높은 암호 스위트를 선택한다.
SSL, HTTP 버전, 공통키 작성에 필요한 server random 등을 파라미터에 포함해 전송한다.

2.Certificate
Certificate로 자신의 인증서를 보내고, 자신이 3자 기관으로부터 인증받은 본인이라는 것을 증명한다.

3.Server Hello Done
Server Hello Done까지 끝나면 브라우저는 받은 서버 인증서를 루트 인증서로 복호화하여 해시값을 비교해 검증한다.

공통키 교환

브라우저는 프리마스터 시크릿을 암호화해서 서버로 보낸다.

프리마스터 시크릿과 client random, server random을 조합해 마스터 시크릿을 만들고, 미스터 시크릿으로부터 세션키와 MAC키를 만든다.

최종확인

클라이언트와 서버 모두 Change Cipher Spec과 Finished를 보낸다.

이 과정이 종료되면 SSL 세션이 만들어지고 애플리케이션 데이터 암호화 통신이 시작된다.

SSL 세션 종료

브라우저, 서버에 관계 없이 종료하고 싶은 측에서 close_notify를 보낸다.

그 뒤 TCP 4 way hadshake를 하고 TCP 커넥션을 종료한다.

'네트워크' 카테고리의 다른 글

4 way handshake  (0) 2023.07.29
DNS Lookup  (0) 2023.07.29
AWS VPC, Region과 Zone  (0) 2023.06.09
Restful API  (1) 2023.05.31
SSH  (0) 2023.05.23