web-dev-qa-db-ja.com

FreeRadiusおよびOpenSSLによるEAP-TLS 1.2認証の強制

FreeRADIUSサーバーとWPA_supplicantを使用したTLS DHECE証明書ベースのハンドシェイクで作業している-どちらもOpenSSL 1.0.1j FIPSを実行しています。

Wiresharkトラフィックを監視した後、クライアントがTLS 1.0を使用してClient Helloを送信していることに気づきました。 ECC証明書にはOpenSSL/TLS 1.0に関する問題があると思います。

TLS 1.2を使用して同じ証明書でs_clientとs_serverをテストしましたが、成功しました。

クライアントのhelloメッセージでTLSバージョンを1.0からTLS 1.2に変更する方法を理解できないようです。おそらく、TLS 1.0はECC暗号をサポートしていないため、問題が発生する可能性がありますか?ただし、新しいバージョンのSSLがTLS 1.2と暗号をサポートしているため、TLS 1.2を強制する必要があります。

さらに、TLS 1.0ハンドシェイクの最初のステップ中に、ハンドシェイクが「SSLv3_GET_CLIENT_HELLO致命的なハンドシェイクエラー」で失敗します。

その件についての考えは?

1
userJoe

せいぜい部分的な答えですが、合理的なコメントには多すぎます。

ECDHEはTLS1.2を必要とせず、コメントで述べたように1.0のみを必要とします。 1.2を実装していないopenssl 1.0.0でよく使用しましたが、現在のopensslで1.0を指定するか、非出血を使用してJava(j7は1.1と1.2を実行できますが、デフォルトは1.0です。実際、opensslは実際にはSSL3上のECDHE(およびその他のECC機能)をサポートしています。RFCはこの機能を要求しないため、openssl-to-opensslで機能しますが、必ずしも他の実装では機能しません。より堅牢なTLS1.0が利用可能な場合にそれを使用します。TLS1.2に必要な暗号機能は、AEAD(openssl GCM内)とSHA2のみです。 appはECDHE-ECDSA-AES128-SHA256を要求しますがECDHE-ECDSA-AES128-SHAは要求しません。thatは1.0で失敗します。どのような暗号ClientHelloで提供されていますか?一部のグーグル検索 http://w1.fi/wpa_supplicant/devel/tls__openssl_8c.html これは、少なくとも2012年の時点で暗号のリストを指定する可能性を示唆していますが、私はしませんでしたユーザーがこれを制御するかどうか、およびどのように制御するかに関するドキュメントは表示されません。

どちらを思い出させますか?ClientHelloで正しいバージョンを見ていますか? 2つのバージョンがあります:レコードレイヤーとハンドシェイク。 OpenSSLはClientHelloに「レコードレイヤー」バージョン0301(TLS1.0)を使用してさまざまなプロトコルを提供し、古いバージョンのみを実装するピアが正しく「ネゴシエーション」するようにします。提供されるバージョンを指定するのは、「Handshake Protocol:Client Hello」の下のバージョンです。そして、あなたはまだWiresharkでの応答が何であるかを言っていませんでした:アラートがあり、どのコード、または他の何か、または何が付いていますか?

そうは言っても、TLS1.2は他の利点や将来の保証のためにTLS1.2を欲しいかもしれません。 opensslが実装するプロトコルの中で、クライアントに提供するプロトコルまたはサーバーに受け入れるプロトコルは、それぞれのクライアントまたはサーバーアプリケーションコードが行う呼び出しによって制御されます。 _SSL_CTX_の開始点は、_SSLv3_*method_や_TLSv1_2_*method_などの特定のプロトコルの「メソッド」、または「汎用」_SSLv23_*method_(誤解を招くようになった従来の名前であり、将来のopensslバージョンで変更される可能性があります)_SSL_[CTX_]set_options_(特に)SSL_OP_NO_(protocol)ビットが続きます。

上記のように、ClientHelloがレコードバージョン0301およびハンドシェイクバージョン0301、つまりTLS1.0のみであると想定すると、wpa_supplicantが特に_TLSv1_*method_を実行するようにコーディングされている可能性があります。これは、10年前にTLS1(.0)が最も優れていたときに意味があり、SSLv2が攻撃可能で、SSLv3がUSgovtの使用に受け入れられない(それでも実際には安全です)という問題があったため、誰かが「私たちはTLS1を強制することにより、これらの@#?ユーザーを間違いや安全でない何かから保護します。もしそうなら、時間の経過はこの考えを間違っています。

1