tabimoba.net

とあるエンジニアの雑記帳

CentOS7のeasy-rsaが3.0.6にバージョンアップされてからbuild-client-fullができなくなった場合の対応方法

はじめに

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:

参考