IBM Cloud: Client VPN for VPCにおいて特定ユーザーのクライアント証明書を失効させる方法

#1. はじめに
Client VPN for VPCの概要や接続方法については、[こちらの記事](https://qiita.com/y_tama/items/16987e07842262cd9068)が参考になる。本稿では、落ち葉拾い的に、特定ユーザーのクライアント証明書を失効させる方法について紹介したいと思う。

#2. なぜクライアント証明書を失効させる必要があるか？

クライアント証明書は、一般的に複数のユーザーに配布する。そのため、ユーザーが

- クライアント証明書を紛失した
- クライアント証明書が導入された端末が盗難にあった
- プロジェクトから抜けた、退職した

などの時に、第三者が悪意を持ってアクセスしてくるのを防ぐために、VPNサーバー管理者としては配布済みクライアント証明書が今後確実に利用できないように失効させる必要がある。

#3. 設定方法

クライアント証明書の作成方法および接続方法の詳細は、[こちらの記事](https://qiita.com/y_tama/items/16987e07842262cd9068)を参照。今回は以下のように、CN(Common Name)が`Taro-Yamada`および`Hanako-Yamamoto`というクライアント証明書を作成し、どちらも正しく接続できている状態にすでになっているとする。

```
syasuda@MacBook-Pro easyrsa3 % ./easyrsa build-client-full "Taro-Yamada" nopass
syasuda@MacBook-Pro easyrsa3 % ./easyrsa build-client-full "Hanako-Yamamoto" nopass
```

今回は、"Taro-Yamada"のクライアント証明書を失効させてみる。まず、"Taro-Yamada"の証明書を確認すると、以下のシリアル番号が割り振られていることがわかる。

```
syasuda@MacBook-Pro easyrsa3 % ./easyrsa show-cert "Taro-Yamada" | grep Serial -A 1
        Serial Number:
            2d:8c:51:27:90:a3:66:c0:d6:08:6c:3f:ad:05:d0:30

syasuda@MacBook-Pro easyrsa3 % openssl x509 -noout -text -in pki/issued/Taro-Yamada.crt | grep Serial -A 1
        Serial Number:
            2d:8c:51:27:90:a3:66:c0:d6:08:6c:3f:ad:05:d0:30

```

次に、クライアント証明書を失効させて、CRL(Certificate Revocation List:クライアント証明書失効リスト）を作成する。


```txt:証明書を失効させる
syasuda@MacBook-Pro easyrsa3 % ./easyrsa revoke "Taro-Yamada"
Using SSL: openssl LibreSSL 2.8.3


Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = Taro-Yamada


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes
Using configuration from /Users/syasuda/easy-rsa/easyrsa3/pki/easy-rsa-87856.y9Vb0G/tmp.nJr17Z
Revoking Certificate 2D8C512790A366C0D6086C3FAD05D030.
Data Base Updated

IMPORTANT!!!

Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.

```

```txt:既存の失効情報を元にCRLを作成する
syasuda@MacBook-Pro easyrsa3 % ./easyrsa gen-crl
Using SSL: openssl LibreSSL 2.8.3
Using configuration from /Users/syasuda/easy-rsa/easyrsa3/pki/easy-rsa-87906.wLKFH9/tmp.0YPzbr

An updated CRL has been created.
CRL file: /Users/syasuda/easy-rsa/easyrsa3/pki/crl.pem
```

このCRL情報を実際に表示させると、`Revoked Certificates`に"Taro-Yamada"のクライアント証明書のシリアル番号が列挙されていることがわかる。

```
syasuda@MacBook-Pro easyrsa3 % openssl crl -inform pem -in pki/crl.pem -text
Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /CN=syasuda-ca
        Last Update: Sep  1 00:31:35 2021 GMT
        Next Update: Feb 28 00:31:35 2022 GMT
        CRL extensions:
            X509v3 Authority Key Identifier:
                keyid:93:9C:92:4C:E2:31:F6:6E:99:8D:8A:24:07:92:B6:2B:E0:0E:3A:CC
                DirName:/CN=syasuda-ca
                serial:B2:4E:37:F5:80:CC:8D:FD

Revoked Certificates:
    Serial Number: 2D8C512790A366C0D6086C3FAD05D030
        Revocation Date: Sep  1 00:30:52 2021 GMT
    Signature Algorithm: sha256WithRSAEncryption
         c2:f3:11:23:18:71:96:96:c2:b3:81:0a:42:7a:d6:5f:e4:44:
         40:33:bd:79:7b:ac:b3:f3:b7:42:cb:2b:2a:8d:63:f1:13:c1:
         1c:1e:7c:6e:43:f2:53:b1:fb:6c:a3:1f:f4:63:18:6a:39:12:
         82:88:e5:3f:bb:c9:65:10:7f:33:f2:35:b1:3d:46:3f:6b:d3:
         09:f6:fb:f8:0e:ea:30:ce:4a:6d:eb:83:44:62:74:7f:70:b9:
         34:dd:a5:6b:64:41:62:d2:83:98:52:ee:e9:ad:87:5e:0c:f3:
         a5:fd:5c:e2:e1:61:e9:fb:32:25:b7:5a:0a:ef:7f:ee:62:53:
         3d:68:ef:d0:23:9c:ae:6b:32:55:40:d5:fa:ff:cb:6f:84:a9:
         64:e0:02:ea:12:a3:17:7b:03:92:ca:d0:0e:07:ad:ca:15:a7:
         78:34:7d:e8:2c:74:c1:98:c1:32:bb:30:2f:a9:3c:a0:70:aa:
         cc:b4:91:70:a8:fb:58:d0:3c:68:52:65:5e:d9:7b:ca:42:89:
         10:dd:b3:ef:a9:b7:2c:47:ba:fa:d2:de:5b:a6:57:bf:50:55:
         7a:0b:d2:b1:1c:82:96:88:46:73:c6:c5:24:8b:70:6f:7b:6d:
         70:d0:f6:dd:90:a0:c5:75:2a:d9:df:d9:94:66:58:73:47:e7:
         39:63:39:d8
-----BEGIN X509 CRL-----
MIIBzjCBtwIBATANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApzeWFzdWRhLWNh
Fw0yMTA5MDEwMDMxMzVaFw0yMjAyMjgwMDMxMzVaMCMwIQIQLYxRJ5CjZsDWCGw/
rQXQMBcNMjEwOTAxMDAzMDUyWqBJMEcwRQYDVR0jBD4wPIAUk5ySTOIx9m6ZjYok
B5K2K+AOOsyhGaQXMBUxEzARBgNVBAMMCnN5YXN1ZGEtY2GCCQCyTjf1gMyN/TAN
BgkqhkiG9w0BAQsFAAOCAQEAwvMRIxhxlpbCs4EKQnrWX+REQDO9eXuss/O3Qssr
Ko1j8RPBHB58bkPyU7H7bKMf9GMYajkSgojlP7vJZRB/M/I1sT1GP2vTCfb7+A7q
MM5KbeuDRGJ0f3C5NN2la2RBYtKDmFLu6a2HXgzzpf1c4uFh6fsyJbdaCu9/7mJT
PWjv0COcrmsyVUDV+v/Lb4SpZOAC6hKjF3sDksrQDgetyhWneDR96Cx0wZjBMrsw
L6k8oHCqzLSRcKj7WNA8aFJlXtl7ykKJEN2z76m3LEe6+tLeW6ZXv1BVegvSsRyC
lohGc8bFJItwb3ttcND23ZCgxXUq2d/ZlGZYc0fnOWM52A==
-----END X509 CRL-----
```

このCRL(`crl.pem`)をVPN Gatewayにアップロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/bdbf64bd-3ad3-2474-947b-71ee76dc14ef.png)


#4. テスト

- "Hanako-Yamamoto"のクライアント証明書では繋がるが、"Taro-Yamada"のクライアント証明書では繋がらなくなることを確認。
- CRLをVPN Gatewayから削除すると、"Taro-Yamada"のクライアント証明書でも再度接続できることを確認。