はじめに
OpenVPNのために、久しぶりにeasy-rsaでクライアント証明書を作成しようとしたら、次のエラーが出ました。
# ./easyrsa --ns-cert=YES build-client-full hoge.fuga nopass
Easy-RSA error:
EASYRSA_PKI does not exist (perhaps you need to run init-pki)?
Expected to find the EASYRSA_PKI at: /usr/share/easy-rsa/3/pki
Run easyrsa without commands for usage and command help.
このメッセージが表示される理由は、/usr/share/easy-rsa/3/pki
ディレクトリ(シンボリックリンクを含む)が存在しないことが原因です。実際にlsしてみると、pkiディレクトリが無いことがわかります。
# ls -la
合計 56
drwxr-xr-x 3 root root 77 10月 15 10:37 .
drwxr-xr-x 5 root root 63 8月 31 09:22 ..
-rwxr-xr-x 1 root root 48730 2月 2 2019 easyrsa
-rw-r--r-- 1 root root 4651 2月 2 2019 openssl-easyrsa.cnf
drwxr-xr-x 2 root root 98 8月 31 09:22 x509-types
しかし、これまでOpenVPNを運用していた場合、pkiディレクトリが無いということはありえません(どこかにあります)。したがって、復旧することは可能ですので、焦る必要はありません。とりあえず復旧を進めることにします。
※ 間違ってもeasyrsa init-pki
はしないように!! pkiディレクトリが存在しない状態では無害&pkiディレクトリが存在している状態で間違って実行してもWARNINGが出ますので、そこで踏みとどまれば実害ありませんが、それを無視して実行すると、pkiディレクトリの内容(これまで発行した証明書等)が初期化されます。
手順
1.pkiディレクトリをバックアップする
pkiディレクトリは、/etc/openvpn/pki
に存在するものとします。
# cd /etc/openvpn/pki
# cp -Rfp pki pki.bak
2.以下のディレクトリへ移動する
なお、以後の手順では、特記無い限り、同じディレクトリで作業を進めることとします。
# cd /usr/share/easy-rsa/3/
3.pkiディレクトリへのシンボリックリンクを作成する
CentOS7の場合、easy-rsaがバージョンアップされると、/usr/share/easy-rsa/
以下に新たなバージョン用のディレクトリが作成されます。
# ls -la
合計 4
drwxr-xr-x 5 root root 63 8月 31 09:22 .
drwxr-xr-x. 98 root root 4096 9月 19 05:09 ..
drwxr-xr-x 3 root root 83 1月 26 2018 2.0
lrwxrwxrwx 1 root root 5 8月 31 09:22 3 -> 3.0.6
lrwxrwxrwx 1 root root 5 8月 31 09:22 3.0 -> 3.0.6
drwxr-xr-x 3 root root 29 8月 31 09:22 3.0.3
drwxr-xr-x 3 root root 77 10月 15 10:37 3.0.6
しかし、旧バージョンのディレクトリ上に作成されたファイルやディレクトリ、シンボリックリンクは引き継がれません。
私の場合は、/etc/openvpn/pkiへのシンボリックリンクを作成していましたので、新しいディレクトリへシンボリックリンクを作成しました。
# ln -s /etc/openvpn/pki
4. openssl-easyrsa.cnfをpkiディレクトリへコピーする
# cp -p /usr/share/easy-rsa/3/openvpn-easyrsa.cnf .
5. pkiディレクトリ以下にディレクトリを作成する
revokedディレクトリを作成し、その階層下にcerts_by_serial, private_by_serial, reqs_by_serial ディレクトリを作成します。また、revokedと同じ構成のディレクトリとして、renewedディレクトリを作成します。
# mkdir revoked
# chmod 700 revoked
# cd revoked
# mkdir certs_by_serial
# mkdir private_by_serial
# mkdir reqs_by_serial
# chmod 700 *
# cd ..
# cp -Rp revoked renewed
6.easy-rsa build-client-fullを実行する
/usr/share/easyrsa/3
ディレクトリへ移動し、easyrsa build-client-full
を実行すると、以下のようにエラーなく進むようになります。以後は、
./easyrsa --ns-cert=YES build-client-full hoge.fuga nopass
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 2048 bit RSA private key
...............................................................................
.....
writing new private key to '/usr/share/easy-rsa/3/pki/private/hoge.fuga.key.xxxxxxx'
-----
Using configuration from /usr/share/easy-rsa/3/pki/safessl-easyrsa.cnf
Enter pass phrase for /usr/share/easy-rsa/3/pki/private/ca.key: