ベスパリブ

プログラミングを主とした日記・備忘録です

ルート証明書の探し方

ルート証明書を探す作業をたまにお仕事でするのですが、私なりの探し方をまとめました。

ブラウザの場合

ブラウザの鍵マークをクリック>証明書>証明書のパス>一番上の証明書をクリック>証明書の表示

f:id:takeg:20200926130706p:plain
ブラウザの鍵マークをクリック

f:id:takeg:20200926130730p:plain
一番上のルート証明書をクリックして、「証明書の表示」をクリック

ルート証明書が見れます。

ルート証明書のダウンロード(エクスポート)も「詳細」タブの「ファイルにコピー」でできます。

f:id:takeg:20200926130923p:plain
「ファイルにコピー」でダウンロードできる

エクスポートするときのファイル形式は、

  • DER形式(DER encoded binary X.509)
  • PEM形式(Base 64 encoded X.509)
  • P7B形式(Cryptographic Message Syntax Standard)

の3種類から選べます。

ブラウザ以外の場合

ルート証明書の名前がわかっている場合

「[ルート証明書名 or 企業名] root certificate」等でググって、ダウンロードできるサイトを探します。

「GlobalSign Root CA - R2 root certificate」とかで検索して探します。

ルート証明書/中間CA証明書(SSLサーバ証明書) | サポート・お申し込みガイド | GMOグローバルサイン【公式】

ルート証明書を発行しているCA認証局は大体サイトからダウンロードできるようにしてくれているので頑張って探します。

ルート証明書の名前がわかっていない場合

OpenSSLを使います。

まず、opensslコマンドを使ってサーバとTLSなりSTARTTLSなりで通信をします。その際に-showcertsオプションを指定すると証明書チェーンが表示されるので、それを見ればルート証明書がわかります。

以下ではGmailSMTPサーバ(smtp.gmail.com)のルート証明書を探します。

> openssl s_client -connect smtp.gmail.com:587 -starttls smtp -showcerts
CONNECTED(000001C0)
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com
verify return:1
---
Certificate chain
 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com
   i:C = US, O = Google Trust Services, CN = GTS CA 1O1
-----BEGIN CERTIFICATE-----
MIIEyDCCA7CgAwIBAgIQSzhrqklQvncCAAAAAHpLZDANBgkqhkiG9w0BAQsFADBC
MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMRMw
EQYDVQQDEwpHVFMgQ0EgMU8xMB4XDTIwMDkwMzA2NDA0NloXDTIwMTEyNjA2NDA0
NlowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcT
DU1vdW50YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBMTEMxFzAVBgNVBAMTDnNt
dHAuZ21haWwuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDhITcefeUMYB
+nyn2h4okLuNeiWVUHA8WiGU7RQO0hcmhB5wujB7Pl8jYgIXHoOzRRmywIDIFp+V
wCQ5cFR5SaOCAl0wggJZMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEF
BQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSHRBeWPUXeRH3cDglYzWu9AJcW
cTAfBgNVHSMEGDAWgBSY0fhuEOvPm+xgnxiQG6DrfQn9KzBoBggrBgEFBQcBAQRc
MFowKwYIKwYBBQUHMAGGH2h0dHA6Ly9vY3NwLnBraS5nb29nL2d0czFvMWNvcmUw
KwYIKwYBBQUHMAKGH2h0dHA6Ly9wa2kuZ29vZy9nc3IyL0dUUzFPMS5jcnQwGQYD
VR0RBBIwEIIOc210cC5nbWFpbC5jb20wIQYDVR0gBBowGDAIBgZngQwBAgIwDAYK
KwYBBAHWeQIFAzAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLnBraS5nb29n
L0dUUzFPMWNvcmUuY3JsMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcAB7dcG+V9
aP/xsMYdIxXHuuZXfFeUt2ruvGE6GmnTohwAAAF0UuksiAAABAMASDBGAiEAiN7n
z854FQrffyjPiAHQWjkKnBIPaxA08/CifmKCaHUCIQCLc14iC3ac5WgDubjkXITa
SmlaVemO1Ix3eAa3g6N7kwB2AOcS8rA3fhpi+47JDGGE8ep7N8tWHREmW/Pg80vy
QVRuAAABdFLpLF8AAAQDAEcwRQIga/yh3rUb4L/1fkTTgmEMQqS/0QAmQvJfNsJr
GSwgc+oCIQD+TVQ1RU7r6ylJsPJ68N4nAZphIBMgK1fLNHfSZ3F2aTANBgkqhkiG
9w0BAQsFAAOCAQEApjaqg8SqdbyYQyck3mGS9BNytzqrbUqYqmto6KcIJvuXx83I
HDJgbSJ+u1ukUZNxs2r5D2zi5sckwu7XUJKjakz+M2gafXy6i8l3LYQQ7dawuIJa
CkkdurNlYnXqfjt1ZXLhSlmj9AF/PqKEyE0p3aBcLRbDyBkPIbPRR9QnOt6cE3rV
q8wtfzwq6qSa8e2TVe6b7pSLMMe1aVcyBY6mrXyKxcz13KwiheUg8CicptkAPBoy
w757azBTSjyPEfEpT5IomANb9AUJx4ijhyvV9MXchbNwLkhktiR9QW29VkSlXSBb
tIUdHACgD69wvelpVJlyFG/aYmWeeweg5aWFNQ==
-----END CERTIFICATE-----
 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
   i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
