BLOGTIMES
2013/01/28

証明書の CN によって OpevVPN の接続を制限する

  openvpn 
このエントリーをはてなブックマークに追加

OpenVPN に接続できるクライアントを CN によって制限する方法を調べたのでメモ。

CRL を使う

正道と思われるのは X.509 で定められている証明書失効リスト (CRL) を使う方法でしょう。CRL に載っている証明書はもはや有効な証明書ではないので、そのような CN の証明書からは接続ができなくなります。具体的な OpenVPN の設定としては server.conf に下記のような記述を追加すれば OK です。

crl-verify crl.pem

client-config-dir / ccd-exclusive の合わせ技

上記の構成はCA 1つ OpenVPN サーバ1つの構成であれば PKI の本筋とも言える使い方ですが、CA が1つで OpenVPN サーバが複数台あると少し状況が変わってきます。つまり、証明書が有効でもログインさせたくないという場合が出てくるということです。このような場合には client-config-dir / ccd-exclusive を組み合わせて使うと、ホワイトリスト形式で接続を許可する CN を指定できます。ちなみに client-config-dir はクライアント(CNで識別)ごとに異なる設定ファイルを読み込ませるための仕組みであり、ccd-exclusive はそのようなファイルが無い場合に接続を拒否するという仕組みです。

具体的には server.conf に下記のような記述を追加します。

client-config-dir ccd ccd-exclusive

server.conf が例えば /etc/openvpn/conf/server.conf にある場合には、接続を許可したいクライアントの CN 名で /etc/openvpn/conf/ccd/(CN名) という空ファイルを作成しておけば、ファイルがあるユーザーのみログインできるようになります。

ovpnCNcheck スクリプトを使う

もっと柔軟に制御したいという場合には tls-verify というオプションを使って、スクリプトで CN を検証するという方法もあるようです。
下記の ovpnCNcheck を使う、もしくはこれをベースに自分でスクリプトを書くと良さそうです。

ovpnCNcheck — an OpenVPN tls-verify script | Robert Penz Blog
I’ve therefore written two scripts with solve this problem. These scripts check if the peer is in the allowed user list by checking the CN (common name) of the X.509 certificate against a provided text file. For example in OpenVPN, you could use the directive:

tls-verify "/usr/local/sbin/ovpnCNcheck.py /etc/openvpn/userlist.txt"

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5534
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン