ルート認証局 ( 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 やスマホなどの端末などでは、登録されたルート証明書などで、そのサーバーが信頼できるかどうかをチェックしているようです。
ならば、悪意のある人が勝手に自己証明書を登録してしまうと・・・・??
そこまで考えると頭がおかしくなるので、考えるのは止めます。
では、証明書の受け渡しで、サーバーが信頼できたとして、実際のデータの暗号化通信はどうやっているのでしょうか?
次で説明してみます。
コメント