SSL サーバーを自作するための自分的予備知識

SSL ( TLS )

ルート認証局 ( CA ) およびサーバー証明書について

自分が調べた限りのことでザッと説明します。

電子工作用途の ESP32 ( ESP-WROOM-32 )サーバーで SSL 通信するために、最低限必要なものとして、サーバー側の秘密鍵と、公開鍵情報を含んだ認証局の署名付きサーバー証明書が必要です。
それは、OpenSSL などのソフトウェアで生成できます。
OpenSSL については、後日アップする記事で詳しく紹介します。

公開鍵情報を含んだ認証局の署名付きサーバー証明書とは、認証局 ( CA : Certificate Authority )にそのサーバーは正しいものであるという署名記号を組み込んだサーバー証明書のことです。
何だか良く分からないと思いますが、後述するサーバー証明書ファイルの中身を見ると分かって来ます。

認証局には、ルート認証局や、中間証明機関などいろいろありますが、ここではルート認証局だけ知っていれば良いと思います。
ルート認証局( CA : Certificate Authority )には、GlobalSign社やVeriSign社、GeoTrust 社など、様々な局があり、私のこのブログでは定期的に料金を払って USER Trust社の認証署名を得たサーバー証明書を使っています。

最初の方で説明したように、ブラウザから証明書を開いて、「証明のパス」というタブをクリックすると、下図の様に表示されまず。

最上位にあるものが、いわゆるルート認証局 ( CA )が発行したルート証明書です。

Google Chrome などのブラウザやパソコン、スマホには、信頼済みのルート証明書が予めインストールされていますが、それはApple や Windows , Google などの大手メーカーが厳正な審査の上、予めブラウザなどにインストールしているらしいです。
この証明書の中身は誰でも見ることができますし、公開鍵情報も含まれています。
「証明書の表示」ボタンを押すとみることが出来ます。

では、この大手業者の証明書があれば、サーバー証明書は簡単に発行できそうだと思ってしまうかも知れません。

しかし!

残念ながらそれはできません。
秘密鍵がありませんので、何もできません。
それは認証局だけが保有しているものです。
当たり前ですが、ホントにうまくできていますね。
(公開鍵や秘密鍵については後述します)

では、ESP32 などの電子工作用途ワンチップマイコンで、サーバーを自作するにはどうすれば良いでしょうか?

大手認証局に認証してもらうのは現実的ではありません。
では、どうするかというと、OpenSSL というソフトウェアを使えば、自己認証局証明書を発行することができるんです。
いわゆる、一般的に「オレオレ証明書」と言われているものです。

例として、私がOpenSSL で仮に作成したルートCA用証明書を発行して、テキスト形式に変換してみました。
こんな感じの内容になっています。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            a2:2f:81:ba:5e:10:67:45
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=Tokyo, L=Shinjyuku, O=Example_CA, OU=example_ca, CN=example_ca.com
        Validity
            Not Before: Mar  6 04:09:30 2018 GMT
            Not After : Feb 10 04:09:30 2118 GMT
        Subject: C=JP, ST=Tokyo, L=Shinjyuku, O=Example_CA, OU=example_ca, CN=example_ca.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    00:d9:17:ed:08:ae:5c:9c:49:91:51:ca:7e:1a:37:
                    7c:e7:54:fc:95:51:ce:a7:96:76:60:73:86:47:21:
                    1f:69:e3:0b:a3:93:a4:41:9e:4c:f1:18:ef:fe:4a:
                    b5:3c:18:1c:7c:d0:be:1e:64:84:e3:25:53:55:a6:
                    bb:18:05:d8:6c:78:f4:74:19:2c:13:b2:3e:31:3b:
                    31:9e:56:e9:23:36:f6:8a:86:45:a5:d4:d2:35:15:
                    d5:30:a5:a1:60:ce:13:58:25:61:15:dd:08:d9:de:
                    b4:69:c3:b9:8d:62:cc:05:59:a0:39:99:37:8c:cf:
                    6f:da:f4:91:45:d9:41:53:75:ff:79:9b:03:7f:e2:
                    e2:6e:b3:d5:76:77:df:a0:ab:9e:18:21:ae:2b:bf:
                    05:4a:02:3d:38:85:55:58:57:aa:7f:72:93:24:4b:
                    f7:1f:77:53:6d:7c:b8:40:e3:c7:ad:34:44:0d:1f:
                    be:ca:96:39:6e:37:b4:39:65:27:c0:bf:36:7c:8b:
                    15:cb:8f:f9:8c:14:0b:71:39:64:e8:17:75:8f:73:
                    84:e4:e7:cf:46:d4:00:c6:1a:23:f0:c6:04:3b:d9:
                    34:54:4b:cc:f6:9d:da:cd:67:03:18:43:f1:f0:76:
                    61:1d:1d:2e:de:54:b8:ad:f2:b0:de:c6:d1:7c:22:
                    f6:e6:89:a6:33:77:b5:16:57:e2:47:8f:85:2e:cd:
                    f4:74:b3:61:94:3c:49:ea:db:e5:0a:11:90:d2:06:
                    cf:ea:3c:bb:09:39:9f:21:71:78:72:90:4b:a4:d5:
                    d4:a1:0c:98:a9:e2:7c:48:e8:4d:ba:91:7a:ab:5f:
                    d1:a1:c7:1c:73:4c:52:c3:fb:d8:9a:07:99:08:d8:
                    9d:85:f0:68:48:6a:3a:6a:27:b7:a0:8e:17:36:78:
                    f4:f9:f8:57:c2:c4:ec:83:49:63:28:63:f7:1e:e7:
                    9d:8f:0e:62:1b:10:c8:f8:97:20:52:03:a7:d0:31:
                    d6:27:de:78:6c:3e:59:4a:8d:dc:32:64:c9:05:2f:
                    6b:5a:5f:90:26:21:eb:a0:01:54:7b:9e:56:51:69:
                    40:74:55:f5:e3:d8:34:07:a9:2b:a9:e0:f8:c8:ab:
                    f0:3a:18:4f:27:34:b0:f4:88:27:ee:4a:70:d7:aa:
                    56:fc:49:5c:88:0a:89:d4:68:c8:86:38:9e:60:ab:                                                                           
                    a5:f4:8e:99:4a:3a:18:11:51:98:a6:a3:4c:6f:6f:
                    07:e3:01:26:e5:1e:f0:40:73:b7:be:d0:d1:a8:fa:
                    b6:c9:c0:1d:13:a5:29:c5:50:29:8b:8b:7e:b1:b5:
                    3c:e5:07:90:e5:1e:74:ed:e5:5f:e5:66:88:54:ed:
                    76:7e:07
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS1:example_server.com
            X509v3 Subject Key Identifier:
                0E:0C:E5:64:7A:8D:B4:BB:4E:F2:32:9B:EB:8E:F9:0E:19:48:6B:26
            X509v3 Authority Key Identifier:
                keyid:0E:0C:E5:64:7A:8D:B4:BB:4E:F2:32:9B:EB:8E:F9:0E:19:48:6B:26

            X509v3 Basic Constraints:
                CA:TRUE
            Netscape Cert Type:
                SSL CA, S/MIME CA
    Signature Algorithm: sha256WithRSAEncryption
         40:bf:c0:24:ee:e3:e8:c3:6d:a2:34:d6:2a:96:db:44:b4:63:
         68:fc:40:6f:5b:e9:1d:c2:87:31:b0:dd:ba:da:5e:8f:87:d9:
         9e:29:fd:13:48:d0:b1:99:1e:c4:77:9a:3a:98:73:17:e4:83:
         25:3b:e3:19:b5:74:85:c9:97:b3:49:ca:f5:68:72:49:2a:ff:
         36:7c:7d:dc:f3:60:2b:2c:77:0f:6d:91:eb:8b:54:2c:c0:60:
         78:92:78:65:48:92:95:b8:06:31:47:87:18:05:64:c7:83:24:
         f3:5f:bc:05:00:b8:0a:bd:64:1e:7b:f8:b8:ac:83:2b:49:e6:
         ac:9a:ff:90:34:e6:e6:3f:7a:1b:28:55:e9:76:0d:3d:3f:06:
         5e:2e:39:82:f8:9e:09:cb:9c:96:d4:58:5d:30:68:8c:f9:d8:
         25:3b:c7:91:46:e7:37:d6:a3:1f:c9:64:0c:69:05:0b:01:05:
         98:a1:f2:bf:c5:7b:98:0b:f6:2f:93:8d:c7:ec:52:b4:77:23:
         e2:cd:51:de:50:2c:b0:aa:99:3c:bc:dc:fe:00:8b:52:1b:c2:
         40:64:b8:ae:de:c7:84:20:48:a3:70:7b:fb:29:14:87:ae:48:
         a5:e1:16:e5:1c:38:46:f0:f6:61:5a:5e:5f:a2:24:f1:13:c0:
         4d:66:bb:c5:59:a9:b6:82:aa:d2:55:e3:53:dc:ff:c5:91:ed:
         e0:37:a2:cc:06:88:64:aa:ab:8f:ca:bf:11:a3:a1:db:03:ce:
         90:a6:33:d2:21:cb:67:ce:a9:31:79:ae:0a:d2:2c:d2:9b:7d:
         d8:8f:c6:5f:83:53:61:57:8c:3a:df:65:2a:ae:da:f5:b0:1a:
         88:d2:19:8c:28:85:d8:da:ae:3c:d1:aa:49:5e:49:8c:41:bf:
         dc:31:69:de:36:d7:86:20:ae:1a:46:7f:d6:e8:22:54:c7:bc:
         d1:98:6b:3e:4a:50:41:8c:7a:e7:cf:a4:08:38:05:e9:8a:67:
         0f:09:4a:fe:08:51:bc:40:83:a1:5d:9b:e9:5f:b8:87:65:04:
         0b:20:e3:b7:40:5f:f1:d8:43:38:0c:58:21:57:d9:56:98:09:
         96:52:0c:3f:c5:1c:00:ff:20:e9:44:67:7a:7e:47:5f:b1:0a:
         f5:fe:f3:23:cd:04:50:21:8e:d6:28:9e:40:5b:17:65:d3:fa:
         d9:51:2f:c7:ae:6c:d2:01:e2:ad:81:10:3f:b9:82:b2:04:fb:
         fb:d0:fb:2b:eb:61:39:b6:8d:b2:4c:35:ac:89:f6:4a:d0:aa:
         ec:f0:16:69:79:c7:f1:e3:40:f9:58:1a:ec:ab:2d:f0:74:b4:
         c4:3a:6a:09:bf:db:f1:e3
