티스토리 뷰

Security/Architecture&Tech

Certificates

Jacob_baek 2021. 3. 26. 18:29

Certificate

인증서(Certificate)를 가진 서버에 사용자(browser)가 접근하려 할때 해당 인증서(Certificate)를 검증하게 되고 신뢰된 서버라는 검증이 완료되면 통신을 수행하게 된다. 이때 사용되는 검증시 사용되는 것이 인증서라 할수 있으며 여기 포함된 public key를 통해 암호화된 통신을 제공하게 된다.

참고로 인증서내에는 소유자의 검증을 위한 중요정보(ex. public key, 인증서 발급자, 연관된 subdomain 정보등)이 포함된다.
실제 Browser에서 인증서를 export 해보면 아래와 같은 정보를 확인해볼수 있다.

인증서의 역할 3가지

  • 사이트 인증 : 웹 사이트 인증(웹서버에 대한 인증을 통해 신뢰된 서버와의 통신을 제공한다.)
  • 데이터 기밀성 : 전달되는 데이터의 신뢰 보장(중간의 불법적인 판독을 하지 못하게 한다.)
  • 데이터 무결성 : 전달되는 데이터의 불법적인 변경이 이루어지지 않도록 한다.

주요용어

  • CA(Certificate Authority) : 인증기관
  • CSR(Certificate Signing Request) : 인증서 발급을 받기 위한 신청서, ASCII text,

How it works

먼저 인증서를 발급 받는 과정에 대한 이해가 필요하고
발급받은 인증서를 통해 통신이 어떻게 이루어지는지도 이해가 필요하다.

하여 아래 두가지 방식으로 설명을 한다.

인증서 발급

간단히 설명하자면


  1. (요청서버)웹 서비스를 제공하는 서버에서 keypair를 생성하고
  2. (요청서버)생성된 key를 통해 CSR를 생성하여 CA에 보내 서명을 요청

  3. (CA서버)CA에서는 자신의 keypair를 생성하고(이는 이미 생성되어 있을수 있다.)
  4. (CA서버)생성된 key를 통해 CA의 인증서(crt)를 생성한다.
  5. (CA서버)생성된 CA 인증서 및 key, 앞서 요청서버로 부터 전달받은 csr를 사용해
    요청서버의 서명된 인증서를 생성하여 요청서버가 사용할수 있게 한다.

참고로
서명된 인증서는 비용을 지불하고 구매해야 한다.
다만 letsencrypt를 이용하면 무료로 발급이 가능하다. 하지만 90일 마다 갱신이 필요하다.

발급받은 인증서를 이용한 통신 과정

간략히보자면,

  1. Client는 서버에게 Client Hello Message 전송
  2. 서버는 클라이언트로 Server Hello Message 와 서버 인증서 전송하며, 만약 클라이언트 인증서가 필요한 경우에 인증서 요청도 함께 전송
  3. 클라이언트는 암호화에 사용되는 Session Key와 함께 클라이언트에서 지원하는 Cipher Suite 를 서버로 전송하며, 서버가 인증서를 요청한 경우에는 클라이언트의 인증서도 함께 전송
  4. 서버는 Chipher Suite를 받아들이고 (또는 거부) Finished Message 를 클라이언트로 전송한 후 데이터 전송 단계로 이동
  5. 클라이언트는 최종 메시지를 서버로 전송하고 데이터 전송 단계로 이동
  6. 상호합의한 chipher suite 에 의해 암호화된 메시지를 교환

참고용 인증서형식(Certificate Format)

  • PEM(Privacy-enhanced Electronic Mail) : Base64 ASCII로 encode 된 파일로 .pem, .crt, .cer, .key등이 여기에 속한다.
    pem 파일은 서버 인증서와 중간자 인증서, private key 가 해당 파일에 포함된다.
    crt 혹은 cer 파일로 서버 인증서나 중간자 인증서가 사용되고 개인키는 key파일이 될수있다.
  • DER(Distingulished Encoding Rules) : binary 폼으로 .der 이나 .cer 파일들을 포함한다. 해당 인증서는 Java 기반 web 서버에서 주로 사용된다.
  • pfx, p12 ... : PKCS#12(Public Key Cryptography Standards #12)
  • 출처 : https://www.tutorialsteacher.com/https/ssl-certificate-format

OpenSSL을 이용한 각 형식별 변환도 가능

openssl x509 -in cert.crt -outform der -out cert.der

참고

BoringSSL
google의 needs에 맞추어 개발된 ssl
현재 android 6.x(codename : mashimelow)에서는 정식 포함되었고 기타 chrome/chromium 등에서도 사용되어지고 있다고 함

참고사이트

'Security > Architecture&Tech' 카테고리의 다른 글

Mutual TLS  (0) 2020.10.11
cryptograph  (0) 2013.10.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함