web-dev-qa-db-ja.com

OpenVPN証明書にはキー使用法の拡張機能がありません

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
1
Utgarda

はい、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"
1
user1686

著者の質問の下に以下のコメントを投稿した後、正しい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整合性のあるエンティティとデータのオリジン認証に使用されます

      次の2つのKUでは、すべての暗号を使用できます:
      両方ではなく、どちらかを選択すると、サーバーが利用できる暗号が制限されます
    • keyEncipherment対称キーの暗号化に使用され、ターゲットに転送されます
    • keyAgreementキー合意を使用して、ターゲットとの対称キーを確立できるようにします

  • extendedKeuUsage
    • serverAuthサーバー認証、サーバークライアントを認証する
      必要なKU:digitalSignaturekeyEnciphermentまたは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クライアント認証、クライアントをクライアントとして区別のみ
      必要なKU:digitalSignatureおよび/またはkeyAgreement
1
JW0914

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
0
Paul afk