Skip to main content

인증서를 어떻게 검증할까?

ghdwlsgur
Blog Owner

브라우저들은 신뢰한 루트 인증서 리스트를 가지고 있다고 하는데 어디에 가지고 있는걸까 ?

루트 인증서는 웹 브라우저의 특정 저장소에 포함되어 있으므로 따로 다운로드할 필요가 없으며 만약 루트 인증서를 발급한 기관이 운영 체제가 신뢰할 수 있는 루트 CA 목록에 없으면 인증서 자체는 신뢰할 수 있는 인증서가 아니라는 경고가 표시됩니다. 브라우저에 내재된 루트 인증서들은 운영 체제의 인증서 저장소에서 관리되며 구체적인 위치는 운영 체제에 따라 달라집니다.

운영체제별 루트 인증서 접근 방법

그럼 운영체제 별로 가지고 있는 루트 CA 목록을 어디서 확인하는지 살펴봅시다.

윈도우

윈도우에서 인증서는 ‘인증서’ MMC 스냅인에서 관리되며 Ctrl + R로 ‘실행’ 대화 상자로 이동한 후에 ‘certmgr.msc’를 실행하여 접근할 수 있습니다. 윈도우는 루트 CA 목록을 시스템 레지스트리와 연관된 암호화된 데이터베이스에서 관리합니다.

ssl1

맥 OS에서는 시스템 인증서가 키체인 액세스 애플리케이션을 통해 관리되며 키체인 액세스는 /Applications/Utilities/에 존재합니다.

ssl2

리눅스 (CentOS 7.9)

/etc/ssl/certs/ 경로 이동하면 ca-bundle.trust.crt 파일이 존재하며 이 파일 안에 PEM 형식으로 Root CA 이증서 리스트를 확인할 수 있습니다.

[centos@test1 certs]$ pwd
/etc/ssl/certs
[centos@test1 certs]$ ls -al
합계 12
drwxr-xr-x. 2 root root 117 58 17:54 .
drwxr-xr-x. 5 root root 81 58 17:54 ..
-rw-r--r-- 1 root root 2516 321 01:13 Makefile
lrwxrwxrwx 1 root root 49 119 2022 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx 1 root root 55 119 2022 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-rwxr-xr-x 1 root root 610 321 01:13 make-dummy-cert
-rwxr-xr-x 1 root root 829 321 01:13 renew-dummy-cert
[centos@test1 certs]$ cat ca-bundle.trust.crt
...
# vTrus ECC Root CA
-----BEGIN TRUSTED CERTIFICATE-----
MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw
RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY
BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz
MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u
LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF
K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0
v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd
e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw
V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA
AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG
GJTOMB8wCgYIKwYBBQUHAwEMEXZUcnVzIEVDQyBSb290IENB
-----END TRUSTED CERTIFICATE-----

# vTrus Root CA
-----BEGIN TRUSTED CERTIFICATE-----
MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL
BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x
FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx
MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s
THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc
IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU
AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+
GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9
8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH
flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt
J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim
0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN
pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ
UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW
OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB
AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet
8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd
nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j
bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM
Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv
TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS
S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr
I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9
b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB
UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P
Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven
sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3swGzAKBggrBgEFBQcDAQwNdlRydXMg
Um9vdCBDQQ==
-----END TRUSTED CERTIFICATE-----

리눅스 CentOS 7.9에는 아래와 같은 인증서 리스트들이 존재합니다.

A-CERT ADVANCED
A-Trust-Qual-01
A-Trust-Qual-02
A-Trust-Qual-03
A-Trust-nQual-01
A-Trust-nQual-03
AC1 RAIZ MTIN
ACA ROOT
ACCVRAIZ1
ACEDICOM Root
ACNLB
AC RAIZ DNIE
AC RAIZ FNMT-RCM
AC RAIZ FNMT-RCM SERVIDORES SEGUROS
AC Raíz Certicámara S.A.
ANCERT Certificados CGN
ANCERT Certificados CGN V2
ANCERT Certificados Notariales
ANCERT Certificados Notariales V2
ANCERT Corporaciones de Derecho Publico
ANF Secure Server Root CA
ANF Server CA
Actalis Authentication CA G1
Actalis Authentication Root CA
AddTrust External CA Root
Admin-Root-CA
AdminCA-CD-T01
AffirmTrust Commercial
AffirmTrust Networking
AffirmTrust Premium
AffirmTrust Premium ECC
Amazon Root CA 1
Amazon Root CA 2
Amazon Root CA 3
Amazon Root CA 4
America Online Root Certification Authority 2
ApplicationCA2 Root
Application CA G3 Root
Atos TrustedRoot 2011
Australian Defence Public Root CA
Autoridad Certificadora Raiz de la Secretaria de Economia
Autoridad Certificadora Raíz Nacional de Uruguay
Autoridad de Certificacion Firmaprofesional CIF A62634068
Autoridad de Certificacion Firmaprofesional CIF A62634068 1
Autoridad de Certificacion Raiz del Estado Venezolano
Autoridad de Certificacion de la Abogacia
Autoridade Certificadora Raiz Brasileira
Autoridade Certificadora Raiz Brasileira v1
Autoridade Certificadora Raiz Brasileira v2
BYTE Root Certification Authority 001
Baltimore CyberTrust Root
Buypass Class 2 Root CA
Buypass Class 3 Root CA
CAEDICOM Root
CA Disig
CA Disig Root R1
CA Disig Root R2
CA WoSign ECC Root
CA 沃通根证书
CCA India 2007
CCA India 2011
CCA India 2015 SPL
CFCA EV ROOT
CFCA GT CA
CHAMBERS OF COMMERCE ROOT - 2016
CISRCA1
CNNIC ROOT
COMODO Certification Authority
COMODO ECC Certification Authority
COMODO RSA Certification Authority
Camerfirma Chambers of Commerce Root
Camerfirma Global Chambersign Root
CertRSA01
Certification Authority of WoSign
Certification Authority of WoSign G2
Certigna
Certigna Root CA
Certinomis - Autorité Racine
Certipost E-Trust Primary Normalised CA
Certipost E-Trust Primary Qualified CA
Certipost E-Trust TOP Root CA
Certplus Root CA G1
Certplus Root CA G2
Certum EC-384 CA
Certum Root CA
Certum Trusted Network CA
Certum Trusted Network CA 2
Certum Trusted Root CA
Chambers of Commerce Root - 2008
China Internet Network Information Center EV Certificates Root
Cisco Root CA 2048
Common Policy
Comodo AAA Services root
Configuration
Correo Uruguayo - Root CA
Cybertrust Global Root
D-TRUST BR Root CA 1 2020
D-TRUST EV Root CA 1 2020
D-TRUST Qualified Root CA 1 2007:PN
D-TRUST Root CA 3 2013
D-TRUST Root Class 2 CA 2007
D-TRUST Root Class 3 CA 2007
D-TRUST Root Class 3 CA 2 2009
D-TRUST Root Class 3 CA 2 EV 2009
DigiCert Assured ID Root CA
DigiCert Assured ID Root G2
DigiCert Assured ID Root G3
DigiCert CS ECC P384 Root G5
DigiCert CS RSA4096 Root G5
DigiCert ECC P384 Root G5
DigiCert Global Root CA
DigiCert Global Root G2
DigiCert Global Root G3
DigiCert High Assurance EV Root CA
DigiCert RSA4096 Root G5
DigiCert Trusted Root G4
DigiNotar Root CA
DigiNotar Root CA G2
Digidentity L3 Root CA - G2
E-ME SSI (RCA)
E-Tugra Certification Authority
EC-ACC
ECRaizEstado
EE Certification Centre Root CA
Entrust.net Premium 2048 Secure Server CA
Entrust.net Secure Server Certification Authority
Entrust Root Certification Authority
Entrust Root Certification Authority - EC1
Entrust Root Certification Authority - G2
Entrust Root Certification Authority - G4
Explicitly Distrust DigiNotar Root CA
FNMT-RCM
Federal Common Policy CA
GDCA TrustAUTH R5 ROOT
GLOBALTRUST
GLOBALTRUST 2015
GLOBALTRUST 2020
GPKIRootCA
GTS Root R1
GTS Root R2
GTS Root R3
GTS Root R4
GeoTrust Global CA
GeoTrust Global CA 2
GeoTrust Primary Certification Authority - G2
GeoTrust Primary Certification Authority - G3
GeoTrust Universal CA
GeoTrust Universal CA 2
GlobalSign
GlobalSign ECC Root CA - R4
GlobalSign ECC Root CA - R5
GlobalSign Root CA
GlobalSign Root CA - R3
GlobalSign Root CA - R6
GlobalSign Root E46
GlobalSign Root R46
GlobalSign Secure Mail Root E45
GlobalSign Secure Mail Root R45
Global Chambersign Root - 2008
Go Daddy Class 2 CA
Go Daddy Root Certificate Authority - G2
Government Root Certification Authority
HARICA Client ECC Root CA 2021
HARICA Client RSA Root CA 2021
HARICA Code Signing ECC Root CA 2021
HARICA Code Signing RSA Root CA 2021
HARICA TLS ECC Root CA 2021
HARICA TLS RSA Root CA 2021
Halcom CA FO
Halcom CA PO 2
Halcom Root CA
Halcom Root Certificate Authority
Hellenic Academic and Research Institutions ECC RootCA 2015
Hellenic Academic and Research Institutions RootCA 2011
Hellenic Academic and Research Institutions RootCA 2015
HiPKI Root CA - G1
Hongkong Post Root CA 1
Hongkong Post Root CA 3
I.CA - Qualified Certification Authority, 09/2009
I.CA - Qualified root certificate
I.CA - Standard Certification Authority, 09/2009
I.CA - Standard root certificate
I.CA Root CA/RSA
IGC/A
IGC/A AC racine Etat francais
ISRG Root X1
ISRG Root X2
IdenTrust Commercial Root CA 1
IdenTrust Public Sector Root CA 1
InfoNotary CSP Root
Izenpe.com
Japanese Government
KEYNECTIS ROOT CA
KISA RootCA 1
KISA RootCA 3
LGPKI
LuxTrust Global Root
LuxTrust Global Root 2
MULTICERT Root Certification Authority 01
Macao Post eSignTrust Root Certification Authority
Macao Post eSignTrust Root Certification Authority (G02)
Microsec e-Szigno Root CA
Microsec e-Szigno Root CA 2009
Microsoft ECC Product Root Certificate Authority 2018
Microsoft ECC Root Certificate Authority 2017
Microsoft ECC TS Root Certificate Authority 2018
Microsoft Identity Verification Root Certificate Authority 2020
Microsoft RSA Root Certificate Authority 2017
Microsoft Root Authority
Microsoft Root Certificate Authority
Microsoft Root Certificate Authority 2010
Microsoft Root Certificate Authority 2011
NAVER Global Root Certification Authority
NetLock Arany (Class Gold) Főtanúsítvány
NetLock Minositett Kozjegyzoi (Class QA) Tanusitvanykiado
NetLock Platina (Class Platinum) Főtanúsítvány
Network Solutions Certificate Authority
Network Solutions ECC Certificate Authority
Network Solutions RSA Certificate Authority
OISTE WISeKey Global Root GA CA
OISTE WISeKey Global Root GB CA
OISTE WISeKey Global Root GC CA
OpenTrust Root CA G1
OpenTrust Root CA G2
OpenTrust Root CA G3
PersonalID Trustworthy RootCA 2011
Post.Trust Root CA
Public Notary Root
QuoVadis Root CA 1 G3
QuoVadis Root CA 2
QuoVadis Root CA 2 G3
QuoVadis Root CA 3
QuoVadis Root CA 3 G3
QuoVadis Root Certification Authority
RSA Security Inc
Root CA
Root CA Generalitat Valenciana
S-TRUST Authentication and Encryption Root CA 2005:PN
SAPO Class 2 Root CA
SAPO Class 3 Root CA
SAPO Class 4 Root CA
SECOM Trust Systems CO.,LTD.
SI-TRUST Root
SITHS CA v3
SITHS Root CA v1
SSC GDL CA Root B
SSC Root CA A
SSC Root CA B
SSC Root CA C
SSL.com EV Root Certification Authority ECC
SSL.com EV Root Certification Authority RSA
SSL.com EV Root Certification Authority RSA R2
SSL.com Root Certification Authority ECC
SSL.com Root Certification Authority RSA
SZAFIR ROOT CA2
SecureSign RootCA11
SecureTrust CA
Secure Global CA
Security Communication ECC RootCA1
Security Communication RootCA2
Security Communication RootCA3
Security Communication Root CA
Serasa Certificate Authority II
Staat der Nederlanden EV Root CA
Staat der Nederlanden Root CA
Staat der Nederlanden Root CA - G2
Staat der Nederlanden Root CA - G3
Starfield Class 2 CA
Starfield Root Certificate Authority - G2
Starfield Services Root Certificate Authority
Starfield Services Root Certificate Authority - G2
StartCom Certification Authority
Swedish Government Root Authority v1
Swedish Government Root Authority v2
Swedish Government Root Authority v3
SwissSign Gold CA - G2
SwissSign Gold Root CA - G3
SwissSign Platinum CA - G2
SwissSign Platinum Root CA - G3
SwissSign Silver CA - G2
SwissSign Silver Root CA - G3
Swiss Government Root CA I
Swiss Government Root CA II
Swisscom Root CA 1
Swisscom Root CA 2
Swisscom Root EV CA 2
Symantec Class 1 Public Primary Certification Authority - G6
Symantec Class 2 Public Primary Certification Authority - G6
Symantec Class 3 Public Primary Certification Authority - G4
Symantec Class 3 Public Primary Certification Authority - G6
T-TeleSec GlobalRoot Class 2
T-TeleSec GlobalRoot Class 3
TC TrustCenter Class 2 CA II
TC TrustCenter Class 4 CA II
TC TrustCenter Universal CA I
TC TrustCenter Universal CA II
TC TrustCenter Universal CA III
TDC Internet
TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
TWCA Global Root CA
TWCA Root Certification Authority
TeliaSonera Root CA v1
Telia Root CA v2
Thailand National Root Certification Authority - G1
Thawte Premium Server CA
Thawte Server CA
TrustCor ECA-1
TrustCor RootCert CA-1
TrustCor RootCert CA-2
Trustwave Global Certification Authority
Trustwave Global ECC P256 Certification Authority
Trustwave Global ECC P384 Certification Authority
TunTrust Root CA
Tunisian Root Certificate Authority - TunRootCA2
TÜBİTAK UEKAE Kök Sertifika Hizmet Sağlayıcısı - Sürüm 3
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı
UCA Extended Validation Root
UCA Global G2 Root
UCA Global Root
UCA Root
USERTrust ECC Certification Authority
USERTrust RSA Certification Authority
UTN-USERFirst-Object
VAS Latvijas Pasts SSI(RCA)
VI Registru Centras RCSC (RootCA)
VeriSign Class 3 Public Primary Certification Authority - G4
VeriSign Universal Root Certification Authority
Verisign Class 1 Public Primary Certification Authority - G3
Verisign Class 2 Public Primary Certification Authority - G3
Verizon Global Root CA
XRamp Global CA Root
certSIGN ROOT CA
certSIGN Root CA G2
e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
e-Szigno Root CA 2017
ePKI EV SSL Certification Authority - G1
ePKI Root Certification Authority
ePKI Root Certification Authority - G2
emSign ECC Root CA - C3
emSign ECC Root CA - G3
emSign Root CA - C1
emSign Root CA - C2
emSign Root CA - G1
emSign Root CA - G2
ipsCA Global CA Root
ipsCA Main CA Root
state-institutions
thawte Primary Root CA - G2
thawte Primary Root CA - G3
vTrus ECC Root CA
vTrus Root CA

위와 같이 브라우저에 내장된 인증서의 물리적인 위치는 운영 체제에 따라 달라지며 Chrome의 경우 기본적으로 운영 체제의 인증서 저장소를 사용하지만, 자체 인증서 저장소를 가질 수도 있습니다.

크롬에서 루트 인증서로의 접근 방법은 크롬 환경설정 - 개인 정보 보호 및 보안 - 기기 인증서 관리 - 시스템 루트 - 인증서와 같이 확인할 수 있는데 위에서 본 각 운영체제 별 경로로 이동하는 것을 볼 수 있습니다. 저는 현재 맥을 사용하고 있기 때문에 MacOS에서 인증서를 관리하는 키체인 접근 어플리케이션으로 이동 되었으며 이를 통해 크롬에서는 기본적으로 운영 체제의 인증서 저장소를 사용하는 것을 볼 수 있습니다.

ssl3

위 키체인에서 보이는 AAA Certificate Services를 파일로 가져오면 AAA Certificate Services.cer 형식의 인증서 파일을 가져오게 됩니다. ‘cer’ 확장자는 일반적으로 바이너리 형식인 DER로 인코딩된 인증서를 가리킵니다.

ssl4

MAC에서는 오른쪽 마우스 버튼 클릭 후 훑어보기 기능을 통해 아래 내용을 확인하실 수 있습니다.

