Arch LinuxでOpenVPN v2.4.7およびOpenSSL 1.1.1cにアップデートした後、以前使用していたサーバーに接続できません。
➜ untangle-vpn Sudo openvpn --verb 11 --config ./config.ovpn
Fri Jun 7 21:46:11 2019 OpenVPN 2.4.7 [git:makepkg/2b8aec62d5db2c17+] x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 19 2019
Fri Jun 7 21:46:11 2019 library versions: OpenSSL 1.1.1c 28 May 2019, LZO 2.10
Fri Jun 7 21:46:11 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]XX.XXX.XXX.XXX:XXXX
Fri Jun 7 21:46:11 2019 UDP link local: (not bound)
Fri Jun 7 21:46:11 2019 UDP link remote: [AF_INET]XX.XXX.XXX.XXX:XXXX
Fri Jun 7 21:46:11 2019 Certificate does not have key usage extension
Fri Jun 7 21:46:11 2019 OpenSSL: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
Fri Jun 7 21:46:11 2019 TLS_ERROR: BIO read tls_read_plaintext error
Fri Jun 7 21:46:11 2019 TLS Error: TLS object -> incoming plaintext read error
Fri Jun 7 21:46:11 2019 TLS Error: TLS handshake failed
私たちのVPNサーバーを実行している人々は、キー使用法の拡張機能を備えた私の証明書をすぐに再発行する可能性は低いようです。
どういうわけかキー使用拡張チェックをスキップできますか?
私の現在の設定:
➜ untangle-vpn head -n 15 ./config.ovpn
client
resolv-retry 20
keepalive 10 60
nobind
mute-replay-warnings
remote-cert-tls server
comp-lzo
verb 1
persist-key
persist-tun
explicit-exit-notify 1
dev tun
proto udp
port 1194
cipher AES-128-CBC
はい、remote-cert-tls server
オプションを削除します。
(または、「拡張キー使用法」拡張を引き続きチェックし、「キー使用法」はチェックしない場合は、openvpnのマニュアルページに示されているように、オプションをremote-cert-eku "TLS Web Server Authentication"
に置き換えます。
--remote-cert-tls client|server
Require that peer certificate was signed with an explicit key usage and
extended key usage based on RFC3280 TLS rules.
[...]
The --remote-cert-tls server option is equivalent to --remote-cert-ku
--remote-cert-eku "TLS Web Server Authentication"
著者の質問の下に以下のコメントを投稿した後、正しいEKUでサーバーとクライアントの証明書を適切に生成するために必要なコードを提供することが役立つ場合があることに気付きました。
EKU要件を削除することは、あらゆる面で悪い考えであり、VPNのセキュリティを損ないます-どのような状況でもアドバイスされません 。 「VPNサーバーを実行している人」がサードパーティの場合は、彼らが何をしているのかはっきりと理解していないので、別のベンダーを見つけてください。個人があなたの会社にいる場合、彼らは彼らが何をしているのかも理解していないので、VPNサーバーを適切に構成するために彼らと直接話し合ってください。問題のEKUはMITM攻撃を防ぎます。 EKU定義については this 回答のextendedKeyUsageセクションを参照してください
openssl.cnf
内のV3プロファイル、KU、およびEKUについて、 this 回答内でさらに詳しく説明します。
VPNサーバー:
[ v3_vpn_server ]
basicConstraints = critical, CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer:always
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment, keyAgreement
extendedKeyUsage = critical, serverAuth
subjectAltName = @alt_vpn_server
keyUsage
:nonRepudiation
:署名エンティティが何らかのアクションを誤って拒否するのを防ぎますdigitalSignature
:整合性のあるエンティティとデータのオリジン認証に使用されますkeyEncipherment
:対称キーの暗号化に使用され、ターゲットに転送されますkeyAgreement
:キー合意を使用して、ターゲットとの対称キーを確立できるようにしますextendedKeuUsage
:serverAuth
:サーバー認証、サーバークライアントを認証するdigitalSignature
、keyEncipherment
またはkeyAgreement
VPNクライアント:
[ v3_vpn_client ]
basicConstraints = critical, CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer:always
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = critical, clientAuth
subjectAltName = @alt_vpn_client
extendedKeuUsage
:clientAuth
:クライアント認証、クライアントをクライアントとして区別のみdigitalSignature
および/またはkeyAgreement
openssl-1.1.0j
に関してMD5
で何かが変更されたため(デフォルトでサポートが無効になっています)、有効にする必要があります。
ファイルEnvironment="OPENSSLENABLEMD5VERIFY=1 NSSHASHALGSUPPORT=+MD5"
の[Service]
セクションの下に/usr/lib/systemd/system/[email protected]
という行を追加しました
[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application (Config: %I)
After=network.target
PartOf=openvpn.target
[Service]
Environment="OPENSSL_ENABLE_MD5_VERIFY=1 NSS_HASH_ALG_SUPPORT=+MD5"
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
[Install]
WantedBy=openvpn.target
また、OpenVPNクライアント構成ファイルからns-cert-type
またはremote-cert-tls
オプションを削除しました
client.conf
#ns-cert-type server
#remote-cert-tls server
cert /etc/openvpn/client/yateucn_client.crt