CIS(IBM Cloud Internet Service)の証明書（Origin用途）

#1. はじめに
CISの証明書の種類は色々あって若干混乱するため、整理するのが目的です。
本記事はOrigin用途の証明書について紹介します。
Edge用途の証明書については、[こちら](https://qiita.com/testnin2/items/ef04148867f915ad9203)を参照してください。

#2. Origin用証明書の種類とその作り方

```txt:通信の流れ
ブラウザ -> Edge(Reverse Proxy: CISの実体) -> Origin(Web Server)
```

EdgeとOriginの間もインターネットを経由するためSSLで暗号化したいと考えるのが一般的です。そのためOriginに証明書が必要になります。

Origin用証明書を準備するためには4種類の方法があります。 

1. CSRとサーバー鍵は自分で生成し、自分で署名する方法。<br>一般的にはこの方法は推奨されません。これは、Edgeから実在性について信用できないサーバーにアクセスしに行っていることに等しいからです。CISでもTLSの[encryption mode](https://cloud.ibm.com/docs/infrastructure/cis?topic=cis-cis-tls-options#tls-options)で`End-to-End flexible`を利用する必要があります。

2. CSRとサーバー鍵は自分で生成し、外部の公的な証明書を作成してもらう方法。<br>この方法は文句なく良い方法です。特にEdge用に専用の証明書を購入した場合は、その証明書をOriginでも使い回しても良いでしょう。ただし、証明書購入のための費用が別途発生するため、CISが用意しているデフォルトのUniversal証明書などを使っている場合には、Originのためだけに証明書を購入しようということにはならないでしょう。

3. CISに証明書もサーバー鍵も作ってもらう方法。<br>証明書はCISのEdgeからアクセスするためのものなので、CISの認証局に署名された証明書を使うというオプションです。これだとCISは信頼された証明書に対してアクセスできることになります。すべてのWebアクセスをCIS経由にするのであれば一般的に問題ありませんが、端末から直接OriginサーバーにHTTPSでアクセスすると、（ブラウザにCISの認証局は登録されていないので）信頼できないという警告がでることになるでしょう。

4. CSRとサーバー鍵は自分で生成し、CISの認証局に証明書を作ってもらう方法。<br>これは上記と同じですが、サーバー鍵はCISに生成してもらう代わりに自分で作ろうというだけです。CSRに対する署名、SANの追記はCISの認証局に実施してもらいます。

#3. CISに証明書もサーバー鍵も作ってもらう方法

Security -> Originから証明書を生成し、この証明書で処理するFQDNのリスト(SANに入るドメインリスト）を入力します。ワイルドカードも利用可能です。Common Name(CN)は、[「イマドキの証明書は全部マルチドメイン証明書」](https://qiita.com/testnin2/items/0fb2211dffae2ffaec7a)で記載したとおり、特に指定しません。
また、（まったく関係ないドメインをCISが署名するのは問題があるので）FQDNのリストには現在利用しているドメイン、もしくはそのサブドメインしか入力できません。

<img width="618" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/43abbe83-66b9-a3a9-f84d-27b37c2853d8.png">

CISによってサーバー鍵と証明書が発行されます。
<img width="614" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/2aee63f0-5ffa-a396-d742-afdb05dfa36b.png">

証明書の中身を見てみましょう。`X509v3 Subject Alternative Name`(SAN)として、ちゃんとFQDNが登録されています。また、証明書のIssuerがCIS(=CloudFlare)であることも確認できます。

```txt:cert.pem
# openssl x509 -text < cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            38:41:e6:c2:6b:92:b3:06:b2:c7:ce:cc:a4:66:24:86:69:f4:1c:51
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=CloudFlare, Inc., OU=CloudFlare Origin SSL Certificate Authority, L=San Francisco, ST=California
        Validity
            Not Before: Mar 17 06:36:00 2020 GMT
            Not After : Mar 14 06:36:00 2035 GMT
        Subject: O=CloudFlare, Inc., OU=CloudFlare Origin CA, CN=CloudFlare Origin Certificate
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:be:3c:dc:73:f2:cb:29:c9:7d:33:bd:9c:44:f5:
                    95:02:2e:47:a6:2f:c1:53:fa:a6:f0:b2:f8:49:f3:
                    12:a3:cc:df:50:a2:d9:19:cf:36:43:dd:70:f9:45:
                    21:53:91:61:e3:0f:d9:e3:79:e7:b1:5d:40:82:b7:
                    f0:20:b0:97:85:46:34:2c:3c:02:c2:2d:7b:2f:4b:
                    06:4d:cc:7b:6e:7c:4a:ad:3e:2a:c8:54:97:69:5d:
                    63:ae:aa:3a:b6:b1:2d:ef:41:11:97:81:d6:34:36:
                    34:9b:d1:85:79:5d:77:ef:98:66:d9:f1:75:75:c0:
                    3d:23:60:b5:c9:ec:d5:7d:bc:f3:7d:19:e1:e6:6a:
                    a0:8c:15:c7:37:a2:ed:f8:24:72:7e:b9:f9:6c:46:
                    ac:18:94:2a:89:93:8e:6e:6c:15:28:23:95:91:57:
                    96:17:da:d6:ca:c3:7b:31:94:58:3f:c2:91:66:73:
                    b7:7c:4d:9c:42:47:2d:ce:ba:a8:a7:99:83:14:9a:
                    70:73:c7:34:ff:e8:c4:54:31:a6:e5:8e:1e:97:b0:
                    73:d1:bb:10:37:5c:cf:55:1b:d8:c1:16:17:99:27:
                    c6:a5:69:d3:a0:bf:b6:9d:71:f6:4f:d2:6a:f6:c9:
                    4f:46:18:f4:2c:82:cf:ed:77:0c:f2:c6:02:7e:9c:
                    bd:4d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier:
                D6:46:80:CF:D9:C6:30:C6:47:A6:D3:1D:5B:CC:68:46:84:BB:A2:AC
            X509v3 Authority Key Identifier:
                keyid:24:E8:53:57:5D:7C:34:40:87:A9:EB:94:DB:BA:E1:16:78:FC:29:A4

            Authority Information Access:
                OCSP - URI:http://ocsp.cloudflare.com/origin_ca

            X509v3 Subject Alternative Name:
                DNS:*.certest.tk, DNS:*.test.certest.tk
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://crl.cloudflare.com/origin_ca.crl

    Signature Algorithm: sha256WithRSAEncryption
         87:e0:76:c4:e7:fa:b8:40:5f:47:3b:cb:12:c1:f2:50:0e:cd:
         c9:b3:43:83:75:38:c2:78:14:b9:10:6b:c8:20:72:b7:c1:56:
         f4:4b:d1:70:9b:e7:f4:aa:d7:8c:c7:44:14:d4:e7:20:d4:6b:
         7e:a8:fc:17:95:5e:ba:33:37:5d:f5:00:07:13:09:23:19:4c:
         fc:56:39:48:7d:32:50:74:4b:79:e5:fb:08:79:11:a2:7c:16:
         22:b5:56:8b:f9:8c:4d:c9:03:65:ef:88:7d:de:47:01:8a:0b:
         05:d6:34:37:24:4d:3d:20:f3:cb:cf:29:37:32:d7:25:2b:2e:
         d4:ac:9e:9a:54:6e:bc:15:45:b3:81:ee:d1:ca:3e:97:4a:2e:
         f4:5a:61:15:8e:45:61:3c:6b:f9:6d:9b:a2:88:1b:86:19:37:
         6a:9e:46:3b:de:87:c1:c8:7b:57:4f:44:2c:41:d1:c3:02:f8:
         59:c2:7b:6b:10:ee:ce:ad:28:37:45:68:db:75:fe:75:32:7f:
         12:90:0b:73:d5:f1:fb:f9:cc:e9:e5:dc:f1:47:0c:96:33:76:
         40:34:62:d3:01:ce:6f:ca:5c:20:44:cd:a6:cb:e0:75:47:66:
         24:53:2e:af:15:db:59:7e:96:30:42:31:2d:23:79:f2:70:0a:
         05:1b:36:f5
-----BEGIN CERTIFICATE-----
MIIEpzCCA4+gAwIBAgIUOEHmwmuSswayx87MpGYkhmn0HFEwDQYJKoZIhvcNAQEL
BQAwgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQw
MgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9y
aXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MB4XDTIwMDMxNzA2MzYwMFoXDTM1MDMxNDA2MzYwMFowYjEZMBcGA1UEChMQQ2xv
dWRGbGFyZSwgSW5jLjEdMBsGA1UECxMUQ2xvdWRGbGFyZSBPcmlnaW4gQ0ExJjAk
BgNVBAMTHUNsb3VkRmxhcmUgT3JpZ2luIENlcnRpZmljYXRlMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjzcc/LLKcl9M72cRPWVAi5Hpi/BU/qm8LL4
SfMSo8zfUKLZGc82Q91w+UUhU5Fh4w/Z43nnsV1AgrfwILCXhUY0LDwCwi17L0sG
Tcx7bnxKrT4qyFSXaV1jrqo6trEt70ERl4HWNDY0m9GFeV1375hm2fF1dcA9I2C1
yezVfbzzfRnh5mqgjBXHN6Lt+CRyfrn5bEasGJQqiZOObmwVKCOVkVeWF9rWysN7
MZRYP8KRZnO3fE2cQkctzrqop5mDFJpwc8c0/+jEVDGm5Y4el7Bz0bsQN1zPVRvY
wRYXmSfGpWnToL+2nXH2T9Jq9slPRhj0LILP7XcM8sYCfpy9TQIDAQABo4IBKTCC
ASUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTWRoDP2cYwxkem0x1bzGhGhLuirDAf
BgNVHSMEGDAWgBQk6FNXXXw0QIep65TbuuEWePwppDBABggrBgEFBQcBAQQ0MDIw
MAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmNsb3VkZmxhcmUuY29tL29yaWdpbl9j
YTAqBgNVHREEIzAhggwqLmNlcnRlc3QudGuCESoudGVzdC5jZXJ0ZXN0LnRrMDgG
A1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2xvdWRmbGFyZS5jb20vb3JpZ2lu
X2NhLmNybDANBgkqhkiG9w0BAQsFAAOCAQEAh+B2xOf6uEBfRzvLEsHyUA7NybND
g3U4wngUuRBryCByt8FW9EvRcJvn9KrXjMdEFNTnINRrfqj8F5VeujM3XfUABxMJ
IxlM/FY5SH0yUHRLeeX7CHkRonwWIrVWi/mMTckDZe+Ifd5HAYoLBdY0NyRNPSDz
y88pNzLXJSsu1KyemlRuvBVFs4Hu0co+l0ou9FphFY5FYTxr+W2boogbhhk3ap5G
O96Hwch7V09ELEHRwwL4WcJ7axDuzq0oN0Vo23X+dTJ/EpALc9Xx+/nM6eXc8UcM
ljN2QDRi0wHOb8pcIETNpsvgdUdmJFMurxXbWX6WMEIxLSN58nAKBRs29Q==
-----END CERTIFICATE-----
```

#4. CSRとサーバー鍵は自分で生成し、CISの認証局に証明書を作ってもらう方法
これも基本的には上記と同じです。証明書を作成するために、CSRとSANに入力するFQDNを入力します。ワイルドカードも利用可能です。
<img width="614" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4a0f64a1-5425-4f8b-f0cc-477822534232.png">