-----BEGIN CERTIFICATE-----
MIIF2zCCA8OgAwIBAgIJAKIvgbpeEGdFMA0GCSqGSIb3DQEBCwUAMHExCzAJBgNV
BAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzESMBAGA1UEBwwJU2hpbmp5dWt1MRMwEQYD
VQQKDApFeGFtcGxlX0NBMRMwEQYDVQQLDApleGFtcGxlX2NhMRQwEgYDVQQDDAtl
eGFtcGxlLmNvbTAgFw0xODAzMDYwNDA5MzBaGA8yMTE4MDIxMDA0MDkzMFowcTEL
MAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRIwEAYDVQQHDAlTaGluanl1a3Ux
EzARBgNVBAoMCkV4YW1wbGVfQ0ExEzARBgNVBAsMCmV4YW1wbGVfY2ExFDASBgNV
BAMMC2V4YW1wbGUuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
2RftCK5cnEmRUcp+Gjd851T8lVHOp5Z2YHOGRyEfaeMLo5OkQZ5M8Rjv/kq1PBgc
fNC+HmSE4yVTVaa7GAXYbHj0dBksE7I+MTsxnlbpIzb2ioZFpdTSNRXVMKWhYM4T
WCVhFd0I2d60acO5jWLMBVmgOZk3jM9v2vSRRdlBU3X/eZsDf+LibrPVdnffoKue
GCGuK78FSgI9OIVVWFeqf3KTJEv3H3dTbXy4QOPHrTREDR++ypY5bje0OWUnwL82
fIsVy4/5jBQLcTlk6Bd1j3OE5OfPRtQAxhoj8MYEO9k0VEvM9p3azWcDGEPx8HZh
HR0u3lS4rfKw3sbRfCL25ommM3e1FlfiR4+FLs30dLNhlDxJ6tvlChGQ0gbP6jy7
CTmfIXF4cpBLpNXUoQyYqeJ8SOhNupF6q1/Rocccc0xSw/vYmgeZCNidhfBoSGo6
aie3oI4XNnj0+fhXwsTsg0ljKGP3Huedjw5iGxDI+JcgUgOn0DHWJ954bD5ZSo3c
MmTJBS9rWl+QJiHroAFUe55WUWlAdFX149g0B6krqeD4yKvwOhhPJzSw9Ign7kpw
16pW/ElciAqJ1GjIhjieYKul9I6ZSjoYEVGYpqNMb28H4wEm5R7wQHO3vtDRqPq2
ycAdE6UpxVApi4t+sbU85QeQ5R507eVf5WaIVO12fgcCAwEAAaN0MHIwDwYDVR0R
BAgwBocEwKgADjAdBgNVHQ4EFgQUDgzlZHqNtLtO8jKb6475DhlIayYwHwYDVR0j
BBgwFoAUDgzlZHqNtLtO8jKb6475DhlIayYwDAYDVR0TBAUwAwEB/zARBglghkgB
hvhCAQEEBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAEC/wCTu4+jDbaI01iqW20S0
Y2j8QG9b6R3ChzGw3braXo+H2Z4p/RNI0LGZHsR3mjqYcxfkgyU74xm1dIXJl7NJ
yvVockkq/zZ8fdzzYCssdw9tkeuLVCzAYHiSeGVIkpW4BjFHhxgFZMeDJPNfvAUA
uAq9ZB57+LisgytJ5qya/5A05uY/ehsoVel2DT0/Bl4uOYL4ngnLnJbUWF0waIz5
2CU7x5FG5zfWox/JZAxpBQsBBZih8r/Fe5gL9i+TjcfsUrR3I+LNUd5QLLCqmTy8
3P4Ai1IbwkBkuK7ex4QgSKNwe/spFIeuSKXhFuUcOEbw9mFaXl+iJPETwE1mu8VZ
qbaCqtJV41Pc/8WR7eA3oswGiGSqq4/KvxGjodsDzpCmM9Ihy2fOqTF5rgrSLNKb
fdiPxl+DU2FXjDrfZSqu2vWwGojSGYwohdjarjzRqkleSYxBv9wxad4214YgrhpG
f9boIlTHvNGYaz5KUEGMeufPpAg4BemKZw8JSv4IUbxAg6Fdm+lfuIdlBAsg47dA
X/HYQzgMWCFX2VaYCZZSDD/FHAD/IOlEZ3p+R1+xCvX+8yPNBFAhjtYonkBbF2XT
+tlRL8eubNIB4q2BED+5grIE+/vQ+yvrYTm2jbJMNayJ9krQquzwFml5x/HjQPlY
GuyrLfB0tMQ6agm/2/Hj
-----END CERTIFICATE-----

これは、先に述べた、x509という様式で、バージョンがv3 です。

ここには、Signature Algorithm(署名)と、Public-Key(公開鍵)がありますね。
当然ながら秘密鍵はありません。

これ、いわゆる「オレオレ認証局証明書」ですが、自分自身で署名して、証明書を発行しているわけです。
このようなものを1つ作成して、その秘密鍵があれば、サーバー証明書を発行し放題っていうわけです。

大手業者のルート証明書も、実は自身で署名しているらしく、それ自体が一種のオレオレ証明書と言えるらしいです。

BEGIN CERTIFICATE という項目は、それより上の全ての情報を PEM形式というテキストに変換したものです。
証明書や鍵ファイルをテキストエディタで見る時、—–BEGIN CERTIFICATE—– となっていれば、それは PEM 形式と覚えておけば良いです。

ところで、以前、Arduino – ESP32 で Yahoo! Japan サイトから記事を取得する時に、この形式のファイルを使って通信したことがあります。
Arduino – ESP32 WiFiClientSecure ライブラリで、安定して https ( SSL )記事をGETする方法
この記事を書いた当初は、今思えば正直言ってイマイチ理解していませんでした。
スイマセン。
m(_ _)m
この時に使用した何やら暗号みたいなテキストがPEM形式証明書というものです。

このルート認証局 ( CA )証明書と認証局の秘密鍵があれば、Signature Algorithm(署名)を生成でき、ユーザーサーバー証明書にそれを組み込むことで、初めてサーバー証明書が成立するわけです。

では、仮に作成した、署名付きサーバー証明書を OpenSSL で見てみると、こんな感じです。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9 (0x9)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=Tokyo, L=Shinjyuku, O=Example_CA, OU=example_ca, CN=example_ca.com
        Validity
            Not Before: Mar  6 04:46:06 2018 GMT
            Not After : Mar  3 04:46:06 2028 GMT
        Subject: C=JP, ST=Tokyo, L=Shinjyuku, O=Example_user_server, OU=example1, CN=example_server.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    00:ef:cb:47:5a:71:79:25:a1:16:de:a5:b0:dd:81:
                    55:31:85:e5:f1:20:23:a7:88:54:4e:61:26:a9:35:
                    e4:9a:ae:8b:31:a4:cd:2e:cb:cd:43:64:e3:31:2b:
                    25:63:4c:a2:c6:52:73:14:69:84:e9:80:0a:0f:b7:
                    19:af:13:8a:0c:10:34:34:6a:65:fb:ba:97:39:f9:
                    6c:a8:af:6f:d1:9d:a2:17:15:03:04:4d:70:8a:c3:
                    9d:58:6f:4c:81:00:53:5b:20:7a:ce:06:6b:4e:da:
                    85:93:ee:d4:40:0f:06:f0:93:68:a4:eb:ff:3e:a7:
                    c2:a8:65:5a:29:56:f8:7c:76:bd:80:c6:9a:fa:55:
                    e5:48:10:4d:94:1d:0d:00:46:15:84:48:0c:48:c6:
                    ee:b7:c7:54:72:2c:92:ac:55:e6:c6:34:29:eb:dc:
                    65:c9:27:41:66:ab:08:b1:b2:53:66:33:1b:14:15:
                    23:a9:3c:d9:33:03:de:ba:e5:9a:0d:19:e6:1e:25:
                    57:f2:b5:4a:9d:14:88:4f:7b:1f:af:a9:94:aa:e5:
                    12:96:b1:4c:41:c8:b4:94:ca:bd:0b:57:8f:8d:6d:
                    3f:16:18:42:18:88:8c:d7:a4:a4:b0:9c:2c:2e:37:
                    27:c9:70:d6:d9:3f:d5:a7:95:5f:c6:2a:40:6f:40:
                    8d:c1:ed:a1:c0:d6:42:e1:bf:05:6d:c7:57:34:23:
                    48:03:e4:ed:f6:cb:f1:42:dc:d0:58:8f:c7:97:c7:
                    34:fe:86:f8:39:bc:6a:32:77:96:b0:86:01:5a:b9:
                    da:73:92:ca:44:7f:ec:17:75:98:62:51:09:e8:4d:
                    f7:ac:01:a3:ce:8f:d0:5e:83:61:c9:66:4a:a3:50:
                    ca:29:5e:35:51:0a:8b:7f:9f:5d:b5:8a:03:ea:9a:
                    1e:92:6c:24:61:79:b1:3c:94:08:11:ae:3a:61:6c:
                    55:2e:73:3f:e1:f4:da:2d:d3:6a:0a:21:b7:6d:3c:
                    6d:95:c8:b0:9e:59:0f:52:d5:24:a4:73:56:53:ad:
                    28:a8:34:fa:0b:2f:07:ad:f7:ca:4d:c6:ee:1b:3b:
                    3b:f6:b5:35:77:ec:a1:b1:2d:25:a7:42:3c:48:32:
                    c4:ef:b7:a3:ef:c7:2f:b8:7e:0a:f3:7a:cc:a9:71:
                    1f:28:22:75:9d:ea:de:9d:d6:ab:ad:29:fe:92:35:
                    79:29:f3:0a:2a:bb:91:66:e2:ce:dd:fc:2a:e7:02:
                    df:c9:b9:65:fb:04:f4:02:8c:48:d3:6d:b5:6d:d9:
                    bb:73:85:6d:a2:c1:38:2f:eb:9d:b9:40:81:e6:88:
                    23:42:e0:79:40:6e:a5:6d:5d:51:e8:65:df:3b:98:
                    29:53:29
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                IP Address:example_server.com
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Cert Type:
                SSL Server
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                FA:12:A2:C2:C2:F6:FF:D5:F2:4D:D6:B6:2E:A1:A9:7C:7A:83:BE:D2
            X509v3 Authority Key Identifier:
                keyid:0E:0C:E5:64:7A:8D:B4:BB:4E:F2:32:9B:EB:8E:F9:0E:19:48:6B:26

    Signature Algorithm: sha256WithRSAEncryption
         35:05:ed:7d:de:0a:c2:37:8d:71:d7:0c:ff:52:65:20:96:4e:
         3e:c4:df:9f:e0:a8:6c:7c:e8:4e:68:94:5d:a0:31:76:9f:f1:
         bb:b7:9c:ed:48:55:27:1f:32:63:3f:f8:8d:1c:da:5f:22:f1:
         b1:5e:b0:9a:3a:0e:38:1a:79:91:63:8b:f1:85:f1:3b:4f:1a:
         dc:b7:97:f4:ba:05:bd:5e:5e:e6:8a:32:d5:4a:47:ae:5f:6e:
         19:1e:74:f0:a7:42:2a:94:a4:99:4a:f8:db:26:03:88:58:52:
         bf:21:c4:07:ae:a2:e9:46:70:e0:68:62:56:fa:0d:bb:47:fe:
         1d:05:ab:c5:9b:13:da:f7:d8:fd:38:73:2f:97:ea:21:23:4d:
         ad:85:b1:7a:3a:d7:47:ed:10:8b:d4:dd:ab:c6:be:4f:44:bd:
         1a:16:14:21:fe:8d:af:c0:5e:12:99:4a:1a:dd:bd:3e:82:7a:
         0c:8a:33:4e:91:e0:c6:7f:5d:bb:ab:d2:6f:34:ce:09:10:cb:
         1c:c9:3c:21:85:23:bb:e2:a5:f7:33:1a:ad:10:ce:0f:d3:9f:
         7d:3f:9b:75:b4:d8:37:e5:f5:34:38:0d:d0:ee:7e:a7:a7:ae:
         98:42:3f:f8:0d:df:f9:34:0d:1f:b3:06:6b:f4:36:93:95:6c:
         de:78:22:2a:fd:88:a3:21:43:6e:67:31:38:fd:2d:cc:38:64:
         19:47:94:40:14:01:f9:86:48:95:2b:97:78:7e:3f:c8:58:5f:
         37:b6:de:a3:c6:12:f1:ee:da:6e:5d:9b:c6:92:0d:06:fe:88:
         e8:d1:66:b0:c2:b0:f1:81:0d:87:b1:91:0b:a1:a9:59:10:92:
         1a:1d:d3:8b:c9:72:4d:e6:7b:9e:78:0b:36:d3:cb:33:29:55:
         24:2c:80:9a:14:52:eb:42:97:aa:0d:0a:5a:56:dc:e9:4d:bb:
         f5:c4:84:3f:8e:95:7b:9f:eb:c1:c8:62:86:76:c7:18:8d:eb:
         27:f4:55:82:26:20:ef:b5:77:1b:83:7b:e4:82:91:bd:32:89:
         78:a9:23:76:6f:ff:70:92:93:31:86:98:97:42:01:af:2c:41:
         e5:0a:35:3b:a3:0e:ad:c1:6b:32:50:ca:e7:34:e4:f9:bb:92:
         31:0f:ef:e2:75:bd:37:48:4d:a9:e0:ee:03:47:e8:4e:d0:f3:
         0b:f3:ed:7b:89:77:18:be:c0:91:80:3a:bc:9c:92:d6:e7:9b:
         b1:a9:ba:72:9f:18:43:c7:13:32:74:c8:8f:07:86:cf:0d:50:
         78:cb:33:3a:1c:34:05:20:5d:58:94:6b:7c:48:53:dd:37:76:
         6c:ad:ca:5b:5c:78:43:c7
-----BEGIN CERTIFICATE-----
MIIF+TCCA+GgAwIBAgIBCTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJKUDEO
MAwGA1UECAwFVG9reW8xEjAQBgNVBAcMCVNoaW5qeXVrdTETMBEGA1UECgwKRXhh
bXBsZV9DQTETMBEGA1UECwwKZXhhbXBsZV9jYTEUMBIGA1UEAwwLZXhhbXBsZS5j
b20wHhcNMTgwMzA2MDQ0NjA2WhcNMjgwMzAzMDQ0NjA2WjBsMQswCQYDVQQGEwJK
UDEOMAwGA1UECAwFVG9reW8xEjAQBgNVBAcMCVNoaW5qeXVrdTEQMA4GA1UECgwH
RXhhbXBsZTERMA8GA1UECwwIZXhhbXBsZTExFDASBgNVBAMMC2V4YW1wbGUuY29t
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA78tHWnF5JaEW3qWw3YFV
MYXl8SAjp4hUTmEmqTXkmq6LMaTNLsvNQ2TjMSslY0yixlJzFGmE6YAKD7cZrxOK
DBA0NGpl+7qXOflsqK9v0Z2iFxUDBE1wisOdWG9MgQBTWyB6zgZrTtqFk+7UQA8G
8JNopOv/PqfCqGVaKVb4fHa9gMaa+lXlSBBNlB0NAEYVhEgMSMbut8dUciySrFXm
xjQp69xlySdBZqsIsbJTZjMbFBUjqTzZMwPeuuWaDRnmHiVX8rVKnRSIT3sfr6mU
quUSlrFMQci0lMq9C1ePjW0/FhhCGIiM16SksJwsLjcnyXDW2T/Vp5VfxipAb0CN
we2hwNZC4b8FbcdXNCNIA+Tt9svxQtzQWI/Hl8c0/ob4ObxqMneWsIYBWrnac5LK
RH/sF3WYYlEJ6E33rAGjzo/QXoNhyWZKo1DKKV41UQqLf59dtYoD6poekmwkYXmx
PJQIEa46YWxVLnM/4fTaLdNqCiG3bTxtlciwnlkPUtUkpHNWU60oqDT6Cy8HrffK
TcbuGzs79rU1d+yhsS0lp0I8SDLE77ej78cvuH4K83rMqXEfKCJ1nerendarrSn+
kjV5KfMKKruRZuLO3fwq5wLfybll+wT0AoxI0221bdm7c4VtosE4L+uduUCB5ogj
QuB5QG6lbV1R6GXfO5gpUykCAwEAAaOBoDCBnTAPBgNVHREECDAGhwTAqAAOMAkG
A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMCwGCWCGSAGG+EIBDQQfFh1PcGVu
U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU+hKiwsL2/9XyTda2
LqGpfHqDvtIwHwYDVR0jBBgwFoAUDgzlZHqNtLtO8jKb6475DhlIayYwDQYJKoZI
hvcNAQELBQADggIBADUF7X3eCsI3jXHXDP9SZSCWTj7E35/gqGx86E5olF2gMXaf
8bu3nO1IVScfMmM/+I0c2l8i8bFesJo6DjgaeZFji/GF8TtPGty3l/S6Bb1eXuaK
MtVKR65fbhkedPCnQiqUpJlK+NsmA4hYUr8hxAeuoulGcOBoYlb6DbtH/h0Fq8Wb
E9r32P04cy+X6iEjTa2FsXo610ftEIvU3avGvk9EvRoWFCH+ja/AXhKZShrdvT6C
egyKM06R4MZ/Xbur0m80zgkQyxzJPCGFI7vipfczGq0Qzg/Tn30/m3W02Dfl9TQ4
DdDufqenrphCP/gN3/k0DR+zBmv0NpOVbN54Iir9iKMhQ25nMTj9Lcw4ZBlHlEAU
AfmGSJUrl3h+P8hYXze23qPGEvHu2m5dm8aSDQb+iOjRZrDCsPGBDYexkQuhqVkQ
khod04vJck3me554CzbTyzMpVSQsgJoUUutCl6oNClpW3OlNu/XEhD+OlXuf68HI
YoZ2xxiN6yf0VYImIO+1dxuDe+SCkb0yiXipI3Zv/3CSkzGGmJdCAa8sQeUKNTuj
Dq3BazJQyuc05Pm7kjEP7+J1vTdITang7gNH6E7Q8wvz7XuJdxi+wJGAOrycktbn
m7GpunKfGEPHEzJ0yI8Hhs8NUHjLMzocNAUgXViUa3xIU903dmytyltceEPH
-----END CERTIFICATE-----

Signature Algorithm項目のところが、ルート認証局の署名になるわけです。
実は、署名付きサーバー証明書を発行する前に、証明書署名要求(CSR: certificate signing request) ファイルというものを作成しないと、ルート認証局 ( CA ) の署名ができませんのでご注意ください。

このことを踏まえて、OpenSSL などのソフトウェアによる大まかなユーザーサーバー証明書発行手順は以下のようになると思います。

最終的に生成された署名付きユーザーサーバー証明書(拡張子.crt)ファイルと、ユーザーサーバー秘密鍵がサーバー側にあれば、最低限ブラウザとの SSL通信が可能になります。
ただし、それだけでアクセスすると、ブラウザから下図の様な警告が出ます。
これは、Android スマホの Google Chrome の場合です。

これでも、詳細設定をタップして、強制的にアクセスすれば、下図の様に SSL通信は可能です。

URL 入力欄で https が赤色で消されていますね。
ブラウザ側としては、成り済ましや偽装サーバーの可能性があるので、判定できないということの警告表示です。

安全なサーバーということを立証するためには、ブラウザ側の端末に「信頼された認証機関」として、自作したルートCA証明書(.crt)ファイルを登録しておく必要があります。
(その方法は後日アップする記事で述べます)

スマホ側に自信で作成したルート証明書を登録して、サーバーにアクセスしてみると下図の様に表示されます。

これを見ると何かホッとしますね。

これから分かる通り、PC やスマホなどの端末などでは、登録されたルート証明書などで、そのサーバーが信頼できるかどうかをチェックしているようです。

ならば、悪意のある人が勝手に自己証明書を登録してしまうと・・・・??
そこまで考えると頭がおかしくなるので、考えるのは止めます。

では、証明書の受け渡しで、サーバーが信頼できたとして、実際のデータの暗号化通信はどうやっているのでしょうか?
次で説明してみます。

コメント

タイトルとURLをコピーしました