手当たり次第に書くんだ

飽きっぽいのは本能

OpenVPN tls-auth の役割 – 制御チャネル保護、key-direction、tls-crypt との違い

OpenVPN の tls-auth は、VPN の暗号化そのものではなく、TLS 制御チャネルを保護するための追加の仕組みです。

ここを誤解すると、証明書、秘密鍵、共有鍵、ユーザー認証、データチャネル暗号化の役割が混ざってしまいます。OpenVPN の接続を整理するうえでは、まず制御チャネルとデータチャネルを分けて考える必要があります。

この記事では、OpenVPN の tls-auth を、制御チャネル保護、key-direction、鍵ファイル管理、tls-crypt との違いという観点で整理します。

要素役割
証明書 / 秘密鍵OpenVPN の TLS 認証で使う
データチャネル暗号化VPN 内を流れる実データを暗号化する
tls-authTLS 制御チャネルに HMAC による追加検査を加える
tls-cryptTLS 制御チャネルの保護に加えて、制御チャネル自体を暗号化する
参考
書籍
参考書籍

マスタリング TCP/IP 入門編 第 6 版

VPN、TLS、TCP/IP、ルーティングなど、ネットワークの基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

tls-auth は制御チャネルを守る

OpenVPN では、接続確立時に TLS 制御チャネルが使われます。tls-auth は、この制御チャネルに HMAC による追加検査を加えることで、正しい共有鍵を持たない通信を早い段階で拒否します。

  • 不要な TLS ハンドシェイクを減らす
  • OpenVPN ポートへの雑なスキャンを通しにくくする
  • 証明書検証の前段で共有鍵による検査を行う
  • データチャネルの暗号化そのものとは役割が違う

つまり、tls-auth は OpenVPN の認証や暗号化を置き換えるものではありません。証明書やユーザー認証とは別に、制御チャネルへ追加の入口チェックを置くものです。

鍵ファイルを作成する

tls-auth では、サーバーとクライアントで同じ共有鍵ファイルを使います。この鍵は秘密情報として扱います。公開リポジトリ、記事本文、チャット、手順書のサンプルに実鍵を貼ってはいけません。

openvpn --genkey secret ta.key

生成した ta.key は、サーバーとクライアントの両方へ安全な経路で配置します。証明書や秘密鍵とは別のファイルですが、漏えいしてよいファイルではありません。

サーバー側とクライアント側の key-direction

tls-auth では、共有鍵ファイルに加えて key-direction を指定します。一般的には、サーバー側を 0、クライアント側を 1 にします。

tls-auth ta.key 0

クライアント側では、同じ ta.key を参照し、方向指定をサーバーと逆にします。

tls-auth ta.key 1

サーバーとクライアントで同じ方向を指定すると、HMAC の検査が合わず接続できません。証明書や認証情報が正しく見えても、key-direction の不一致だけで失敗することがあります。

設定ファイルに鍵を埋め込む場合

OpenVPN クライアント設定では、<tls-auth> ブロックとして鍵を設定ファイル内に埋め込む形式もあります。この場合も、設定ファイル全体を秘密情報として扱います。

<tls-auth>
# ta.key の内容
</tls-auth>
key-direction 1

設定ファイルに鍵を埋め込むと配布は楽になりますが、ファイルの取り扱いは重くなります。端末配布、バックアップ、メール添付、チャット送信などで漏えいしないように管理する必要があります。

tls-auth と tls-crypt の違い

tls-auth は、TLS 制御チャネルに HMAC による追加検査を加える仕組みです。一方、tls-crypt は、制御チャネルの保護に加えて、制御チャネル自体を暗号化する方向の仕組みです。

項目tls-authtls-crypt
主な役割制御チャネルに HMAC 検査を追加する制御チャネルを暗号化して保護する
共有鍵必要必要
key-direction通常は指定する通常は指定しない構成が多い
判断軸既存互換性、構成の分かりやすさ制御チャネルの秘匿性、現在の構成方針

どちらを使うかは、OpenVPN のバージョン、既存クライアントとの互換性、運用方針で判断します。既存環境で tls-auth を使っているからといって、すぐに誤りというわけではありません。ただし、新しく構成する場合は、tls-crypt を使うべきかも含めて検討した方がよいです。

トラブル時の確認観点

OpenVPN の接続失敗では、証明書、秘密鍵、ユーザー認証、経路、Firewall、tls-auth が混ざって見えます。まず、どの段階で失敗しているのかを分けて確認します。

確認したいこと:

  • サーバーとクライアントで同じ ta.key を使っているか
  • key-direction がサーバー側 0、クライアント側 1 になっているか
  • 設定ファイルから見た鍵ファイルのパスが正しいか
  • 証明書エラーと tls-auth の HMAC エラーを混同していないか
  • サーバーログに HMAC 関連のエラーが出ていないか
  • tls-authtls-crypt の設定を混在させていないか

特に、証明書を何度作り直しても接続できない場合、問題が証明書ではなく tls-auth の共有鍵や方向指定にあることがあります。ログに出るエラーを見て、証明書検証の失敗なのか、HMAC 検査の失敗なのかを分けることが重要です。

まとめ

OpenVPN の tls-auth は、VPN の認証全体を置き換えるものではなく、TLS 制御チャネルを追加で保護するための仕組みです。証明書、秘密鍵、ユーザー認証、データチャネル暗号化とは役割が違います。

tls-auth では、サーバーとクライアントで同じ共有鍵ファイルを使い、key-direction を逆に設定します。鍵ファイルは秘密情報として扱い、設定ファイルに埋め込む場合も慎重に管理する必要があります。

OpenVPN の接続問題を調べるときは、証明書検証の問題なのか、tls-auth の共有鍵や方向指定の問題なのかを分けて見ることが重要です。

関連する記事

あわせて読みたい:

OpenVPN tls-auth の役割 – 制御チャネル保護、key-direction、tls-crypt との違い

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る