Suche.orgが何であるかを知らない人のために、それはすべてのカテゴリでSSL Labsで完璧なA +評価を持っているWebサイトです( Suche.org SSL Labsの結果 )。 ECC証明書がChromeで機能しない に関する別のチケットを開いたときにこのウェブサイトに気づき、レスポンダーの1人がサイトを例として使用しました。
私を混乱させるのは、レポートのProtocol Support
セクションにウェブサイトonlyTLSv1.2を使用...
TLS 1.2 Yes
TLS 1.1 No
TLS 1.0 No
SSL 3 No
SSL 2 No
Handshake Simulation
セクションの下に、シミュレートされた古いクライアントの一部がTLSv1.0を使用して接続していることが表示されるため、これは明らかにそうではありません...
Android 4.0.4 EC 384 (SHA256) TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA ECDH secp521r1 FS
Android 4.1.1 EC 384 (SHA256) TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA ECDH secp521r1 FS
Android 4.2.2 EC 384 (SHA256) TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA ECDH secp521r1 FS
Android 4.3 EC 384 (SHA256) TLS 1.0 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA ECDH secp521r1 FS
Android 4.4.2 EC 384 (SHA256) TLS 1.2 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ECDH secp521r1 FS
テストWebサイトでTLSv1.0を無効にすると...
# Apache example
SSLProtocol all -SSLv3 -SSLv2 -TLSv1
テストWebサイトでSSL Labsスキャンを実行すると、一部の古いクライアントで次の結果が得られます。
Android 4.0.4 Server closed connection
Android 4.1.1 Server closed connection
Android 4.2.2 Server closed connection
Android 4.3 Server closed connection
Android 4.4.2 EC 384 (SHA256) TLS 1.2 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ECDH secp256r1 FS
TLSv1.2接続のみを同時に許可しながら、古いクライアントもサポートする方法はありますか?
@ Jeffの回答で にリンクされたスレッドで説明されているように、クライアントの機能をチェックし、それに応じて動作していることは間違いありません。
これがどのように詳細に見えるかを知るには、- これで を見てください。これは、HAProxy
を使用して作成された実装を示しており、機能に応じて、さまざまなクライアントにさまざまな証明書を提供します。リンクの腐敗を防ぐために、完全なコピー/貼り付けを行いました。また、この質問は将来的に興味深いものになると思います。
SHA-1証明書は間もなくリリースされます。非常に古いクライアントがあり、しばらくの間SHA-1の互換性を維持する必要がない限り、できるだけ早くSHA-256証明書にアップグレードする必要があります。
この状況にある場合は、クライアントを強制的にアップグレードする(難しい)か、何らかの形式の証明書選択ロジックを実装する必要があります。これを「証明書の切り替え」と呼びます。
最も決定的な選択方法は、signature_algorithms拡張機能でのSHA256-RSA(0x0401)のサポートを明示的に通知するTLS1.2 CLIENT HELLOを提示するクライアントにSHA-256証明書を提供することです。
最新のWebブラウザーはこの拡張機能を送信します。ただし、現在、signature_algorithms拡張機能のコンテンツを検査できるオープンソースのロードバランサーについては知りません。今後提供される可能性がありますが、現時点で証明書の切り替えを実現する最も簡単な方法は、HAProxy SNI ACLを使用することです。クライアントがSNI拡張を提示する場合は、SHA-256証明書を提示するバックエンドに送信します。拡張機能が表示されない場合は、SSLv3または壊れたバージョンのTLSを話す古いクライアントであると想定し、SHA-1証明書を表示します。
これはHAProxyでフロントエンドとバックエンドをチェーンすることで実現できます。
global
ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128
-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-R
SA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
frontend https-in
bind 0.0.0.0:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend jve_https if { req.ssl_sni -i jve.linuxwall.info }
# fallback to backward compatible sha1
default_backend jve_https_sha1
backend jve_https
mode tcp
server jve_https 127.0.0.1:1665
frontend jve_https
bind 127.0.0.1:1665 ssl no-sslv3 no-tlsv10 crt /etc/haproxy/certs/jve_sha256.pem tfo
mode http
option forwardfor
use_backend jve
backend jve_https_sha1
mode tcp
server jve_https 127.0.0.1:1667
frontend jve_https_sha1
bind 127.0.0.1:1667 ssl crt /etc/haproxy/certs/jve_sha1.pem tfo ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
mode http
option forwardfor
use_backend jve
backend jve
rspadd Strict-Transport-Security:\ max-age=15768000
server jve 172.16.0.6:80 maxconn 128
上記の設定は、「https-in」と呼ばれるフロントエンドで受信トラフィックを受信します。そのフロントエンドはTCP=モードであり、クライアントからのCLIENT HELLOを検査してSNI拡張の値を調べます。その値が存在し、ターゲットサイトと一致する場合、名前付きのバックエンドに接続を送信します「jve_https」。これは、「jve_https」という名前のフロントエンドにリダイレクトされ、SHA256証明書が構成され、クライアントに提供されます。
クライアントがSNIでCLIENT HELLOを提示できない場合、またはターゲットサイトと一致しないSNIを提示した場合、クライアントは「https_jve_sha1」バックエンドにリダイレクトされ、次に対応するフロントエンドにSHA1証明書が提供されます。そのフロントエンドは、古いクライアントに対応するために古い暗号スイートもサポートしています。
どちらのフロントエンドも、最終的にはトラフィックを宛先Webサーバーに送信する「jve」という名前の単一のバックエンドにリダイレクトします。
これは非常にシンプルな構成であり、最終的にはより良いACLを使用して改善できる可能性があります(HAproxyは定期的にニュースを追加します)。
同様の質問が https://community.qualys.com/thread/16387 で尋ねられました
私は this 答えが解決策だと思います:
suche.orgは賢い実装です。私が理解している限り、それはクライアントの機能を照会し、疑いを取り除くために利用可能な最高のものだけを提供します。