Date Category トピックス.

OpenVPN 2.6 では、SSLライブラリとして OpenSSL 3.0 が使用されています。OpenSSL 3.0 の機能変更に伴い、古いバージョンの OpenVPN からアップデートしたときや、新旧バージョンが混在した環境でエラーが発生する可能性があります。その原因や対処方法などを説明します。

OpenSSL/OpenVPN の機能変更は主にセキュリティ面の向上を目的として実施されたものなので、暫定的な回避策で切り抜けたとしても、いずれ対応が必要になります。回避策も今後使用できなくなる可能性がありますので、バージョンアップや構成変更を検討してください。

証明書で脆弱な署名アルゴリズム(SHA1/MD5)を使用している

このケースでは、証明書の読み込み時やサーバーへの接続時に下記のエラーが発生します。

  OpenSSL: error:0A00018E:SSL routines::ca md too weak  Cannot load certificate file cert.crt  Exiting due to fatal error  

OpenSSL 3.0 では脆弱な署名アルゴリズムが使用できなくなっています。 --tls-cert-profile insecure の設定を追加することでセキュリティレベルをダウングレードできますが、できるだけ早く証明書の更新/置き換えを計画してください。

脆弱な鍵(1024ビットのRSA証明書、1024ビットのDHパラメータなど)を使用している

秘密鍵などで使用している暗号化手法が古い場合に、以下のようなエラーが発生します。

  OpenSSL: error:0A00018F:SSL routines::ee key too small  OpenSSL: error:1408518A:SSL routines:ssl3_ctx_ctrl:dh key too small  

DHパラメータは OpenSSL を使用して 2048ビットで生成できます。脆弱な手法で作成されている他の鍵や証明書も再作成してください。暫定的な回避策としては --tls-cert-profile legacy または --tls-cert-profile insecure を使用します。

OpenVPN 2.3.x のサーバー/クライアントとの接続

次のようなエラーが発生することがあります。

  OPTIONS ERROR: failed to negotiate cipher with server.  Add the server's cipher ('AES-128-CBC') to --data-ciphers (currently 'AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305') if you want to connect to this server.  

または

  client/127.0.0.1:49954 SENT CONTROL [client]: 'AUTH_FAILED,Data channel cipher negotiation failed (no shared cipher)' (status=1)  

この場合は --data-ciphers に必要なサイファを手動で追加します。標準的に使用されるサイファは含めるようにしてください( --data-ciphers AES-256-GCM:AES-128-GCM:?Chacha20-Poly1305:?AES-128-CBC )。 --compat-mode オプションを使用することもできます。
このエラーが発生する場合は、他のサイファ設定にも問題がある可能性があるので、データチャネルのサイファに関するドキュメント (https://github.com/OpenVPN/openvpn/blob/master/doc/man-sections/cipher-negotiation.rst) を参照して対応してください。

64ビットのブロック暗号化などの古い(廃止された)サイファを使用している

OpenSSL 3.0 では、安全ではなく古いサイファは既定でサポートされなくなりました。これらのサイファは SWEET32 攻撃などに脆弱なことが知られています。
次のようなエラーが表示されます。

  OpenSSL: error:0308010C:digital envelope routines::unsupported  Cipher algorithm 'BF-CBC' not found  Unsupported cipher in --data-ciphers: BF-CBC  

使用しているOpenSSLライブラリが古いプロバイダを使用している場合は、 --providers legacy default ディレクティブを使うことで対応できます。

TLS 1.2以降をサポートしていない OpenVPN との接続

OpenVPN 2.6 では TLS 1.2 以降が標準となっています。TLS 1.2 をサポートしていない環境に接続しようとすると、以下のようなエラーが表示されます。

  TLS error: Unsupported protocol. This typically indicates that client and  server have no common TLS version enabled. This can be caused by mismatched  tls-version-min and tls-version-max options on client and server. If your  OpenVPN client is between v2.3.6 and v2.3.2 try adding tls-version-min 1.0  to the client configuration to use TLS 1.0+ instead of TLS 1.0 only  OpenSSL: error:0A000102:SSL routines::unsupported protocol  

このようなケースは OpenVPN 2.3.6 以前のバージョンで発生する可能性があります。この場合は、 compat-version 2.3.0 ディレクティブを使用することで TLS 1.0 サポートを有効化できます。ただし、Linux のディストリビューションによっては TLS 1.0 や 1.1 が使用できなくなっていることがありますので、注意してください。