なんでもセキュリティ Advent Calendar 2016 4日目の記事です。(まとめが追い付かず日付またいでしまいました。すみません)
SSL の設定、だいたい適当に見つけたブログ記事でも見ながら仕組みも理解せずにポチポチコピペで済ませてしまうことが多いので、今回は改めて仕組みをおさらいしてみます。
注意事項
ちょっと長くなってしまいました。お暇なとき(たとえば通勤時間など)に暇つぶしにでも読んでもらえれば。
秘密鍵の作成
$ openssl genrsa -des3 -out test.pem 2048 Generating RSA private key, 2048 bit long modulus ................+++ .......+++ e is 65537 (0x10001) Enter pass phrase for test.pem: ← 適当なパスフレーズを決めて入力 Verifying - Enter pass phrase for test.pem: ← 同じものを入力
これで test.pem という秘密鍵が作られます。
2048 ビット長というと 256 バイト長にあたるわけですが、ファイルフォーマット (PEM 形式) の都合上、生成されるファイルサイズは 1700 バイトちょっとになります。
$ ls -l test.pem -rw-rw-r-- 1 kobake kobake 1743 Dec 4 21:33 test.pem
中身はこんな感じ。本来は人に見せるものではありませんが今回は実験なので少し見せます。
$ cat test.pem -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,3579FDC9970E932F CAX+qsmvguWbMifCgtY/uxRncPsrFm+MbfnhY+NWR4faQFI0bOCTT+y3Fmu9bMXS k1v+2OnPLQBsg6yTW8Tet7/X8v4MIGuRhwXbtGYhGct1Vn+xjZPc3h9kY7pEkZyg UUUA9amsnPFiqfp7LHFx66zVyHcLUNFbY0vxSL8KfTj+vZYRYAEiIrTXJnLiMTds ..... jXWb3Pn7ndHboz3yCXThE3ZuA/+wSDdgIZSljz4wF8HM33evsXwFadQzGjtDF3pu X4Q7NY00DwdkDDmndAxF4VUsA7qBgg2dYpSP4xPO4OWfAqCRD4cu2A== -----END RSA PRIVATE KEY-----
BASE64 エンコードされている部分に実際の秘密鍵のバイナリが含まれています。(さらにパスフレーズにより暗号化がかかっている)
作成された秘密鍵 *.key はとても大事なものなので大切に保管しましょう。
秘密鍵の内容確認
「秘密鍵の」と書きましたが、以下コマンドにより秘密鍵と公開鍵の両方の情報が表示されます。
(秘密鍵が決まれば自動的に公開鍵も決まるのです)
$ openssl rsa -text -noout -in test.pem Enter pass phrase for test.pem: ← パスフレーズを入力 Private-Key: (2048 bit) modulus: ← このセクションがいわゆる公開鍵 00:ae:b5:bb:ab:f8:13:7b:43:18:2a:84:98:99:89: 6f:bf:cf:e9:e0:4c:07:cd:b0:c9:6c:ca:b3:a6:52: 83:6c:08:3a:3f:3f:11:8e:2c:36:58:17:d2:2f:f3: 16:52:fa:9a:3f:52:4e:16:a2:e4:64:6b:57:47:e9: 54:e3:b3:87:69:0a:08:0c:93:3f:58:34:a6:99:6f: 84:0c:29:a3:10:44:76:80:86:f9:d7:f2:21:d9:d4: 77:55:8b:95:72:1c:99:e3:de:31:7d:a7:91:dc:6c: 7e:d5:a8:5b:c5:90:4d:a9:ee:1f:3a:c8:47:45:a5: 72:dc:63:0e:b9:49:e5:b1:c7:c6:3d:8f:d8:87:bb: 10:9d:08:4d:31:c2:cb:1b:fa:9f:87:ad:a9:65:f4: b7:38:e5:f6:f8:0d:a9:3d:4c:74:6f:b0:ce:ac:89: cb:ad:72:21:65:3f:2d:72:7e:e2:63:d9:46:03:40: d3:ce:b2:1c:0c:17:bc:17:03:93:a3:a8:91:4e:ac: 71:8b:ba:eb:62:6c:3f:ee:d6:91:25:76:02:8c:c6: 3e:d3:c4:80:6b:56:82:a0:3b:ea:71:2c:df:f3:6e: ba:76:e6:3d:64:fb:af:f8:35:4d:96:52:eb:66:8a: 16:e6:19:a1:bf:d0:73:ee:24:69:ed:51:98:f7:0a: b3:4f publicExponent: 65537 (0x10001) privateExponent: ← このセクションが実際の秘密鍵バイナリ (2048ビット = 256バイト) 41:7e:6f:34:30:73:5d:29:f1:cd:3e:97:d6:36:e7: 65:88:93:ac:39:d4:53:0f:8a:f2:f5:aa:13:17:ab: 9c:bc:18:d9:cc:d2:cf:f1:53:0e:03:20:10:49:98: 7c:d2:e5:30:07:b2:ae:59:b2:34:d2:e8:8d:54:b3: 36:08:ff:22:29:58:8b:1e:48:08:d0:f4:03:61:02: a7:6c:94:6c:6c:bd:df:c0:b9:b8:72:54:ae:4c:2f: d0:29:db:84:43:a4:8c:ff:a6:9d:ec:4b:89:ce:42: 5d:e6:17:41:20:af:7c:9c:7f:a8:91:9b:e6:47:f7: 9f:16:a3:56:62:95:70:e7:4c:61:97:ee:95:36:60: 1c:18:4b:ec:0d:9a:bb:20:cf:a2:dd:c9:eb:fe:5b: a2:37:02:e2:06:ad:72:be:a4:bd:20:c5:7f:b2:93: 8e:cd:44:46:f1:54:59:58:cc:06:81:e3:5b:d0:1a: 43:c0:50:7b:fc:ae:09:9a:f1:76:12:7c:55:08:7b: 78:42:da:2c:ca:51:62:5e:f3:76:e8:ce:44:a1:a9: 5e:c2:e5:56:16:7a:b7:36:a1:11:15:70:93:da:98: 41:df:36:16:97:4d:4c:6f:40:50:77:34:9d:75:53: d7:12:2b:02:63:26:79:e1:af:c7:5f:0e:87:d6:36: c1 prime1: ← 素数1 00:df:b7:37:93:58:fe:29:3e:18:eb:b5:63:d7:cd: 4b:08:c9:a9:e4:14:3d:fe:9d:e1:21:09:a0:1d:c6: e7:8f:37:7d:b8:67:88:46:28:30:6f:c2:d3:cb:24: 15:f8:5e:a6:b5:9a:42:cb:30:34:00:22:9c:a8:49: 53:64:80:19:ac:34:42:18:62:3f:d1:38:65:14:13: a2:5e:e2:74:3a:da:80:b8:77:7c:80:dc:6e:38:9e: 05:9d:5c:d6:23:2c:57:ed:5d:fb:6d:61:d9:84:d6: d0:d2:a2:9f:bf:6d:05:b3:4c:ea:21:40:95:be:30: 9a:ac:45:47:5b:df:1d:13:f3 prime2: ← 素数2 00:c7:ec:15:3f:20:83:d4:6c:1a:0f:a9:f4:02:f8: b4:4f:c3:a0:70:45:df:a7:ad:69:fb:6e:c9:69:da: 77:a8:29:0d:cc:28:3e:ec:9f:81:ae:c1:9f:08:7f: c9:f9:1d:a4:d4:f4:d5:ca:64:5d:0d:dc:d6:eb:64: 3a:1d:1f:59:5a:3a:ca:df:dd:63:e7:11:63:cd:c6: dc:46:0a:5c:56:c5:07:46:80:7f:a3:ef:50:d0:93: 94:29:7c:ce:17:a0:8b:21:29:58:43:e7:fc:32:ed: 69:59:5c:52:81:09:80:8a:7b:5c:fe:bd:9a:26:0e: d0:14:6c:73:0b:6c:12:a6:35 exponent1: 1d:28:a6:47:c0:4b:b0:58:75:ab:13:43:66:37:4d: ......
「公開鍵は2つの素数の積である」ということを聞いたことがある方もいらっしゃるかと思います。
実際のところ上記で示した鍵表示をもとに、それが事実であることを確認してみましょう。
prime1, prime2 というのが該当の素数です。
数値計算が得意な Python の対話モードで確認してみましょう。
$ python >>> prime1 = 0x00dfb7379358fe293e18ebb563d7cd4b08c9a9e4143dfe9de12109a01dc6e78f377db867884628306fc2d3cb2415f85ea6b59a42cb303400229ca84953648019ac344218623fd138651413a25ee2743ada80b8777c80dc6e389e059d5cd6232c57ed5dfb6d61d984d6d0d2a29fbf6d05b34cea214095be309aac45475bdf1d13f3 >>> prime2 = 0x00c7ec153f2083d46c1a0fa9f402f8b44fc3a07045dfa7ad69fb6ec969da77a8290dcc283eec9f81aec19f087fc9f91da4d4f4d5ca645d0ddcd6eb643a1d1f595a3acadfdd63e71163cdc6dc460a5c56c50746807fa3ef50d09394297cce17a08b21295843e7fc32ed69595c528109808a7b5cfebd9a260ed0146c730b6c12a635 >>> modulus= prime1 * prime2 >>> hex(modulus) '0xaeb5bbabf8137b43182a849899896fbfcfe9e04c07cdb0c96ccab3a652836c083a3f3f118e2c365817d22ff31652fa9a3f524e16a2e4646b5747e954e3b387690a080c933f5834a6996f840c29a31044768086f9d7f221d9d477558b95721c99e3de317da791dc6c7ed5a85bc5904da9ee1f3ac84745a572dc630eb949e5b1c7c63d8fd887bb109d084d31c2cb1bfa9f87ada965f4b738e5f6f80da93d4c746fb0ceac89cbad7221653f2d727ee263d9460340d3ceb21c0c17bc170393a3a8914eac718bbaeb626c3feed6912576028cc63ed3c4806b5682a03bea712cdff36eba76e63d64fbaff8354d9652eb668a16e619a1bfd073ee2469ed5198f70ab34fL'
この計算結果が
modulus: 00:ae:b5:bb:ab:f8:13:7b:43:18:2a:84:98:99:89: 6f:bf:cf:e9:e0:4c:07:cd:b0:c9:6c:ca:b3:a6:52: 83:6c:08:3a:3f:3f:11:8e:2c:36:58:17:d2:2f:f3: .....
に一致していることが確認できました。(先頭の 00 は無視するとして、しっかりと aeb5bbabf8… の並びになっている)
CSR (Certificate Signing Request) 作成
SSL ネットワークを構築する際にはまず認証機関 (ジオトラストとか) に対して CSR (Certificate Signing Request = 証明書署名要求) というものを渡す必要がある。
CSR は認証を受ける組織の名前や所在地情報、連絡先等を含み、また、その CSR 作成者を証するために作成者の公開鍵情報を含む。(そこでさきほど作った鍵が登場する)
$ openssl req -new -key test.pem -out test.csr Enter pass phrase for test.pem: ← 秘密鍵のパスフレーズを入力 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP ← 国 State or Province Name (full name) []:Tokyo ← 都道府県 Locality Name (eg, city) [Default City]:Taito-ku ← 市区町村名等 Organization Name (eg, company) [Default Company Ltd]:ClockUp, Inc. ← 組織名 Organizational Unit Name (eg, section) []: ← 部署名。これは空っぽでも良い。 Common Name (eg, your name or your server's hostname) []:inc.clock-up.jp ← ドメイン名。ここは間違えないように。 Email Address []:kobake@users.sourceforge.net ← 連絡先。 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ← 空で良い An optional company name []: ← 空で良い
できあがった CSR
$ ls -l test.csr -rw-rw-r-- 1 kobake kobake 1058 Dec 5 00:05 test.csr $ cat test.csr -----BEGIN CERTIFICATE REQUEST----- MIIC1TCCAb0CAQAwgY8xCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzERMA8G A1UEBwwIVGFpdG8ta3UxFjAUBgNVBAoMDUNsb2NrVXAsIEluYy4xGDAWBgNVBAMM D2luYy5jbG9jay11cC5qcDErMCkGCSqGSIb3DQEJARYca29iYWtlQHVzZXJzLnNv dXJjZWZvcmdlLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK61 u6v4E3tDGCqEmJmJb7/P6eBMB82wyWzKs6ZSg2wIOj8/EY4sNlgX0i/zFlL6mj9S Thai5GRrV0fpVOOzh2kKCAyTP1g0pplvhAwpoxBEdoCG+dfyIdnUd1WLlXIcmePe MX2nkdxsftWoW8WQTanuHzrIR0WlctxjDrlJ5bHHxj2P2Ie7EJ0ITTHCyxv6n4et qWX0tzjl9vgNqT1MdG+wzqyJy61yIWU/LXJ+4mPZRgNA086yHAwXvBcDk6OokU6s cYu662JsP+7WkSV2AozGPtPEgGtWgqA76nEs3/NuunbmPWT7r/g1TZZS62aKFuYZ ob/Qc+4kae1RmPcKs08CAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAPsKFmGC1M tLsVy7NpKxHsxeII5dm7Ztlsw+RBrsQSolbEge4s8R7N+Sm/Sht1ou5zgN31MzGW 5JTLJ2x3KJpwTCH9uu1ybNbPSu5vdMIVtjMZcX8tWikaNPfUpfUgpHIUTeXmh/89 ZLDwXJv2lLv+yPekJM/zRq44KyVzfU2mnCmDe8klydUvtNBimfjA3t6LvigZ4SCE 8IdP88yEM36QicEU2T1DXTjeJgYn18Fm6rce5cV0jmULHro5swo62qnpar1aCFMQ RRDAte+eU3bQZ6pp5NkxegGpvyzYqSllOjInY13iFnwuLu3XtZwM10bLaXlAWuXr MzAZtat8Guo3 -----END CERTIFICATE REQUEST-----
この部分を BASE64 部分をデコードしたところでそれほど有用な情報は得られないので、
$ cat test.csr | sed -e '$d' | sed -e '1,1d' | base64 -d && echo "" 0001 0 UJP10Tokyo10Taito-ku10U ClockUp,*obake@users.sourceforge.net00 * *oͰ:??6XRNdkWGi Lto˭r!e?-r~F@N?%v>V;n5M桿 * -L˳ifAā)s'lw(L!rlJ¶3q-Z)4 M\F+%s}M)/bދ 3~=C]8'f کSEvz,ة)e:2'c].Fy@Z0|
ちゃんとしたコマンドでこのファイル内容を確認してみることにする
$ openssl req -text -noout -in test.csr Certificate Request: Data: Version: 0 (0x0) Subject: C=JP, ST=Tokyo, L=Taito-ku, O=ClockUp, Inc., CN=inc.clock-up.jp/emailAddress=kobake@users.sourceforge.net ← 組織情報 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: ← 公開鍵 00:ae:b5:bb:ab:f8:13:7b:43:18:2a:84:98:99:89: 6f:bf:cf:e9:e0:4c:07:cd:b0:c9:6c:ca:b3:a6:52: ..... ba:76:e6:3d:64:fb:af:f8:35:4d:96:52:eb:66:8a: 16:e6:19:a1:bf:d0:73:ee:24:69:ed:51:98:f7:0a: b3:4f Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha256WithRSAEncryption 0f:b0:a1:66:18:2d:4c:b4:bb:15:cb:b3:69:2b:11:ec:c5:e2: 08:e5:d9:bb:66:d9:6c:c3:e4:41:ae:c4:12:a2:56:c4:81:ee: ..... a9:bf:2c:d8:a9:29:65:3a:32:27:63:5d:e2:16:7c:2e:2e:ed: d7:b5:9c:0c:d7:46:cb:69:79:40:5a:e5:eb:33:30:19:b5:ab: 7c:1a:ea:37
こんな感じの内容。組織情報および公開鍵情報が含まれているので、認証機関は安心してこの CSR を受け取ることができる。
認証機関側での CSR の内容確認
CSR が送られたら認証機関では即サーバ証明書 (CRT) を発行してくれるわけではなく、まずは CSR に含まれているドメイン名が本当に送信元ユーザの所有ドメインであるかの確認を行う。
よくある手法として (RapidSSL 等)、認証機関側からランダムなトークンが記載された htm ファイルが送られてくる。
この htm ファイルを対象ドメインのサーバ内に設置する。
認証機関側はそのファイルの設置確認をもって、所有者の確認を行う。
この確認に問題がなければ、認証機関は送られてきた CSR に対して認証機関側の署名を行い、それをサーバ証明書 (CRT) としてユーザに送り返す。
サーバ証明書 (CRT)
$ cat server.crt -----BEGIN CERTIFICATE----- MIIFYjCCBEqgAwIBAgIQcx46KTU4TV2WV8WyTOUmcjANBgkqhkiG9w0BAQsFADBC MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMS .... TkGKKgzUXBSB2iqRg9VMYHmFKxWXwCYo0dhKhAMdyalbzZ6O8VeKegHEZgZdydUr qFHDxzdqc1dTMoI0v54qV+tbGblFMQrfdoY8MxEL8XNfr96UMdE= -----END CERTIFICATE-----
以下コマンドにより内容を確認できる。(これは実験用でない実物なので上に挙げたサンプルの CSR 情報とは食い違う情報が含まれています。ご容赦。あくまでもひとつの例として中身を見せます。)
$ openssl x509 -in server.crt -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 73:1e:3a:29:35:38:4d:5d:96:57:c5:b2:4c:e5:26:72 Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA Validity Not Before: Aug 8 00:00:00 2016 GMT Not After : Aug 8 23:59:59 2017 GMT Subject: CN=acc.clock-up.jp Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: ← 公開鍵 00:c4:15:1d:35:ea:30:9d:99:dd:d5:a6:74:cc:d0: 22:82:f0:0f:cb:86:89:3c:6e:30:9a:a8:3e:c5:9a: ..... eb:da:36:d9:f3:27:7c:06:bd:c7:b9:56:d8:1d:69: 4b:9e:59:0f:63:17:61:18:e9:a9:f0:f0:d7:26:64: 1b:af Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: DNS:acc.clock-up.jp X509v3 Basic Constraints: CA:FALSE X509v3 CRL Distribution Points: Full Name: URI:http://gp.symcb.com/gp.crl X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 CPS: https://www.rapidssl.com/legal User Notice: Explicit Text: https://www.rapidssl.com/legal X509v3 Authority Key Identifier: keyid:97:C2:27:50:9E:C2:C9:EC:0C:88:32:C8:7C:AD:E2:A6:01:4F:DA:6F X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Authority Information Access: OCSP - URI:http://gp.symcd.com CA Issuers - URI:http://gp.symcb.com/gp.crt 1.3.6.1.4.1.11129.2.4.2: O. ....hp~.....\..=..........Vl&.v.....H0F.!....a].....qb......_R.5..`......>.!.....+q.....vu.#....=8..i.w..'R(9.u.......X......gp .....Vl&.......F0D. .L]....tB...po...t._.?* x%.t..... .d..y,K..{..[.,t^.nh.Ql.bo....i. Signature Algorithm: sha256WithRSAEncryption 57:2e:2f:4d:cc:63:d7:9b:97:17:80:de:d2:d0:52:21:a5:c6: 29:93:1a:d0:bd:93:ef:63:c9:f3:7b:a6:09:10:10:c4:e4:77: ..... d5:2b:a8:51:c3:c7:37:6a:73:57:53:32:82:34:bf:9e:2a:57: eb:5b:19:b9:45:31:0a:df:76:86:3c:33:11:0b:f1:73:5f:af: de:94:31:d1
上記は acc.clock-up.jp の SSL 証明書情報なのだが、SSL 設定済みであればサーバ証明書ファイルがなくてもドメイン指定である程度の SSL 関連情報は以下のように取得できる。
$ openssl s_client -connect acc.clock-up.jp:443 -servername acc.clock-up.jp | openssl x509 -text -noout depth=0 CN = acc.clock-up.jp verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 CN = acc.clock-up.jp verify error:num=27:certificate not trusted verify return:1 depth=0 CN = acc.clock-up.jp verify error:num=21:unable to verify the first certificate verify return:1 Certificate: Data: Version: 3 (0x2) Serial Number: 73:1e:3a:29:35:38:4d:5d:96:57:c5:b2:4c:e5:26:72 Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA Validity Not Before: Aug 8 00:00:00 2016 GMT Not After : Aug 8 23:59:59 2017 GMT Subject: CN=acc.clock-up.jp Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: ←公開鍵 00:c4:15:1d:35:ea:30:9d:99:dd:d5:a6:74:cc:d0: 22:82:f0:0f:cb:86:89:3c:6e:30:9a:a8:3e:c5:9a: ..... eb:da:36:d9:f3:27:7c:06:bd:c7:b9:56:d8:1d:69: 4b:9e:59:0f:63:17:61:18:e9:a9:f0:f0:d7:26:64: 1b:af Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: DNS:acc.clock-up.jp X509v3 Basic Constraints: CA:FALSE X509v3 CRL Distribution Points: Full Name: URI:http://gp.symcb.com/gp.crl X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 CPS: https://www.rapidssl.com/legal User Notice: Explicit Text: https://www.rapidssl.com/legal X509v3 Authority Key Identifier: keyid:97:C2:27:50:9E:C2:C9:EC:0C:88:32:C8:7C:AD:E2:A6:01:4F:DA:6F X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Authority Information Access: OCSP - URI:http://gp.symcd.com CA Issuers - URI:http://gp.symcb.com/gp.crt 1.3.6.1.4.1.11129.2.4.2: O. ....hp~.....\..=..........Vl&.v.....H0F.!....a].....qb......_R.5..`......>.!.....+q.....vu.#....=8..i.w..'R(9.u.......X......gp .....Vl&.......F0D. .L]....tB...po...t._.?* x%.t..... .d..y,K..{..[.,t^.nh.Ql.bo....i. Signature Algorithm: sha256WithRSAEncryption 57:2e:2f:4d:cc:63:d7:9b:97:17:80:de:d2:d0:52:21:a5:c6: 29:93:1a:d0:bd:93:ef:63:c9:f3:7b:a6:09:10:10:c4:e4:77: ..... d5:2b:a8:51:c3:c7:37:6a:73:57:53:32:82:34:bf:9e:2a:57: eb:5b:19:b9:45:31:0a:df:76:86:3c:33:11:0b:f1:73:5f:af: de:94:31:d1
中間CA(ICA=Intermediate Certificate Authority=中間認証局)証明書を取得する
これは大抵の場合、認証局が Web サイト上に公開している。
たとえば RapidSSL ではれば以下から中間CA証明書を取得できる。
このようなテキストを、わかりやすい名前、たとえば inca_rapidssl.crt としてサーバに保存しておこう。
-----BEGIN CERTIFICATE----- MIIETTCCAzWgAwIBAgIDAjpxMA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i ..... 4FB84XavXu0R0y8TubglpK9YCa81tGJUheNI3rzSkHp6pIQNo0LyUcDUrVNlXWz4 Px8G8k/Ll6BKWcZ40egDuYVtLLrhX7atKz4lecWLVtXjCYDqwSfC2Q7sRwrp0Mr8 2A== -----END CERTIFICATE-----
他の CRT と同様に以下コマンドで中身を確認できる。
$ openssl x509 -in inca_rapidssl.crt -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 146033 (0x23a71) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA Validity Not Before: Dec 11 23:45:51 2013 GMT Not After : May 20 23:45:51 2022 GMT Subject: C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA ← GeoTrust側の組織情報 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: ← 公開鍵 00:bb:58:c1:12:01:2e:97:d8:7d:18:aa:c8:c2:e5: 85:e2:17:6c:60:2e:c9:8d:31:05:39:1a:06:98:56: ..... 5d:72:d5:28:39:e1:53:3e:25:2c:da:2b:4f:dd:8a: 9e:50:50:e0:6f:9a:c4:d5:19:26:89:01:75:73:09: 9b:3b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E X509v3 Subject Key Identifier: 97:C2:27:50:9E:C2:C9:EC:0C:88:32:C8:7C:AD:E2:A6:01:4F:DA:6F X509v3 Basic Constraints: critical CA:TRUE, pathlen:0 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 CRL Distribution Points: Full Name: URI:http://g1.symcb.com/crls/gtglobal.crl Authority Information Access: OCSP - URI:http://g2.symcb.com X509v3 Certificate Policies: Policy: 2.16.840.1.113733.1.7.54 CPS: http://www.geotrust.com/resources/cps X509v3 Subject Alternative Name: DirName:/CN=SymantecPKI-1-569 Signature Algorithm: sha256WithRSAEncryption 35:eb:e1:8b:20:56:94:ba:7a:bd:79:a9:f6:e3:fe:6e:38:b4: 32:c1:a3:db:58:56:20:3e:7d:c7:3a:b1:67:69:d5:79:14:1b: ..... 59:c6:78:d1:e8:03:b9:85:6d:2c:ba:e1:5f:b6:ad:2b:3e:25: 79:c5:8b:56:d5:e3:09:80:ea:c1:27:c2:d9:0e:ec:47:0a:e9: d0:ca:fc:d8
ファイルが揃った
- test.pem … 秘密鍵(自作)
- test.csr … 証明書署名要求(自作)
- inca_rapidssl.crt … RapidSSL中間CA証明書 (認証機関が公開)
- server.crt … サーバ証明書 (認証機関が発行)
これらを Apache なり何なりに組み込めば HTTPS サーバが完成する。
今回は各種ファイルの詳細に触れたが、手順だけであれば以前 Qiita にまとめた記事があるのでそちらを参照願いたい。
おしまい
まだ細かい説明の半分もできていない気がするが、どのファイルにどんな情報が格納されているのか、とっかかりがつかめるようになれば幸いである。
近いうちにもうちょっとよりわかりやすい SSL 解説サイトを立ち上げる予定です。