-----BEGIN CERTIFICATE-----
MIIESjCCAzKgAwIBAgINAeO0mqGNiqmBJWlQuDANBgkqhkiG9w0BAQsFADBMMSAw
HgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFs
U2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0xNzA2MTUwMDAwNDJaFw0yMTEy
MTUwMDAwNDJaMEIxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVHb29nbGUgVHJ1c3Qg
U2VydmljZXMxEzARBgNVBAMTCkdUUyBDQSAxTzEwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDQGM9F1IvN05zkQO9+tN1pIRvJzzyOTHW5DzEZhD2ePCnv
UA0Qk28FgICfKqC9EksC4T2fWBYk/jCfC3R3VZMdS/dN4ZKCEPZRrAzDsiKUDzRr
mBBJ5wudgzndIMYcLe/RGGFl5yODIKgjEv/SJH/UL+dEaltN11BmsK+eQmMF++Ac
xGNhr59qM/9il71I2dN8FGfcddwuaej4bXhp0LcQBbjxMcI7JP0aM3T4I+DsaxmK
FsbjzaTNC9uzpFlgOIg7rR25xoynUxv8vNmkq7zdPGHXkxWY7oG9j+JkRyBABk7X
rJfoucBZEqFJJSPk7XA0LKW0Y3z5oz2D0c1tJKwHAgMBAAGjggEzMIIBLzAOBgNV
HQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1Ud
EwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJjR+G4Q68+b7GCfGJAboOt9Cf0rMB8G
A1UdIwQYMBaAFJviB1dnHB7AagbeWbSaLd/cGYYuMDUGCCsGAQUFBwEBBCkwJzAl
BggrBgEFBQcwAYYZaHR0cDovL29jc3AucGtpLmdvb2cvZ3NyMjAyBgNVHR8EKzAp
MCegJaAjhiFodHRwOi8vY3JsLnBraS5nb29nL2dzcjIvZ3NyMi5jcmwwPwYDVR0g
BDgwNjA0BgZngQwBAgIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9wa2kuZ29vZy9y
ZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAGoA+Nnn78y6pRjd9XlQWNa7H
TgiZ/r3RNGkmUmYHPQq6Scti9PEajvwRT2iWTHQr02fesqOqBY2ETUwgZQ+lltoN
FvhsO9tvBCOIazpswWC9aJ9xju4tWDQH8NVU6YZZ/XteDSGU9YzJqPjY8q3MDxrz
mqepBCf5o8mw/wJ4a2G6xzUr6Fb6T8McDO22PLRL6u3M4Tzs3A2M1j6bykJYi8wW
IRdAvKLWZu/axBVbzYmqmwkm5zLSDW5nIAJbELCQCZwMH56t2Dvqofxs6BBcCFIZ
USpxu6x6td0V7SvJCCosirSmIatj/9dSSVDQibet8q/7UK4v4ZUN80atnZz1yg==
-----END CERTIFICATE-----
...

このCertificate chain以下に注目します。「0」と「1」の2つの証明書情報がぶら下がっているのが見つかります(中間証明書がある場合は2とかにもなる)。

 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com
   i:C = US, O = Google Trust Services, CN = GTS CA 1O1
 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
   i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign

数字が大きいほうがルート証明書に近くなります。今回は「1」がルート証明書です。sはsubject(証明対象)でiはissuer(発行者)を意味します。ルート証明書の発行者がCA認証局なので、「GlobalSign」がCA認証局です。

ルート証明書「GlobalSign Root CA - R2」は、-----BEGIN CERTIFICATE----------END CERTIFICATE-----で囲まれたものが証明書になります。

 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
   i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
-----BEGIN CERTIFICATE-----
MIIESjCCAzKgAwIBAgINAeO0mqGNiqmBJWlQuDANBgkqhkiG9w0BAQsFADBMMSAw
HgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFs
U2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0xNzA2MTUwMDAwNDJaFw0yMTEy
MTUwMDAwNDJaMEIxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVHb29nbGUgVHJ1c3Qg
U2VydmljZXMxEzARBgNVBAMTCkdUUyBDQSAxTzEwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDQGM9F1IvN05zkQO9+tN1pIRvJzzyOTHW5DzEZhD2ePCnv
UA0Qk28FgICfKqC9EksC4T2fWBYk/jCfC3R3VZMdS/dN4ZKCEPZRrAzDsiKUDzRr
mBBJ5wudgzndIMYcLe/RGGFl5yODIKgjEv/SJH/UL+dEaltN11BmsK+eQmMF++Ac
xGNhr59qM/9il71I2dN8FGfcddwuaej4bXhp0LcQBbjxMcI7JP0aM3T4I+DsaxmK
FsbjzaTNC9uzpFlgOIg7rR25xoynUxv8vNmkq7zdPGHXkxWY7oG9j+JkRyBABk7X
rJfoucBZEqFJJSPk7XA0LKW0Y3z5oz2D0c1tJKwHAgMBAAGjggEzMIIBLzAOBgNV
HQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1Ud
EwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJjR+G4Q68+b7GCfGJAboOt9Cf0rMB8G
A1UdIwQYMBaAFJviB1dnHB7AagbeWbSaLd/cGYYuMDUGCCsGAQUFBwEBBCkwJzAl
BggrBgEFBQcwAYYZaHR0cDovL29jc3AucGtpLmdvb2cvZ3NyMjAyBgNVHR8EKzAp
MCegJaAjhiFodHRwOi8vY3JsLnBraS5nb29nL2dzcjIvZ3NyMi5jcmwwPwYDVR0g
BDgwNjA0BgZngQwBAgIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9wa2kuZ29vZy9y
ZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAGoA+Nnn78y6pRjd9XlQWNa7H
TgiZ/r3RNGkmUmYHPQq6Scti9PEajvwRT2iWTHQr02fesqOqBY2ETUwgZQ+lltoN
FvhsO9tvBCOIazpswWC9aJ9xju4tWDQH8NVU6YZZ/XteDSGU9YzJqPjY8q3MDxrz
mqepBCf5o8mw/wJ4a2G6xzUr6Fb6T8McDO22PLRL6u3M4Tzs3A2M1j6bykJYi8wW
IRdAvKLWZu/axBVbzYmqmwkm5zLSDW5nIAJbELCQCZwMH56t2Dvqofxs6BBcCFIZ
USpxu6x6td0V7SvJCCosirSmIatj/9dSSVDQibet8q/7UK4v4ZUN80atnZz1yg==
-----END CERTIFICATE-----

ちなみにこの-----BEGIN CERTIFICATE----------END CERTIFICATE-----で囲まれた形式をPEM形式と呼びます(Base64エンコードされてる形式)。

証明書のエンコード形式の変換

おまけとして、PEM形式の証明書とDER形式の証明書の変換方法を記載します。

PEMからDERへ変換

PEM形式server.pem.crtを、DER形式server.der.crtに変換する。

> openssl x509 -inform PEM -in server.pem.crt -outform DER -out server.der.crt

DERからPEMへ変換

DER形式server.der.crtを、PEM形式server.pem.crtに変換する。

> openssl x509 -inform DER -in server.der.crt -outform PEM -out server.pem.crt

参考サイト

証明書フォーマットを変換する