Ubuntu 24.04 Server で OpenVPN のブリッジ接続サーバを導入しネームサーバ・DHCPサーバと同時運用する 1 : Easy-RSA による証明書等の準備

# OpenVPN でVPN環境を構築してみる

自宅のネットワークに外出先からもアクセスしたいときがあります。
実際には、ブロードバンドルータで外部にポートを開放して SSH でアクセスすればだいたい用は足りるのですが、敢えて、VPN環境を構築して完全な形でローカルネットワークの一部を持ち出せるようにできたら面白いと思い、やってみました。

ローカルネットワークには DHCPサーバ と DNSサーバ が稼働しているので、 VPN で接続したホストもこの DHCPサーバ から情報をもらい、この DNSサーバ を利用するようにします。

OpenVPN の tap接続 を使います。
トンネルを通して L2 で接続されるので完全に内部にいるのと区別できなく（TCP/IP 以外のプロトコルすら動作する）なります。（そのためセキュリティ等の面からはむしろあまり推奨されない方法でもあるようです。）

---

以下は作業の記録です。いろいろな要素が絡むことがわかったので、覚書として残します。

---

VPNサーバ を立てようとするホストは次のとおり。

- OS : Ubuntu 24.04 Server
- ホスト名 : `serverhost` とする。
- すでに ISC-DHCP-Server と BIND9 が稼働中。 DHCP と DNS を連携させている。
- IPアドレス : 192.168.0.2/24 （静的設定）
  
VPNクライアント にするホストは次のとおり。

- OS : Ubuntu 22.04
- ホスト名 : `clienthost` とする。

---

記事を3つに分けます。

1. [Easy-RSA による証明書等の準備](https://qiita.com/335mochi/items/ce1cfba3cdf51d5c621c)
1. [サーバの設定](https://qiita.com/335mochi/items/40e931c306ed55c1d3d0)
1. [クライアントの設定](https://qiita.com/335mochi/items/58fa22e9a1109c31b24a)

です。

---


# 1 : Easy-RSA による証明書等の準備

サーバやクライアントの設定に入る前に、事前準備として、各種の証明書や鍵を用意しておかなければなりません。
最初に、その作業を行います。


## 1-1 作業の概要

- OpenVPN は、 **サーバの証明書** と **サーバの秘密鍵** のペアおよび **クライアントの証明書** と **クライアントの秘密鍵** のペアを必要とします。それらを作ります。
- **サーバの証明書** と **クライアントの証明書** を利用するためには、それを発行した **認証局（CA）の証明書** が必要です。それは証明書を発行するために必然的に作りますので、各ホストで使えるように用意します。
- サーバは、 **クライアントの証明書** が何らかの理由ですでに無効にされたものでないかどうかを確認しなければなりません。そのために **証明書失効リスト（CRL）** が必要です。それを用意します。
- OpenVPN は、証明書を使った公開鍵暗号方式で通信を開始し、その通信で最初に共通鍵の受け渡しを行い、その後は、共通鍵暗号方式で通信を行います。そのようにする理由は、共通鍵暗号方式のほうが計算の負荷が小さく高速だからです。このとき、共通鍵そのものを直接渡すのではなく、共通鍵を生成するためのパラメータの一つを受け渡し、別のパラメータと合わせて各ホストでそれぞれ生成する、という、 DH方式 で共通鍵を共有します。その受け渡すパラメータ **DHパラメータ** を作ります。
[参考 : OpenVPNにDH鍵交換方式が必要な理由](https://devillinuxvpn.eksd.jp/appendix_dhkeyexchange.html)
- OpenVPN は、セキュリティ強化のために、 TLS接続 において HMAC認証 を行うことができます。これは、クライアントからのパケットに **TLS認証鍵** による署名（ハッシュ）をつけさせ、通信時に検証することで、サーバと同一の **TLS認証鍵** を持っているクライアントだけを認証する機能です。その **TLS認証鍵** を作ります。
[参考 : How To - #tls-auth](https://www.openvpn.jp/document/how-to/#Security)
[参考 : OpenVPN TLS-Auth とは？](https://yamatamemo.blogspot.com/2014/04/openvpn-tls-auth.html)


整理すると、結局、ここでは以下のものを作ります。

| 必要なもの | ファイル名 | どのホストが持たなければならないか |
|---|---|---|
| サーバの証明書 | serverhost.crt | サーバ |
| サーバの秘密鍵 | serverhost.key | サーバ |
| クライアントの証明書 | clienthost.crt | クライアント |
| クライアントの秘密鍵 | clienthost.key | クライアント |
| CAの証明書 | ca.crt | サーバ・クライアント |
| 証明書失効リスト | crl.pem | サーバ |
| DHパラメータ | dh.pem | サーバ |
| TLS認証鍵 | ta.key | サーバ・クライアント |

以上のうち、 **TLS認証鍵** 以外は、 *OpenSSL* のパッケージに含まれる Easy-RSA というプログラムを使って作ります。したがって、作業はすべて Easy-RSA の操作です。

**TLS認証鍵** は OpenVPN の `openvpn` コマンドで作ります。


## 1-2 必要なパッケージのインストール

以下、サーバのホストで作業をします。

`openvpn` `easy-rsa` `bridge-utils` が必要です。

```bash
user<serverhost~> % sudo -s
root<serverhost~> % apt install openvpn easy-rsa bridge-utils
```


## 1-3 認証局の作成
 
**サーバの証明書** と **クライアントの証明書** を発行する *認証局（CA）* を作ります。


### 1-3-1 準備

###### Easy-RSA の作業ディレクトリを作りそこへ移動

```bash
root<serverhost~> % cd /etc/openvpn/
root<serverhost/etc/openvpn> % cp -R /usr/share/easy-rsa/ .
root<serverhost/etc/openvpn> % cd easy-rsa/
```

###### Easy-RSA （OpenSSL）の基本動作を設定する `openssl.cnf` の用意

`/etc/openvpn/easy-rsa/` にすでに `openssl-easyrsa.cnf` があってそれが役割を果たし、内容についても何も変更する必要がないので、何もする必要はありません。


###### Easy-RSA の変数の設定

Easy-RSA で使う変数の初期値などを、 `vars` というファイルで設定します。


```bash
root<serverhost/etc/openvpn/easy-rsa> % cp vars.example vars
root<serverhost/etc/openvpn/easy-rsa> % vim vars
```

何も設定しなくても問題ないようですが、いちおう、形式的に設定しました。
以下が diff です。左が元のファイル、右が書き換え後。

```diff
101,106c101,106
< #set_var EASYRSA_REQ_COUNTRY	"US"
< #set_var EASYRSA_REQ_PROVINCE	"California"
< #set_var EASYRSA_REQ_CITY	"San Francisco"
< #set_var EASYRSA_REQ_ORG	"Copyleft Certificate Co"
< #set_var EASYRSA_REQ_EMAIL	"me@example.net"
< #set_var EASYRSA_REQ_OU		"My Organizational Unit"
---
> set_var EASYRSA_REQ_COUNTRY	"JP"
> set_var EASYRSA_REQ_PROVINCE	"Tokyo"
> set_var EASYRSA_REQ_CITY	"Chiyoda"
> set_var EASYRSA_REQ_ORG	"My Organization"
> set_var EASYRSA_REQ_EMAIL	"mail@my.domain"
> set_var EASYRSA_REQ_OU		""
```


###### ディレクトリのクリーンアップ

`easyrsa clean-all` で CA が使うディレクトリをクリーンアップします。

```bash
root<serverhost/etc/openvpn/easy-rsa> % easyrsa clean-all

Notice
------
'init-pki' complete; you may now create a CA or requests.

Your newly created PKI dir is:
* /etc/openvpn/easy-rsa/pki

Using Easy-RSA configuration:
* /etc/openvpn/easy-rsa/vars

```


### 1-3-2 認証局の作成

「CA を作る」とは、つまり **CAの証明書** と **CAの秘密鍵** のペアを作ることです。
Easy-RSA では **CAの証明書** は *自己署名証明書* とするので、 **CAの公開鍵** にさらに上位の CA に署名してもらって証明書を発行してもらう、という手順は必要ありません。

`easyrsa build-ca` を使います。
`Enter New CA Key Passphrase:` は、 **CAの秘密鍵** につけるパスフレーズです。
`Common Name (eg: your user, host, or server name) [Easy-RSA CA]:` は、 *CAの名称* です。

```bash
root<serverhost/etc/openvpn/easy-rsa> % easyrsa build-ca
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

Using SSL:
* openssl OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)

Enter New CA Key Passphrase:

Confirm New CA Key Passphrase:
.......+.....+...+.+......+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+.+.....+....+...+..+...................+..+...+.........+.+............+...+.................+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
....+.....+...+...+....+......+.....+....+...+..+.+.....................+......+..+......+.+...+..+...+.......+......+.........+...+...........+..........+..+............+.+......+.........+..+...+.........+...+.........+..........+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+...+........+.........+.+..+.......+..+...+.......+...+...+...+.....+......+.+.................+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+..+...+............+.......+...+..................+.........+...+........+...+.......+..+.+.....+.........+......+............+..........+..+..........+........+.........+..........+.....+.........+.......+.........+...+...+...+...........+.+.........+......+..............+.........+......+.+..+.+..+...............+....+........+.......+........+...........................+................+........+....+.....+..........+..+......+.......+...+..+.+..+...+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:My CA

Notice
------
CA creation complete. Your new CA certificate is at:
* /etc/openvpn/easy-rsa/pki/ca.crt
```

できました。
**CAの証明書** は `ca.crt` （`/etc/openvpn/easy-rsa/pki/ca.crt`）、 **CAの秘密鍵** は `ca.key` （`/etc/openvpn/easy-rsa/pki/private/ca.key`）になります。

**CAの証明書** はサーバ・クライアントともに持つ必要があります。
あとで、サーバ・クライアント両方のホストの適切なディレクトリにコピーします。

**CAの秘密鍵** は CA として証明書を発行するためのもので、 VPNサーバ や VPNクライアント には必要ないものです。
CA から絶対に漏洩してはならないものなので、ディレクトリのパーミッションに注意してそのまま保管します。


## 1-4 サーバ証明書の作成


**サーバの公開鍵** と **サーバの秘密鍵** のペアを作り、 CA が **サーバの公開鍵** に署名をして **サーバの証明書** を発行します。

`easyrsa build-server-full サーバの名称` を使います。
`Enter PEM pass phrase:` は、 **サーバの秘密鍵** につけるパスフレーズです。
`Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:` は、 **サーバの証明書** に署名する **CAの秘密鍵** のパスフレーズです。

```bash
root<serverhost/etc/openvpn/easy-rsa> % easyrsa build-server-full serverhost
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

Using SSL:
* openssl OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
....+.............+......+.....+...+.+.....+......+.+........+......+.+..+.....作る。
.+....+...........+....+..+...+.......+...+..+.........+....+.....+......+.........+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+.+.....+...........................+..........+..+.+........+......+.+..+......+................+...+...+...+.....+......+..........+...+..+...+.......+...+.....+...+.........+...+.......+.....+................+..+...+...+.+...........+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+.....+.........+...+.+.....+....+......+.........+.....+.+.....+.......+..+...+...............+...............+...+....+..+.+.....+.......+.....+......+.....................+....+.....+......+.+........+....+...........+.......+...+...........+.+.....+....+.....+....+..+.......+........+....+...+.................+....+..+...+....+..+......+....+...+...+............+.....+................+.....+........................+......+.......+........+.+........+.......+......+...+.....+....+..+......+.........+....+.....+.......+..+...+...+.+.........+......+.....+....+............+.........+.....+.+............+...+..+..........+.....+.......+......+..+.......+...+...+..+.+.....+...............+.........+.......+...+..+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
......+........+.........+.........+.+...+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+.+......+..+...+...+.......+........+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+........+...+.......+........+....+...+......+.....+......+..........+...........+.............+......+.....+.+...+.....+.+.....+.+............+..+..........+.....+....+...........+.+...+..+.......+...............+.....+...+.......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----

Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/easy-rsa/pki/reqs/serverhost.req
* key: /etc/openvpn/easy-rsa/pki/private/serverhost.key 

You are about to sign the following certificate:
Request subject, to be signed as a server certificate 
for '825' days:

subject=
    commonName                = serverhost

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Using configuration from /etc/openvpn/easy-rsa/pki/openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'serverhost'
Certificate is to be certified until Jun 28 02:58:16 2027 GMT (825 days)

Write out database with 1 new entries
Database updated

Notice
------
Certificate created at:
* /etc/openvpn/easy-rsa/pki/issued/serverhost.crt

Notice
------
Inline file created:
* /etc/openvpn/easy-rsa/pki/inline/serverhost.inline
```

できました。
**サーバの証明書** は `serverhost.crt` （`/etc/openvpn/easy-rsa/pki/issued/serverhost.crt`）、 **サーバの秘密鍵** は `serverhost.key` （`/etc/openvpn/easy-rsa/pki/private/serverhost.key`）になります。

**サーバの証明書** と **サーバの秘密鍵** はサーバが持つ必要があります。
あとで、サーバのホストの適切なディレクトリにコピーします。


## 1-5 DHパラメータの作成


**DHパラメータ** を作ります。

`easyrsa gen-dh` を使います。

```bash
root<serverhost/etc/openvpn> % cd easy-rsa/
root<serverhost/etc/openvpn/easy-rsa> % easyrsa gen-dh
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

Using SSL:
* openssl OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
Generating DH parameters, 2048 bit long safe prime
............................+.....................................................................................................................+...................................................+..........................................+.......................................................................................................................................................+.................................................................+................+....................................................................................................................................+.....................................................................................................................................................................................................................................................................................................................................+...........................................................................................................+.......+................................................................................+...................................+...........................................................................................................................+......................................................................................................+..............................................................................................................................+............+.....................................................................................+.....................+..........................................................................................................................................................................................................................................................................................+......................+..+......................................+..................+...........................................................................................+.....................................................................................................................................................................................+.....................................................................................+....................................................................................................................................+.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................+...............................................................................................................................................................................................................+....................................................................+................................+...........+.....................................+.........+............................+..................................................+...................................................................................................................................................................................................................................................+.+............+...................................+.............................................................................+.......................................................................................+...............+...............................................................................................................................................................................................................................................................................................................................................................................................................................+............................................................................................+..............................................................................................................++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*
DH parameters appear to be ok.

Notice
------

DH parameters of size 2048 created at:
* /etc/openvpn/easy-rsa/pki/dh.pem
```

できました。
`dh.pem` （`/etc/openvpn/easy-rsa/pki/dh.pem`）になります。

**DHパラメータ** はサーバが使います。
あとで、サーバのホストの適切なディレクトリにコピーします。


## 1-6 証明書失効リストの作成


**証明書失効リスト（CRL）** を作ります。

**CRL** を作成するために、 **ダミーの証明書** `dummy.crt` を発行し直ちに失効させるという方法を使います。


###### ダミーの証明書を作る

`easyrsa build-client-full dummy` を使います。

```bash
root<serverhost/etc/openvpn> % cd easy-rsa/
root<serverhost/etc/openvpn/easy-rsa> % easyrsa build-client-full dummy
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

Using SSL:
* openssl OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
....+...+.....+.+...........+....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+.+.....+...+.+............+............+...+............+..+..........+...+.....+......+.+...+........+............+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
...+...+.....+.+.....+.+............+............+.....+.+..............+.+...+..+.......+..+...+.+.....+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+...+....+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..........+.........+.....+...+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----

Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/easy-rsa/pki/reqs/dummy.req
* key: /etc/openvpn/easy-rsa/pki/private/dummy.key 

You are about to sign the following certificate:
Request subject, to be signed as a client certificate 
for '825' days:

subject=
    commonName                = dummy

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes               

Using configuration from /etc/openvpn/easy-rsa/pki/openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'dummy'
Certificate is to be certified until Jun 28 03:08:37 2027 GMT (825 days)

Write out database with 1 new entries
Database updated

Notice
------
Certificate created at:
* /etc/openvpn/easy-rsa/pki/issued/dummy.crt

Notice
------
Inline file created:
* /etc/openvpn/easy-rsa/pki/inline/dummy.inline
```


###### ダミーの証明書を失効させる

`easyrsa revoke dummy` を使います。

```bash
root<serverhost/etc/openvpn/easy-rsa> % easyrsa revoke dummy
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

Using SSL:
* openssl OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)

WARNING
=======
This process is destructive!

These files will be MOVED to the 'revoked' sub-directory:
* /etc/openvpn/easy-rsa/pki/issued/dummy.crt
* /etc/openvpn/easy-rsa/pki/private/dummy.key
* /etc/openvpn/easy-rsa/pki/reqs/dummy.req

These files will be DELETED:
All PKCS files for commonName : dummy

The inline credentials files:
* /etc/openvpn/easy-rsa/pki/dummy.creds
* /etc/openvpn/easy-rsa/pki/inline/dummy.inline

The duplicate certificate:
* /etc/openvpn/easy-rsa/pki/certs_by_serial/8D169CCABF31A0099BBDF29E1DB74FC2.pem

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

  subject=
    commonName                = dummy

  serial-number: 8D169CCABF31A0099BBDF29E1DB74FC2

  Reason: None given

Type the word 'yes' to continue, or any other input to abort.
    Continue with revocation: yes

Using configuration from /etc/openvpn/easy-rsa/pki/openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Revoking Certificate 8D169CCABF31A0099BBDF29E1DB74FC2.
Database updated

Notice
------
                    * IMPORTANT *

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


###### CRLのファイルを生成する

`easyrsa gen-crl` を使います。

```
root<serverhost/etc/openvpn/easy-rsa> % easyrsa gen-crl
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

Using SSL:
* openssl OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
Using configuration from /etc/openvpn/easy-rsa/pki/openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:

Notice
------
An updated CRL has been created:
* /etc/openvpn/easy-rsa/pki/crl.pem
```

できました。
`crl.pem` （`/etc/openvpn/easy-rsa/pki/crl.pem`）になります。

**CRL** はサーバが持ちます。
あとで、サーバのホストの適切なディレクトリにコピーします。

**CRL** は、今後、何らかの証明書が失効するたびに作り直して OpenVPNサーバ に渡さなければなりません。

 
## 1-7 クライアント証明書の作成

**クライアントの公開鍵** と **クライアントの秘密鍵** のペアを作り、 CA が **クライアントの公開鍵** に署名をして **クライアントの証明書** を発行します。

`easyrsa build-client-full クライアントの名称` を使います。
`Enter PEM pass phrase:` は、 **クライアントの秘密鍵** につけるパスフレーズです。
`Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:` は、 **クライアントの公開鍵** に署名する **CAの秘密鍵** のパスフレーズです。

```bash
root<serverhost/etc/openvpn> % cd easy-rsa/
root<serverhost/etc/openvpn/easy-rsa> % easyrsa build-client-full clienthost
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

Using SSL:
* openssl OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
.+.....+.+......+..+...+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*....+....+.....+............+....+......+.....+.+..+...+...+..........+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.......+.....+...+.......+...............+.....+...+...+....+...+......+.....+.........+...+.............+..............+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.+....+...+..+....+..+...+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.........+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.......+........+.......+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----

Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/easy-rsa/pki/reqs/clienthost.req
* key: /etc/openvpn/easy-rsa/pki/private/clienthost.key 

You are about to sign the following certificate:
Request subject, to be signed as a client certificate 
for '825' days:

subject=
    commonName                = clienthost

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Using configuration from /etc/openvpn/easy-rsa/pki/openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'clienthost'
Certificate is to be certified until Jun 28 03:33:35 2027 GMT (825 days)

Write out database with 1 new entries
Database updated

Notice
------
Certificate created at:
* /etc/openvpn/easy-rsa/pki/issued/clienthost.crt

Notice
------
Inline file created:
* /etc/openvpn/easy-rsa/pki/inline/clienthost.inline
```

できました。
**クライアントの証明書** は `clienthost.crt` （`/etc/openvpn/easy-rsa/pki/issued/clienthost.crt`）、 **クライアントの秘密鍵** は `clienthost.key` （`/etc/openvpn/easy-rsa/pki/private/clienthost.key`）になります。

**クライアントの証明書** と **クライアントの秘密鍵** はクライアントが持つ必要があります。
あとで、クライアントのホストの適切なディレクトリにコピーします。


## 1-8 TLS認証鍵の作成

**TLS認証鍵** を作ります。

これは Easy-RSA と無関係です。
サーバのホストで作業し、 `/etc/openvpn/` に、直接、作ります。

`openvpn` コマンドで行います。具体的には、 `openvpn --genkey secret 生成した鍵を格納するファイル名` とします。

```bash
root<serverhost/etc/openvpn/easy-rsa> % cd ..
root<serverhost/etc/openvpn> % openvpn --genkey secret /etc/openvpn/ta.key
```

`ta.key` （`/etc/openvpn/ta.key`）になります。

**TLS認証鍵** は漏洩してはならないものですから、パーミッションに注意します。

オーナー は root:root にし、 パーミッション は 600 にしました。


---


次の記事はこちら → [2 : サーバの設定](https://qiita.com/335mochi/items/40e931c306ed55c1d3d0)

https://qiita.com/335mochi/items/40e931c306ed55c1d3d0


次の次の記事はこちら → [3 : クライアントの設定](https://qiita.com/335mochi/items/58fa22e9a1109c31b24a)

https://qiita.com/335mochi/items/58fa22e9a1109c31b24a