ssl5

인증서 내용에는 서명 알고리즘, 인증서 유효 기간, 공개 키 정보 등을 확인하실 수 있으며 openSSL 명령어를 통해 그 내용들을 동일하게 확인할 수도 있습니다. cer 확장자는 바이너리 형식인 DER로 인코딩되기 때문에 -inform란에 der이 들어가게 됩니다.

openssl x509 -in AAA\ Certificate\ Services.cer -inform der -text -noout

ssl6

이번에는 위 인증서 파일을 der 형식이 아닌 pem 형식으로 변환해서 확인해보겠습니다. 아래 명령어를 실행하면 pem 형식의 output.pem 파일이 생성되게 됩니다.

openssl x509 -inform der -in AAA\ Certificate\ Services.cer -out output.pem

ssl7

이 output.pem 파일의 내용을 확인해보면 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 사이에 Base 64로 인코딩된 내용이 들어 있습니다. 이 형식은 텍스트 에디터에서 쉽게 읽을 수 있습니다. cer 형식과 pem 형식 모두 X.509 인증서를 저장하는 데 사용되지만 인코딩 방식과 텍스트 및 바이너리 형식이 다르다는 점이 있습니다.

DER(Distinguished Encoding Rules)형식으로 인코딩된 인증서는 .cer 확장자 외에도 .der, .crt를 확장자로 가질 수도 있으며 이렇게 확장자가 다를 수 있는 이유는 표준화 되어있지 않기 때문입니다. 또한 der 형식으로 인코딩된 인증서 파일을 텍스트 에디터로 확인하기 위해서는 pem으로 변환해주어야 하는데 매번 확인해야 한다면 매우 불편하게 느껴질 겁니다. 하지만 gossl CLI 프로그램을 사용하면 편하게 인증서들을 검증할 수 있습니다.

