セキュリティーの勉強のためにRoot証明書をOpenSSLで覗いてみた

:warning: **2020/9/23 後述の書籍[^book]の内容と趣旨が異なる内容を扱っていたため、<font color="RED">全面改訂済</font>**

新型コロナウイルスの影響で春期の試験は中止となった情報処理安全確保支援士試験(SC試験）は秋期は開催されることが決定しました。残り1ヶ月余りの最後の総仕上げの勉強として[マスタリングTCP/IP 情報セキュリティ編](https://amzn.to/2ZSFO99)を再読しています。4章の後半ではApplication CAの証明書を実際にブラウザからダウンロードして中身をビュワーアプリケーションで見る方法が紹介されています。しかし、当該書籍で紹介されている方法には、下記の3点問題点が有ります。

1. 証明書のダウンロード方法はIEとFire Foxでの方法は紹介されているが、Chromeには言及されていない。
2. [CertView for Win](https://www.vector.co.jp/soft/win95/util/se109202.html)というアプリケーションが紹介されているが、Windowsのみ対応で、Macには対応していない。
3. Macで証明書ファイルを見るアプリケーションとして[Max Inspect](https://apps.apple.com/jp/app/max-inspect/id1438113612?mt=12)というアプリケーションが有るが、有償(¥370.)である。

Mac+Chromeを愛用している筆者としては、書籍の方法は役に立ちません。Windwosではフリーウェアで出来ることがMacだと有料で。。。:scream:(~~林檎の呪い~~)また、CertView for Winは非常に古いアプリケーションでWin10を利用している友人に試して貰った所、非常に不安定な動作だと分かりました。そこで、「私家版ChromeとOpenSSLを用いた証明書ファイルを見るための備忘録」をまとめておこうと思います。無論、Windowsでもこの方法は試せます。

# OpenSSLがインストール済かの確認
今回は暗号関連のモジュールが充実しており、なおかつOSSで提供されている[OpenSSL](https://www.openssl.org/)を用います。OpenSSLがインストールされているかの確認のために、ターミナルで以下のコマンドを実行します。

```bash
$ openssl version
LibreSSL 2.6.5
```

インストールされていない場合は、先にインストールする必要が有ります。OS毎にインストール方法が違うため、本記事には記載しません。利用しているOS毎にインストール方法を調べてインストールして下さい。

# 証明書ファイルのダウンロード @ Google Chrome
Google Chromeで証明書ファイルをダウンロードする方法を紹介します。まず、Google Chromeの設定画面を表示します。

![chromesettings](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/95bd6d06-80bc-f92f-f6d9-ec9953d904eb.png)

左端の設定一覧中の`プライバシーとセキュリティ`をクリックし、`セキュリティ`をクリックします。

![security](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/21809197-d7a7-6e47-f616-8e14ab947922.png)

`証明書の管理`をクリックします。

![keyadmin](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/33bdf4e0-5f2b-b27e-188a-faefbbf5f875.png)

キーチェーンアクセスのウィンドウが表示されるので、`ApplicationCA2 Root`の証明書を右クリックし、`ApplicationCA2 Rootを書き出す…`をクリックします。

![keychainaccess](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/244fc48a-289b-7d36-c87f-e600c03773d8.png)

ここでは下図の様に`cer`形式と`pem`形式で保存します。それぞれopensslで表示させた時に見える情報が異なります。

![savecer](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/e88efdf5-a291-0be2-5e18-169dd20e8069.png)

![savepem](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/b6093c05-51d8-acc6-6968-ea1c64213ba4.png)

# OpenSSLで証明書を覗いてみる
ターミナルで以下のコマンドを実行すると証明書ファイルの中身を見ることが出来ます。`pem`ファイルの場合詳細な情報を見ることが出来ます。

```bash
$ openssl x509 -noout -text -in Desktop/*.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            31:32:35:33:37:32:38:32:38:32:38
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, O=Japanese Government, OU=GPKI, CN=ApplicationCA2 Root
        Validity
            Not Before: Mar 12 15:00:00 2013 GMT
            Not After : Mar 12 15:00:00 2033 GMT
        Subject: C=JP, O=Japanese Government, OU=GPKI, CN=ApplicationCA2 Root
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a6:aa:ad:25:65:d6:00:11:d6:e8:7a:76:aa:f4:
                    e6:b4:4b:f3:cc:c3:52:b4:8d:ac:a6:4f:b5:92:71:
                    6f:46:b5:d5:ad:8b:12:22:17:25:ce:45:e8:14:7a:
                    85:9a:e4:23:10:a8:fa:b1:67:50:e5:6d:47:e0:6a:
                    89:13:e3:ae:ae:35:f1:f4:42:c5:05:f7:4d:97:7e:
                    3c:28:fc:b0:26:91:1e:8c:1e:38:1a:96:dc:58:44:
                    97:62:e3:32:c8:d1:15:41:4d:75:98:78:be:ab:68:
                    a9:5e:ed:47:be:a4:ba:8e:a1:02:97:de:93:74:99:
                    6d:67:b4:05:25:ee:94:c8:ed:aa:a4:ba:32:6c:42:
                    11:eb:be:cb:17:06:90:e1:93:85:c8:64:28:ce:1f:
                    47:c7:c0:5d:60:ee:76:36:dc:33:3b:51:eb:7b:cf:
                    72:d8:0f:78:a8:19:82:08:90:3e:1a:98:8d:8e:b4:
                    cf:15:36:a6:6e:dd:b7:e2:4d:40:20:53:d9:76:2a:
                    d0:78:ac:89:f0:4f:8b:32:6d:44:ea:2e:ba:b0:a9:
                    eb:89:dd:b7:6f:79:0f:ab:81:6e:b8:e6:8b:29:0b:
                    59:af:b6:49:0d:51:2c:a9:fd:9d:28:63:66:b8:70:
                    95:73:9a:d8:fa:3b:33:bc:42:42:1b:32:ac:b1:32:
                    fb:3d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                56:A7:AC:AA:02:1D:B2:AC:3D:90:0E:A0:6F:2E:41:C6:76:E7:7B:DA
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Subject Alternative Name: 
                DirName:/C=JP/O=\xE6\x97\xA5\xE6\x9C\xAC\xE5\x9B\xBD\xE6\x94\xBF\xE5\xBA\x9C/OU=\xE6\x94\xBF\xE5\xBA\x9C\xE8\xAA\x8D\xE8\xA8\xBC\xE5\x9F\xBA\xE7\x9B\xA4/CN=\xE3\x82\xA2\xE3\x83\x97\xE3\x83\xAA\xE3\x82\xB1\xE3\x83\xBC\xE3\x82\xB7\xE3\x83\xA7\xE3\x83\xB3CA2 Root
            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         7f:9a:09:75:ac:07:d1:72:74:2e:77:57:30:c2:04:9c:d4:80:
         a6:83:e7:a5:a0:1b:9f:fe:ab:f3:80:bd:d5:4a:a3:a1:8f:b6:
         4c:60:11:e7:ca:e1:60:81:d7:48:c1:20:59:a5:61:32:8b:9d:
         9e:97:d3:66:83:da:65:2e:58:3e:db:e5:2f:a5:cd:8c:73:a6:
         51:be:58:28:a0:79:5c:69:2f:43:df:63:b2:89:47:ca:bb:de:
         b9:34:11:63:a0:0e:25:17:e5:87:f4:1d:b0:b0:a5:cf:41:a8:
         74:c6:e8:53:d5:42:f4:82:2d:53:09:11:68:26:71:94:75:13:
         4d:aa:76:88:3c:74:b1:d6:e3:4c:4f:62:c3:49:4c:4e:6d:f1:
         70:7e:c3:7f:a6:05:cc:78:9b:e9:81:db:a8:c8:c7:5c:9e:fc:
         92:92:2d:a6:97:f2:38:b5:6e:73:95:0c:c0:3f:ce:a6:94:30:
         b5:fa:05:b7:de:9e:20:aa:fc:13:64:c9:8a:ba:64:ef:e2:63:
         e4:d8:98:ae:6b:b5:3e:a6:55:b8:33:3e:2c:72:fb:2c:11:00:
         fb:5b:16:2f:84:d2:13:9e:fa:05:c5:c1:cb:72:4e:22:dd:84:
         ca:4b:bc:d2:2d:86:1a:04:76:59:1f:49:42:62:3b:13:1f:16:
         e8:ba:d7:fd
```

```bash
$ openssl x509 -inform der -in Desktop/*.cer
-----BEGIN CERTIFICATE-----
MIID9zCCAt+gAwIBAgILMTI1MzcyODI4MjgwDQYJKoZIhvcNAQELBQAwWDELMAkG
A1UEBhMCSlAxHDAaBgNVBAoTE0phcGFuZXNlIEdvdmVybm1lbnQxDTALBgNVBAsT
BEdQS0kxHDAaBgNVBAMTE0FwcGxpY2F0aW9uQ0EyIFJvb3QwHhcNMTMwMzEyMTUw
MDAwWhcNMzMwMzEyMTUwMDAwWjBYMQswCQYDVQQGEwJKUDEcMBoGA1UEChMTSmFw
YW5lc2UgR292ZXJubWVudDENMAsGA1UECxMER1BLSTEcMBoGA1UEAxMTQXBwbGlj
YXRpb25DQTIgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKaq
rSVl1gAR1uh6dqr05rRL88zDUrSNrKZPtZJxb0a11a2LEiIXJc5F6BR6hZrkIxCo
+rFnUOVtR+BqiRPjrq418fRCxQX3TZd+PCj8sCaRHoweOBqW3FhEl2LjMsjRFUFN
dZh4vqtoqV7tR76kuo6hApfek3SZbWe0BSXulMjtqqS6MmxCEeu+yxcGkOGThchk
KM4fR8fAXWDudjbcMztR63vPctgPeKgZggiQPhqYjY60zxU2pm7dt+JNQCBT2XYq
0HisifBPizJtROouurCp64ndt295D6uBbrjmiykLWa+2SQ1RLKn9nShjZrhwlXOa
2Po7M7xCQhsyrLEy+z0CAwEAAaOBwTCBvjAdBgNVHQ4EFgQUVqesqgIdsqw9kA6g
by5Bxnbne9owDgYDVR0PAQH/BAQDAgEGMHwGA1UdEQR1MHOkcTBvMQswCQYDVQQG
EwJKUDEYMBYGA1UECgwP5pel5pys5Zu95pS/5bqcMRswGQYDVQQLDBLmlL/lupzo
qo3oqLzln7rnm6QxKTAnBgNVBAMMIOOCouODl+ODquOCseODvOOCt+ODp+ODs0NB
MiBSb290MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAH+aCXWs
B9FydC53VzDCBJzUgKaD56WgG5/+q/OAvdVKo6GPtkxgEefK4WCB10jBIFmlYTKL
nZ6X02aD2mUuWD7b5S+lzYxzplG+WCigeVxpL0PfY7KJR8q73rk0EWOgDiUX5Yf0
HbCwpc9BqHTG6FPVQvSCLVMJEWgmcZR1E02qdog8dLHW40xPYsNJTE5t8XB+w3+m
Bcx4m+mB26jIx1ye/JKSLaaX8ji1bnOVDMA/zqaUMLX6BbfeniCq/BNkyYq6ZO/i
Y+TYmK5rtT6mVbgzPixy+ywRAPtbFi+E0hOe+gXFwctyTiLdhMpLvNIthhoEdlkf
SUJiOxMfFui61/0=
-----END CERTIFICATE-----
```

### cer形式からpem形式への変換
今回はcer形式とpem形式をダウンロードしましたが、OpenSSLを使用すると`cer形式`から`pem`形式に変換出来ます。以下のコマンドで実行出来ます。

```bash
$ openssl x509 -inform der -in Desktop/*.cer -out Desktop/convert.pem
```

<details><summary>中身を表示(上記の内容と同じ)</summary><div>

```bash
$ openssl x509 -noout -text -in Desktop/convert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            31:32:35:33:37:32:38:32:38:32:38
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, O=Japanese Government, OU=GPKI, CN=ApplicationCA2 Root
        Validity
            Not Before: Mar 12 15:00:00 2013 GMT
            Not After : Mar 12 15:00:00 2033 GMT
        Subject: C=JP, O=Japanese Government, OU=GPKI, CN=ApplicationCA2 Root
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a6:aa:ad:25:65:d6:00:11:d6:e8:7a:76:aa:f4:
                    e6:b4:4b:f3:cc:c3:52:b4:8d:ac:a6:4f:b5:92:71:
                    6f:46:b5:d5:ad:8b:12:22:17:25:ce:45:e8:14:7a:
                    85:9a:e4:23:10:a8:fa:b1:67:50:e5:6d:47:e0:6a:
                    89:13:e3:ae:ae:35:f1:f4:42:c5:05:f7:4d:97:7e:
                    3c:28:fc:b0:26:91:1e:8c:1e:38:1a:96:dc:58:44:
                    97:62:e3:32:c8:d1:15:41:4d:75:98:78:be:ab:68:
                    a9:5e:ed:47:be:a4:ba:8e:a1:02:97:de:93:74:99:
                    6d:67:b4:05:25:ee:94:c8:ed:aa:a4:ba:32:6c:42:
                    11:eb:be:cb:17:06:90:e1:93:85:c8:64:28:ce:1f:
                    47:c7:c0:5d:60:ee:76:36:dc:33:3b:51:eb:7b:cf:
                    72:d8:0f:78:a8:19:82:08:90:3e:1a:98:8d:8e:b4:
                    cf:15:36:a6:6e:dd:b7:e2:4d:40:20:53:d9:76:2a:
                    d0:78:ac:89:f0:4f:8b:32:6d:44:ea:2e:ba:b0:a9:
                    eb:89:dd:b7:6f:79:0f:ab:81:6e:b8:e6:8b:29:0b:
                    59:af:b6:49:0d:51:2c:a9:fd:9d:28:63:66:b8:70:
                    95:73:9a:d8:fa:3b:33:bc:42:42:1b:32:ac:b1:32:
                    fb:3d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                56:A7:AC:AA:02:1D:B2:AC:3D:90:0E:A0:6F:2E:41:C6:76:E7:7B:DA
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Subject Alternative Name: 
                DirName:/C=JP/O=\xE6\x97\xA5\xE6\x9C\xAC\xE5\x9B\xBD\xE6\x94\xBF\xE5\xBA\x9C/OU=\xE6\x94\xBF\xE5\xBA\x9C\xE8\xAA\x8D\xE8\xA8\xBC\xE5\x9F\xBA\xE7\x9B\xA4/CN=\xE3\x82\xA2\xE3\x83\x97\xE3\x83\xAA\xE3\x82\xB1\xE3\x83\xBC\xE3\x82\xB7\xE3\x83\xA7\xE3\x83\xB3CA2 Root
            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         7f:9a:09:75:ac:07:d1:72:74:2e:77:57:30:c2:04:9c:d4:80:
         a6:83:e7:a5:a0:1b:9f:fe:ab:f3:80:bd:d5:4a:a3:a1:8f:b6:
         4c:60:11:e7:ca:e1:60:81:d7:48:c1:20:59:a5:61:32:8b:9d:
         9e:97:d3:66:83:da:65:2e:58:3e:db:e5:2f:a5:cd:8c:73:a6:
         51:be:58:28:a0:79:5c:69:2f:43:df:63:b2:89:47:ca:bb:de:
         b9:34:11:63:a0:0e:25:17:e5:87:f4:1d:b0:b0:a5:cf:41:a8:
         74:c6:e8:53:d5:42:f4:82:2d:53:09:11:68:26:71:94:75:13:
         4d:aa:76:88:3c:74:b1:d6:e3:4c:4f:62:c3:49:4c:4e:6d:f1:
         70:7e:c3:7f:a6:05:cc:78:9b:e9:81:db:a8:c8:c7:5c:9e:fc:
         92:92:2d:a6:97:f2:38:b5:6e:73:95:0c:c0:3f:ce:a6:94:30:
         b5:fa:05:b7:de:9e:20:aa:fc:13:64:c9:8a:ba:64:ef:e2:63:
         e4:d8:98:ae:6b:b5:3e:a6:55:b8:33:3e:2c:72:fb:2c:11:00:
         fb:5b:16:2f:84:d2:13:9e:fa:05:c5:c1:cb:72:4e:22:dd:84:
         ca:4b:bc:d2:2d:86:1a:04:76:59:1f:49:42:62:3b:13:1f:16:
         e8:ba:d7:fd
```

</div></details>

# まとめ
Google Chromeで証明書ファイルをダウンロードして、OpenSSLを用いて中身を閲覧するまでの行程を紹介しました。

Qiitaの社内コミュニティーに参加をして本格的に記事投稿活動を開始して1年が経過しました。本記事が記念すべき40報目の記事となりました。今後も様々な内容の記事を投稿出来ればと思っています。

# Reference
* [SSL証明書の有効期限や内容を確認する方法一覧](https://qiita.com/bezeklik/items/a8e6296d7e21a7a8a9fe)
* [.cer証明書を.pemに変換するにはどうすればよいですか？](https://qastack.jp/server/254627/how-do-i-convert-a-cer-certificate-to-pem)

[^book]: マスタリングTCP/IP情報セキュリティ編