web-dev-qa-db-ja.com

POSTリクエストのみを受け入れるTLSサーバーでサポートされている暗号スイートを確認するにはどうすればよいですか?

私は現在、設計上、POST要求のみを受け入れる2つのローカルKarafベースのXMLRPCサーバー間で双方向TLS 1.2接続を機能させようとしています。環境はWindows 10で、両方のXMLRPCサーバーが実行されています同じJDK:1.8.172。クライアントがClientHelloをサーバーに送信できるようになりましたが、サーバーからの応答はHandshake-failureであり、Wiresharkによる、Handshakeであるとの応答の調査-Failure(40)これは、サーバーとクライアントに共通の暗号スイートがないことを意味します。両方がまったく同じJVMで同じJava = -Dhttps.protocolsプロパティ(両端でTLSv1、TLSv1.1、TLSv1.2)。

クライアントは、ClientHelloで次のTLS暗号スイートを送信します。

[TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384、TLS_RSA_WITH_AES_256_CBC_SHA256、TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384、TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384、TLS_DHE_RSA_WITH_AES_256_CBC_SHA256、TLS_DHE_DSS_WITH_AES_256_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDH_RSA_WITH_AES_256_CBC_SHA、TLS_DHE_RSA_WITH_AES_256_CBC_SHA、TLS_DHE_DSS_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256、TLS_DHE_RSA_WITH_AES_128_CBC_SHA256、TLS_DHE_DSS_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 、TLS_ECDH_RSA_WITH_AES_128_CBC_SHA、TLS_DHE_RSA_WITH_AES_128_CBC_SHA、TLS_DHE_DSS_WIT H_AES_128_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384、TLS_DHE_RSA_WITH_AES_256_GCM_SHA384、TLS_DHE_DSS_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256、TLS_DHE_RSA_WITH_AES_128_GCM_SHA256、TLS_DHE_DSS_WITH_AES_128_GCM_SHA256、TLS_EMPTY_RENEGOTIATION_INFO_SCSV]

現在、サーバーでサポートされているTLSスイートを把握しようとしています。問題は、私がNmap for this thisを使用したことですが、NmapはGETリクエストを使用します。これはXMLRPCによってすぐに拒否されます(これはハードコードされています:メソッドがPOSTであることをハードコードされたチェックで確認し、そうでない場合はカスタムBadRequestExceptionをすぐにスローします)。

POSTリクエストのみを受け入れるローカルサーバーでサポートされているTLSスイートを確認するにはどうすればよいですか?

1
Nzall

GETまたはPOSTが使用されている場合はまったく関係ありません。TLSハンドシェイクは、HTTPリクエストが送信される前に行われます。したがって、ハンドシェイクが失敗した場合、GETもPOSTが可能です。サーバーがPOSTのみを受け入れ、GETが送信された場合、サーバーはHTTPレベルのエラーで応答します。TLSハンドシェイクはすでに終了しており、もう失敗することはありません。

... Wiresharkによる、ハンドシェイク失敗(40)であるという応答の調査。これは、サーバーとクライアントに共通の暗号スイートがないことを意味します。

実際、共有暗号は、ハンドシェイクエラーのいくつかの考えられる理由の1つにすぎません。これが発生する状態によっては、たとえば、要求されたクライアント証明書がないか、間違ったクライアント証明書がある可能性もあります。また、共有暗号は、たとえば、サーバーに証明書を読み込めなかったために発生することはなく、証明書ベースの認証を必要とする暗号を使用できません。

5
Steffen Ullrich