ssl8

gossl echo 명령어를 실행할 경우 일반적으로 DER 형식으로 인코딩된 확장자를 가진 파일들을 선택 리스트에 포함시켜 사용자로부터 선택받을 수 있도록 합니다. DER 형식으로 인코딩된 AAA Certificate Services.cer 인증서를 선택하였을 경우 아래와 같은 내용을 확인할 수 있으며 PEM 인코딩 방식으로 변환할 지 물어봅니다. (Golang에서는 인증서 내용들이 DER 형식으로 인코딩되어 있을 경우 타입을 CRT라는 문자열로 반환하게 되며 반대로 PEM으로 인코딩된 내용들은 CERTIFICATE로 반환합니다.)

ssl9

Yes를 클릭할 경우 아래와 같이 PEM 형식으로 변환해줍니다.

ssl10

PEM 형식으로 변환된 루트 인증서 파일의 내용을 확인해봅시다.

ssl11

위 인증서의 Subject 부분에서 확인할 수 있는 내용은 O, L, ST, C 필드가 있는데 각 필드가 의미하는 바는 아래와 같습니다.

  • O(Organization): 주체의 조직 이름을 지정하며, 회사 이름이나 개인 이름 등이 올 수 있습니다.
  • L(Locality): 주체의 지리적 위치를 나타내며, 일반적으로 도시나 구를 나타냅니다.
  • ST(State or Province): 주체가 위치한 주 또는 지방을 나타냅니다.
  • C(Country): 주체가 위치한 국가를 나타내며, 이는 2자리 국가 코드로 표현됩니다.

인증서 내용을 보면 Comodo CA Limited 회사는 영국, 그레이터멘체스터주 솔퍼드시 내에 위치한 것으로 보입니다. 지도상으로는 아래와 같은데요. 그렇다면 이 정보가 맞는지 확인해 봅시다.

ssl12

링크드인에서 확인한 바로는 회사 사무실이 3RD Floor Building 26 OFFICE VILLAGE EXCHANGE QUAY TRAFFORD ROAD SALFORD, GB에 위치한 것으로 보입니다. 지도상으로는 아래와 같은데요. 영국, 그레이터멘체스터주 솔퍼드시 내 트래퍼드구에 위치한 것을 보면 위 인증서 내용과 동일하다는 것을 확인하실 수 있습니다.

ssl13

그 외에도 인증서 만료일과 인증서 타입(도메인 인증서, 체인 인증서, 루트 인증서인지 구분)과 인증서 내용을 MD5로 해쉬한 값이 포함되게 됩니다.

Subject CN과 Issuer CN이 동일한 게 의아하지 않나요 ?

루트 인증서는 자체 서명한 인증서이기 때문에 Subject CN과 Issuer CN이 동일합니다.

ssl14

