- blogs:
- cles::blog

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

OpenVPN に接続できるクライアントを CN によって制限する方法を調べたのでメモ。
† CRL を使う
正道と思われるのは X.509 で定められている証明書失効リスト (CRL) を使う方法でしょう。CRL に載っている証明書はもはや有効な証明書ではないので、そのような CN の証明書からは接続ができなくなります。具体的な OpenVPN の設定としては server.conf に下記のような記述を追加すれば OK です。
† 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 に下記のような記述を追加します。
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:
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5534
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110766)
3 . 年次の人間ドックへ(110366)
4 . 2023 年分の確定申告完了!(1つめ)(109913)
5 . 三菱鉛筆がラミーを買収(109812)