はじめに
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: