CentOSでOpenVPN (1)

社外から社内のネットワークにつなぎたいって人がたくさんいるので環境を提供する。
実はすでにこの環境はあったりするんですが、お古のノートPCで動いていて、先日再起動したときにファンが回っていないことが発覚してしまったわけでして、早いうちに別環境に移してあげないといけないねっ。ということでついでに記録も残しておきます。

はじめに

やること

証明書の作成とOpenVPNをルーティングモードで設定する
※めんどくさいので証明書の有効期限は10年にする

環境

バージョン:CentOS 5.5 (VMWare ESXiのゲスト)
ルータ:192.168.0.1
VPNサーバ:192.168.0.31(secure.mydomain.co.jp)

証明書を作る

通常SSL証明書ベリサインとかちゃんとしたところに認証してもらわないとだめなんですが、今回はクローズドなネットワークなので自分で証明書を作って、自分で認証します。

オレオレ認証局の証明書と秘密鍵を作る

opensslがインストールされていれば、それっぽいディレクトリが用意されているので、そこに移動してコマンドを一発たたく。すると国はどこ?都市はどこ?など根掘り葉掘り効いてくるので正直に答えてあげてください。最後の-days 3650は有効期限10年の意味。

cd /etc/pki/CA
openssl req -new -x509 -newkey rsa:1024 -keyout private/ca.key -out ca.crt -days 3650
サーバの秘密鍵(server.key)を作る

これまたそれっぽいディレクトリが用意されているので、さっきと同じようにする。今回は質問攻めじゃなくてパスワードを設定するだけ。
OPENVPNを起動したときに、ここで設定したパスワードが毎回聞かれるようになってしまうので、それをしなくていいように作り直す作業もする(3行目)

cd /etc/pki/tls
openssl genrsa -des3 -out private/server.key 1024
openssl rsa -in private/server.key -out private/server.key
chmod 0400 private/server.key
認証局への署名申請:CSR(server.req)を作成する

さっき作ったサーバの秘密鍵をもとに認証局への署名申請ファイルを作ります。通常はこれをベリサインとかに出せば署名付き証明書を作成してくれるというわけ。

cd /etc/pki/tls
openssl req -new -days 3650 -key private/server.key -out private/server.req
オレオレ認証局で署名する

さっき作ったserver.reqに署名します。

cd /etc/pki/CA/private
openssl ca -in /etc/pki/tls/private/server.req -keyfile ca.key -cert ../ca.crt -out /etc/pki/tls/server.crt
Diffie Hellman (DH) 鍵共有パラメータ生成(dh1024.pem)

OPENVPNで必要なので作っとく

openssl dhparam -out /etc/pki/tls/dh1024.pem 1024
こんな感じになっているはず
etc/
 +--pki/
     +--CA/
     |   +--ca.crt (オレオレ認証局証明書)
     |   +--private/
     |       +--ca.key (オレオレ認証局秘密鍵)
     +--tls/
         +--server.crt (署名済サーバ証明書)
         +--dh1024.pem
         +--private/
             +--server.key (サーバ秘密鍵)
             +--server.req (サーバ署名申請書)

つづく。