はじめに
図解!UbuntuでOpenVPNを使う:1. 準備の続きです.認証局と認証鍵の作成をしていきます^^
図解!UbuntuでOpenVPNを使う:目次
- 準備
- VPNの接続方式
-
OpenVPN
のインストール - ファイアウォール設定
- VPNサーバ側のルータのグローバルIP確認
- ルータからVPNサーバへのポートフォワード設定
- 証明書と認証鍵の作成 ← イマココ
- 簡易認証局(
easy-rsa
)関連 - VPNサーバ関連
- VPNクライアント関連
- 設定
-
OpenVPN
サーバ設定 -
OpenVPN
クライアント設定 - 接続確認
-
OpenVPN
の起動 - 仮想
tun
デバイスの確認 -
ping
確認 -
netcat
確認
環境
- VPNサーバ/クライアント共に Ubuntu 14.04
- VPNアプリケーション:OpenVPN 2.3.2
証明書と認証鍵の作成
VPN
を使うには,セキュリティを担保するためにいくつかの証明書と認証鍵が必要となります.
一気通貫でイメージするなら,下図が大変参考になります.
各鍵と証明書がどのように処理されるのかについての説明は上記サイトに譲り,本エントリではOpenVPN
のセッテイングに必要な処理と出力されるファイルに着目して話を進めていきます.なお,ここでの設定ではTLS認証鍵は使用しません.
ここでの手順は下記の通りです.これらの作業は全て***「VPNサーバ」***で実施します.
- 簡易認証局(
easy-rsa
)関連 - 簡易認証局(
easy-rsa
)の作成 -
easy-rsa
の環境変数の設定 - 認証局証明書/認証鍵の作成
- VPNサーバ関連
- DHパラメータの作成
- VPNサーバ証明書/認証鍵の作成
- VPNサーバ証明書/認証鍵の移動
- VPNクライアント関連
- VPNクライアント証明書/認証鍵の作成
- VPNクライアント証明書/認証鍵の移動
順番に見て行きましょう.
以降の作業では/etc/openvpn/
で作業するので,基本的に管理者権限が必要です.いちいちsudo
するのが面倒なら,下記のコマンドをしておくと便利です.ただし,作業には注意してください.
$ sudo -i
簡易認証局(easy-rsa
)関連
簡易認証局(easy-rsa
)を作成する
$ make-cadir /etc/openvpn/easy-rsa
$ cd /etc/openvpn/easy-rsa
これで簡易認証局が出来ました.
easy-rsa
の環境変数の設定
認証局に関する情報を入力します.基本的にはデフォルト設定で動くはずです.任意に設定して下さい.
設定ファイルを開きます.
$ vim ./vars
export EASY_RSA="`pwd`" # 作業ディレクトリ
export KEY_DIR="$EASY_RSA/keys" # 証明書の出力先
export KEY_SIZE=2048 # 暗号化キーサイズ
export KEY_COUNTRY="JP" # 国
export KEY_PROVINCE="Fukuoka" # 都道府県
export KEY_CITY="Kitakyusyu" # 市区町村
export KEY_ORG="Kyutech" # 組織
export KEY_EMAIL="hogehoge@mail.kyutech.jp" # メールアドレス
export KEY_OU="Nishida-Lab" # 組織単位
編集した設定を読み込みます.
$ source ./vars
認証局証明書/認証鍵の作成
$ ./pkitool --initca
Using CA Common Name: Kyutech CA
Generating a 2048 bit RSA private key
..............................................................+++
........................................+++
writing new private key to 'ca.key'
-----
これにより,ファイル所有者の関係は下図のような状態となります.
大事な出力ファイルは下記の2つです.
-
ca.crt
:認証局証明書 - 概要:VPNサーバ/クライアントが不審者ではないことを確認するための証明書.
- 所有者:VPNサーバ/クライアント
- 秘密の有無:有
-
ca.key
:認証局秘密鍵- 概要:VPNサーバ/クライアントの証明書を発行するための鍵.
- 所有者:認証局
- 秘密の有無:有
これで認証局の準備は完了です.
VPNサーバ関連
DHパラメータの作成
暗号化に必要な乱数パラ江メータを作成します.考案者のDiffie Hellmanにちなみ,DHパラメータと呼ぶようです.
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...........................................................................+..
以下しばらーく続く
ファイル所有者の関係図です.
ここで生成されるファイルは以下の通りです.
-
dh2048.pem
:DHパラメータ- 概要:鍵交換時に暗号化用乱数を生成するためのパラメータ.
- 所有者:VPNサーバ
- 秘密の有無:無
デフォルトの2048bitだと,少し時間がかかります.ひとまずデモで動かすだけなら,1024bitでも良いと思います.
VPNサーバ証明書/認証鍵の作成
ここでは,名前を指定してVPNサーバになりたいと,認証局にお伺いを立てに行きます.晴れて信頼できると判断されれば,サーバ用の証明証と認証鍵をゲットできるというわけです.
ここではeasy-rsa
を使っているので,名前さえ書けば通ってしまう出来レースが展開されるのですが笑.
本来認証局は第三者になるべきですよね.でも,今は個人利用の範囲なので,サーバ候補のPC内に認証局を立てて,認証のフローを模擬していることになります.
さて,VPNサーバ名をmysrv
とします.
$ ./pkitool --server mysrv
ここで重要となるファイルは下記の2つです.
-
mysrv.crt
:VPNサーバ証明書- 概要:VPNサーバが不審者ではないことを裏付ける証明書.VPNクライアント側で先の
ca.crt
と照合して信頼性を確認する. - 所有者:VPNサーバ
- 秘密の有無:無
- 概要:VPNサーバが不審者ではないことを裏付ける証明書.VPNクライアント側で先の
-
mysrv.key
:サVPNーバ秘密鍵- 概要:VPNサーバ用共通鍵を作成するための鍵.
- 所有者:VPNサーバ
- 秘密の有無:有
まだ認証局がVPNサーバ用の証明書と鍵を持っています.役所に行って申請手続きをしたような状態です.
サーバ証明書/認証鍵の移動
これらのファイルは全て,認証局用のディレクトリである/etc/openvpn/easy-rsa/keys
に存在します.
今回はVPNサーバが作業するためのディレクトリとして/etc/openvpn/
を採用するので,こちらにコピーします.VPNサーバ君は証明書完成の連絡を受け,役所にそれを取りに行く、そんなイメージですね.
コピー対象のファイルは下記の通りです.
-
ca.crt
:認証局証明書 -
mysrv.crt
:VPNサーバ証明書 -
mysrv.key
:VPNサーバ秘密鍵 -
dh2048.pem
:DHパラメータ
コピーコマンドです.
$ cp ca.crt server.crt server.key dh2048.pem /etc/openvpn
こんな形になります.
VPNクライアント関連
今度はクライアント側の証明書と鍵を取得します.後日VPNサーバが認証局に行き,VPNクライアント増やしたいんですが,と手続きに行く形です.
VPNクライアント証明書/認証鍵の作成
VPNクライアント名をmycli
とします.
$ cd /etc/openvpn/easy-rsa
$ source ./vars
$ ./pkitool mycli
ここで,特にサーバ側の証明書と認証鍵を要求されないようでした.クライアントファイル下さい!と第三者が申請しても作れてしまうようです.本来なら,サーバ証明書を先に提示して不審者でないことを確認してから,クライアントの証明書を発行するべきプロセスだと思います.
まぁ,easy-rsa
だから簡易に設定できる方が良いと思いますので,先に進みます.
ここで重要となるファイルは下記の2つです.
-
mycli.crt
:VPNクライアント証明書- 概要:VPNクライアントが不審者ではないことを裏付ける証明書.サーバ側で先の
ca.crt
と照合して信頼性を確認する. - 所有者:VPNクライアント
- 秘密の有無:無
- 概要:VPNクライアントが不審者ではないことを裏付ける証明書.サーバ側で先の
-
mycli.key
:VPNクライアント秘密鍵- 概要:VPNクライアント用共通鍵を作成するための鍵.
- 所有者:VPNクライアント
- 秘密の有無:有
VPNクライアント証明書/認証鍵の移動
下記のファイルをUSB等でコピーして下さい.秘密ファイルについては取り扱いに注意が必要です.
-
ca.crt
:認証局証明書 -
mycli.crt
:VPNクライアント証明書 -
mycli.key
:VPNクライアント秘密鍵
クライアントでのコピー先はおなじみの/etc/openvpn/
で良いです.
ここまで来れば,以後認証局easy-rsa
は不要です.直接VPNサーバ/クライアント間で通信をすることとなります.
おわりに
ここまでで,VPN接続に最低限必要な証明書,認証鍵ファイルの作成が完了しました,
ここがOpenVPN
の一連の作業の中でも,初見で地味に紛らわしい部分かと思います^^;
次回は図解!UbuntuでOpenVPNを使う:3. 設定で実際につなぐための設定をしていきます.