Skip to main content

Transport Layer Security(전송 계층 보안)


X.509 Public Key 인증서

인증서(Certificate)는 Subject의 Public Key와 인증 정보를 Data의 값으로 넣고, 이 정보를 해시한 후 인증 기관(Certificate Authority, CA)이 가지고 있는 Private Key로 암호화하여 Signature Value의 값으로 넣은 파일을 말합니다. 이 때, 인증서에 포함된 Public Key와 페어가 되는 Private Key로 서명한 인증서를 Self-Signed 인증서라고 합니다.

인증서를 openssl 명령어로 해석하면 다음과 같은 정보를 얻을 수 있습니다.

openssl x509 -text -noout -in <cert.pem>
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
<serialNumber>
Signature Algorithm: <algorithm>
Issuer: <issuerDN>
Validity
Not Before: <date>
Not After : <date>
Subject: <subjectDN>
Subject Public Key Info:
Public Key Algorithm: <algorithm>
Public-Key: (<n> bit)
<publicKey>
X509v3 extensions:
<extensions>
Signature Algorithm: <algorithm>
Signature Value:
<signature>

인증서에 <publicKey>는 비대칭 암호화에 사용되는 Public Key입니다. 따라서 유효한 인증서를 가지고 있으면 서버에서 Private Key로 암호화된 데이터를 보냈을 때, Public Key로 복호화하여 데이터를 확인할 수 있습니다.

인증서 유효성 검사

유효성 검사는

  • 인증서의 Data를 해시한 값과
  • Signature Value를 인증 기관(Issuer)의 인증서에 있는 Public Key로 복호화한 값을

비교하여 같은지 확인하는 방식으로 진행됩니다.

Self-Signed 인증서는 IssuerSubject가 같기 때문에 다른 인증서 없이 스스로 유효성 검사를 할 수 있습니다. 최상위 인증 기관을 Root CA라고 하는데, Root CA의 인증서는 다른 인증 기관이 발급 할 수 없기 때문에 Self-Signed 인증서로 만듭니다.

모든 인증서를 최상위 인증 기관에서 발급할 수는 없기 때문에 중간 인증 기관(Intermediate CA)에 인증서를 발급해주고 중간 인증 기관 들이 그 하위 기관에게 인증서를 발급해줍니다. 중간 인증 기관은 또 다른 중간 인증 기관의 인증서를 발급할 수도 있습니다. 이렇게 인증 기관들이 인증서를 발급하는 구조를 인증 체인(Certificate Chain)이라고 합니다.

인증 체인을 위해 브라우저는 최상위 인증 기관의 인증서와 그 외 신뢰할 수 있는 중간 인증 기관의 인증서를 미리 가지고 있고, 이를 사용하기 위해서는 브라우저가 가지고 있는 인증서 목록에 있는 인증 기관 중 한 곳에서 인증서를 받아야합니다. 이것이 우리가 인증 기관에 돈을 내고 인증서를 받거나, Let's Encrypt 같은 무료 인증 기관을 이용하는 이유입니다.

TLS Handshake