인증서의 서명 과정은 위 그림과 같은 인증서 체인 구조를 따르게 됩니다. 클라이언트가 웹사이트에 HTTPS로 접속하게 되면 클라이언트는 접속할 서버에서 보내온 인증서를 확인하고 신뢰할 수 있는 CA가 서명한 것인지 확인하게 됩니다. 먼저, 도메인 인증서는 중간 인증기관(또는 체인 인증서)에 의해 서명됩니다. 이는 중간 인증기관의 개인 키를 사용하여 도메인 인증서의 해시를 '서명'하는 과정을 거칩니다. 클라이언트는 중간 인증기관의 공개 키를 사용하여 이 서명을 검증합니다. 다음으로 중간 인증서는 루트 인증기관에 의해 서명됩니다. 이는 루트 인증기관의 개인 키를 사용하여 중간 인증서의 해시를 '서명'하는 과정을 거칩니다. 클라이언트는 루트 인증기관의 공개 키를 사용하여 이 서명을 검증합니다. 마지막으로 루트 인증서는 자체 서명(self-signed)입니다. 즉, 루트 인증기관의 개인 키를 사용하여 루트 인증서 자체의 해시를 '서명'하는 과정을 거칩니다. 이 서명을 검증하기 위해, 클라이언트는 시스템 내에 사전에 저장된 루트 인증기관의 공개 키(즉, 신뢰된 루트 인증서)를 사용합니다.

더 간단하게 표현하자면, 도메인 인증서의 서명을 체인 인증서의 개인키로 암호화하고 클라이언트는 이 서명을 체인 인증서의 공개키로 복호화하며 체인 인증서의 서명을 루트 인증서의 개인키로 암호화하고 클라이언트는 이 서명을 루트 인증서의 공개 키로 복호화하게 되는 과정을 보여줍니다. 그리고 마지막으로 루트 인증서의 서명은 루트 인증서의 개인 키로 자체 암호화를 하게 됩니다. 즉, 해당 개인키로 암호화하였으니 공개키로 복호화하는 것입니다.

ssl15

현재 네이버에 적용된 SSL 인증서는 크롬 인증서 뷰어에서 위와 같이 확인할 수 있으며 서버에 설정된 도메인 인증서인 \*.www.naver.com을 중간 CA인 DigiCert TLS RSA SHA256 2020 CA1이 서명했고 해당 중간 CA는 DigiCert Global Root CA가 서명했습니다. 클라이언트는 이미 신뢰하고 있는 Root CA에 대한 정보를 ‘신뢰하고 있는 Root CA의 목록’으로 설정한 상태이며 전달받은 도메인 인증서를 서명한 중간 CA 정보, 그리고 중간 CA를 서명한 Root CA에 대한 정보를 차례대로 확인하여 검증하게 됩니다.

Root CA로부터 인증서를 발급하게 되면 도메인 인증서와 여러 개의 중간 인증서 또는 루트 인증서, 그리고 도메인 인증서의 개인 키를 발급받게 됩니다. 최근에는 브라우저에서 해당 루트 인증서를 지원하게 될 경우 루트 인증서는 제외하고 발급되는 것 같습니다. 이렇게 인증서를 발급받게 되면 발급받은 인증서를 검증하는 과정을 거쳐야 합니다. 그 과정을 아래 그림으로 설명 드리기 위해 네이버의 도메인 인증서와 체인 인증서, 루트 인증서 순으로 배치하였습니다.

ssl16

가장 먼저 도메인 인증서에서 확인해야 할 부분은 SAN(Subject Alternative Name) DNS 필드입니다. 이 필드에 발급받은 도메인이 포함되는지 확인합니다. Root CA에서 발급받은 인증서는 약 1년 단위로 발급 및 갱신이 가능하기 때문에 Expire Date 필드의 값이 1년 기간 가량 남아있는지도 확인합니다.

다음으로 확인해야 할 부분은 Issuer Name 입니다. 이 필드 값의 주체(CN)가 체인 인증서의 Subject 필드 CN값과 일치하는지 확인합니다. 마지막으로 체인 인증서의 Issuer Name 필드 CN 값과 루트 인증서의 Subject 필드 CN 값과 일치하는지 확인합니다.

이렇게 확인하는 이유는 앞서 말씀드린 인증서 체인 구조에 따라 인증서 서명 과정을 거치기 때문입니다. 도메인 인증서를 체인 인증서가 서명하므로 도메인 인증서의 Issuer Name은 체인 인증서의 Subject CN이 오게 되고 체인 인증서를 루트 인증서가 서명하므로 체인 인증서의 Issuer Name은 루트 인증서의 Subject CN이 오게 됩니다.

마지막으로 도메인 인증서의 해쉬 값과 개인 키(RSA PRIVATE KEY)의 해쉬 값을 비교하여 서로 일치하는지 확인하면 SSL 인증서 적용에 앞서 검증이 마무리되는 것입니다.