致命的なアラートを受け取りました:SSLHandshakeExceptionによるhandshake_failure


134

許可されたSSL接続に問題があります。クライアント承認済みSSL証明書を使用して外部サーバーに接続するStrutsアクションを作成しました。私のアクションでは、いくつかのデータを銀行サーバーに送信しようとしていますが、サーバーからの結果として次のエラーがあるため、運がありません。

error: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

サーバーにデータを送信する私のActionクラスのMyメソッド

//Getting external IP from host
    URL whatismyip = new URL("http://automation.whatismyip.com/n09230945.asp");
    BufferedReader inIP = new BufferedReader(new InputStreamReader(whatismyip.openStream()));

    String IPStr = inIP.readLine(); //IP as a String

    Merchant merchant;

    System.out.println("amount: " + amount + ", currency: " + currency + ", clientIp: " + IPStr + ", description: " + description);

    try {

        merchant = new Merchant(context.getRealPath("/") + "merchant.properties");

    } catch (ConfigurationException e) {

        Logger.getLogger(HomeAction.class.getName()).log(Level.INFO, "message", e);
        System.err.println("error: " + e.getMessage());
        return ERROR;
    }

    String result = merchant.sendTransData(amount, currency, IPStr, description);

    System.out.println("result: " + result);

    return SUCCESS;

私のmerchant.propertiesファイル:

bank.server.url=https://-servernameandport-/
https.cipher=-cipher-

keystore.file=-key-.jks
keystore.type=JKS
keystore.password=-password-
ecomm.server.version=2.0

encoding.source=UTF-8
encoding.native=UTF-8

これが証明書の問題であると初めて思ったので、.pfxから.jksに変換しましたが、変更せずに同じエラーが発生しました。


サーバーのSSL証明書をトラストストアに追加しましたか?
happymeal 2011年

申し訳ありませんが、これが何を意味するのか理解できません。SSLは初めてです
Denees

アプリがJavaのデフォルトのトラストストアを使用していると想定します。デフォルトのトラストストアは<java-home> / lib / security / cacertsです。ブラウザでサーバーのURLを開き、すべてのSSL証明書をダウンロードします。チェーン/中間証明書を含みます。次に、これらすべての証明書をトラストストアに追加します。
happymeal 2011年

クライアント認証証明書のため、ブラウザーでURLを開くことができません。クライアントから取得した特定のパラメーターのみをこのリンクに送信できます。
Denees

URLを開くだけです。ブラウザに表示されるすべてのエラーを無視してください。URLにアクセスすると、ブラウザのアドレスバーに南京錠のアイコンが表示されます。それをクリックして、サーバーのSSL証明書をダウンロードします。
happymeal

回答:


251

ハンドシェイクの失敗は、さまざまな理由で発生した可能性があります。

  • クライアントとサーバーで使用されている非互換の暗号スイート。これには、クライアントがサーバーでサポートされている暗号スイートを使用する(または有効にする)必要があります。
  • 互換性のないバージョンのSSLが使用されています(サーバーはTLS v1のみを受け入れ、クライアントはSSL v3のみを使用できます)。この場合も、クライアントは、互換性のあるバージョンのSSL / TLSプロトコルを使用する必要があります。
  • サーバー証明書の不完全な信頼パス。サーバーの証明書はおそらくクライアントによって信頼されていません。これは通常、より詳細なエラーになりますが、かなり可能です。通常、修正は、サーバーのCA証明書をクライアントのトラストストアにインポートすることです。
  • 証明書は別のドメインに対して発行されます。繰り返しますが、これはより詳細なメッセージをもたらすことになりますが、これが原因である場合に備えて、ここで修正を述べます。この場合の解決策は、サーバー(あなたのものではないように見える)に正しい証明書を使用させることです。

根本的な障害を特定することはできないため、 -Djavax.net.debug=all確立されたSSL接続のデバッグを有効にするには、フラグをオンにすることをお勧めします。デバッグをオンにすると、ハンドシェイクで失敗したアクティビティを特定できます。

更新

現在入手可能な詳細に基づいて、問題はサーバーに発行された証明書とルートCAの間の不完全な証明書信頼パスが原因であると思われます。ほとんどの場合、これは、ルートCAの証明書がトラストストアに存在しないため、証明書の信頼パスが存在できない状況につながるためです。証明書はクライアントによって本質的に信頼されていません。ブラウザは警告を表示してユーザーがこれを無視できるようにすることができますが、SSLクライアント(HttpsURLConnectionクラスやApache HttpComponents ClientなどのHTTPクライアントライブラリ)の場合は同じではありません。

これらのクライアントクラス/ライブラリのほとんどは、証明書の検証にJVMが使用するトラストストアに依存します。ほとんどの場合、これはcacertsJRE_HOME / lib / securityディレクトリにあるファイルです。トラストストアの場所がJVMシステムプロパティを使用して指定されている場合、javax.net.ssl.trustStoreそのパスのストアは通常、クライアントライブラリが使用するストアです。疑問がある場合は、Merchantクラスをて、接続に使用しているクラス/ライブラリを。

サーバーの証明書を発行するCAをこのトラストストアに追加すると、問題が解決します。この目的のためのツールの入手に関する関連質問で私の回答を参照できますが、この目的にはJava keytoolユーティリティで十分です。

警告:トラストストアは、基本的に、信頼するすべてのCAのリストです。信頼できないCAに属していない証明書を入力した場合、そのエンティティによって発行された証明書を持つサイトへのSSL / TLS接続は、秘密鍵が利用可能であれば復号化できます。

更新#2:JSSEトレースの出力について

JVMで使用されるキーストアとトラストストアは、通常、次のように最初にリストされます。

keyStore is : 
keyStore type is : jks
keyStore provider is : 
init keystore
init keymanager of type SunX509
trustStore is: C:\Java\jdk1.6.0_21\jre\lib\security\cacerts
trustStore type is : jks
trustStore provider is : 

間違ったトラストストアが使用されている場合は、サーバーの証明書を正しいものに再インポートするか、リストされているものを使用するようにサーバーを再構成する必要があります(複数のJVMがあり、すべてに異なるJVMが使用されている場合はお勧めしません)ニーズ)。

信頼証明書のリストに必要な証明書が含まれているかどうかを確認する場合は、同じセクションがあり、次のように始まります。

adding as trusted cert:
  Subject: CN=blah, O=blah, C=blah
  Issuer:  CN=biggerblah, O=biggerblah, C=biggerblah
  Algorithm: RSA; Serial number: yadda
  Valid from SomeDate until SomeDate

サーバーのCAがサブジェクトであるかどうかを調べる必要があります。

ハンドシェイクプロセスにはいくつかの顕著なエントリがあります(詳細を理解するにはSSLを知る必要がありますが、現在の問題をデバッグするためには、通常、serverHelloでhandshake_failureが報告されることを知っていれば十分です。

1. ClientHello

接続が初期化されると、一連のエントリが報告されます。SSL / TLS接続設定でクライアントが送信する最初のメッセージはClientHelloメッセージであり、通常は次のようにログに報告されます。

*** ClientHello, TLSv1
RandomCookie:  GMT: 1291302508 bytes = { some byte array }
Session ID:  {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA]
Compression Methods:  { 0 }
***

使用されている暗号スイートに注意してください。同じ規則が銀行のライブラリで採用されている可能性があるため、これ merchant.propertiesファイルのエントリに同意する必要がある場合があります。使用されている規約が異なる場合でも、暗号スイートに互換性がない場合はServerHelloがそれを示すため、心配する必要はありません。

2. ServerHello

サーバーはServerHelloで応答します。これは、接続のセットアップを続行できるかどうかを示します。ログのエントリは通常、次のタイプです。

*** ServerHello, TLSv1
RandomCookie:  GMT: 1291302499 bytes = { some byte array}
Cipher Suite: SSL_RSA_WITH_RC4_128_SHA
Compression Method: 0
***

選択した暗号スイートに注意してください。これは、サーバーとクライアントの両方で利用できる最適なスイートです。通常、エラーがある場合、暗号スイートは指定されません。サーバーの証明書(およびオプションでチェーン全体)はサーバーによって送信され、エントリ内で次のように見つかります。

*** Certificate chain
chain [0] = [
[
  Version: V3
  Subject: CN=server, O=server's org, L=server's location, ST =Server's state, C=Server's country
  Signature Algorithm: SHA1withRSA, OID = some identifer

.... the rest of the certificate
***

証明書の検証が成功すると、次のようなエントリが見つかります。

Found trusted certificate:
[
[
  Version: V1
  Subject: OU=Server's CA, O="Server's CA's company name", C=CA's country
  Signature Algorithm: SHA1withRSA, OID = some identifier

上記のステップの1つは成功せず、結果としてhandshake_failureが発生します。ハンドシェイクは通常、この段階で完了しているためです(実際にはそうではありませんが、ハンドシェイクの後続の段階では通常、ハンドシェイクの失敗は発生しません)。失敗したステップを特定し、適切なメッセージを質問の更新として投稿する必要があります(メッセージをすでに理解していて、それを解決するために何をすべきかわかっている場合を除きます)。


可能であれば、入手した情報を投稿してください。そうすれば、より具体的な回答に更新できます。
Vineet Reynolds、2011

1
Ok Vineet、どう対処すればいいかわからない。もうすっかり疲れている。openssl "openssl s_client -connect servername:4402"を使用してサーバーのURLを確認する方法を見つけ、取得した内容を確認します:img225.imageshack.us/img225/8999/screenshoturr.png
Denees

@hoss、サーバーの証明書は、OpenSSLが使用するトラストストアに存在しないエンティティによって発行されたようです。また、サーバー(クライアント)が接続するときに、サーバー(クライアント)が使用するトラストストアにも存在しない可能性がありますサーバー。その場合、証明書を発行した(サーバーではなく)CAの証明書をクライアントの(OpenSSL /サーバー)トラストストアにインポートする必要があります。
Vineet Reynolds、2011

1
まあ、それはcacertsに依存している可能性があります。ただし、これは、ネットワークデバッグの出力を理解している場合にのみ判断できます。これを確認したい場合は、keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacertsコマンドを使用して内容を印刷する必要があります。次に、cacertsの証明書が銀行の証明書のCAと一致するかどうかを確認します。
Vineet Reynolds、2011

5
デフォルトは通常changeitです。変更されない限り。
Vineet Reynolds、2011

20

Java Cryptography Extension(JCE)Unlimited Strength(JDK7の場合 | JDK8の場合)をインストールすると、このバグが修正される場合があります。ファイルを解凍し、readmeに従ってインストールします。


16

ハンドシェイクの失敗は、バグの多いTLSv1プロトコルの実装である可能性があります。

私たちの場合、これはJava 7で役立ちました:

java -Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1 

jvmはこの順序で交渉します。最新のアップデートが適用されたサーバーは1.2を実行し、バグのあるサーバーはv1になり、Java 7の同様のv1で動作します。


1
これは私を助けました。私のClientHelloはありましたが、サーバーがありませんでしたが、結局は突然でした。これにより、Java 7で修正されました。ありがとうございました。
virgo47

15

これは、クライアントが証明書を提示する必要がある場合にも発生する可能性があります。サーバーが証明書チェーンをリストした後、次のことが起こります。

3.証明書要求 サーバーはクライアントから証明書要求を発行します。リクエストには、サーバーが受け入れるすべての証明書がリストされます。

*** CertificateRequest
Cert Types: RSA
Cert Authorities:
<CN=blah, OU=blah, O=blah, L=blah, ST=blah, C=blah>
<CN=yadda, DC=yadda, DC=yadda>
<CN=moreblah, OU=moreblah, O=moreblah, C=moreblah>
<CN=moreyada, OU=moreyada, O=moreyada, C=moreyada>
... the rest of the request
*** ServerHelloDone

4.クライアント証明書チェーン これは、クライアントがサーバーに送信する証明書です。

*** Certificate chain
chain [0] = [
[
  Version: V3
  Subject: EMAILADDRESS=client's email, CN=client, OU=client's ou, O=client's Org, L=client's location, ST=client's state, C=client's Country
  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
  ... the rest of the certificate
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1    
... key exchange info 

チェーンに証明書がなく、サーバーで証明書が必要な場合は、ここでハンドシェイクエラーが発生します。考えられる原因は、証明書へのパスが見つからなかったことです。

5.証明書の確認 クライアントはサーバーに証明書の確認を要求します

*** CertificateVerify
... payload of verify check

この手順は、証明書を送信する場合にのみ発生します。

6.完了 サーバーは確認応答で応答します

*** Finished
verify_data:  { 345, ... }

私の場合、すべての手順は問題ないようですが、それでもハンドシェイクエラーが発生します。
tibi 2014

非常に良い答え...しかし、これらはすべて私のハンドシェイクの失敗で大丈夫ですが、それでも私は失敗しています。私の同じような質問を見ていただけませんか?
tibi 2014

クライアント証明書の提示に失敗しても、TLSのエラーにはなりません。サーバーがクライアント証明書を必要とし、それが提示されない場合は、接続を閉じます。
ローンの侯爵

@EJPは真ですが、TLSのエラーではありませんが、接続の失敗はJavaコードでエラーとして表示されます。
2016年

1
@Brigしかし、この答えが言うこと、そして質問が何であるかという警告ではありません。
ローンの侯爵

15

これで最初の質問者に問題が解決するとは思わないが、答えを求めてここに来るグーグルの場合:


アップデート51では、リリースノートページで確認できるように、Java 1.8はデフォルトでRC4暗号を禁止しました:

バグ修正:RC4暗号スイートを禁止する

RC4は、現在、侵害された暗号と見なされています。

Oracle JSSE実装では、RC4暗号スイートがクライアントとサーバーの両方のデフォルトで有効な暗号スイートリストから削除されました。これらの暗号スイートはSSLEngine.setEnabledCipherSuites()SSLSocket.setEnabledCipherSuites()メソッドおよびメソッドによって有効にすることができます。JDK-8077109(非公開)を参照してください。

サーバーがこの暗号を強く好む場合(またはこの暗号のみを使用する場合)は、 handshake_failure、Javaでます。

サーバーへの接続をテストして、RC4暗号を有効にすることができます(最初に、enabled引数なしで試し、がトリガーされるかどうかを確認してからhandshake_failure、次のように設定しenabledます:

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

import java.util.Arrays;

/** Establish a SSL connection to a host and port, writes a byte and
 * prints the response. See
 * http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services
 */
public class SSLRC4Poke {
    public static void main(String[] args) {
        String[] cyphers;
        if (args.length < 2) {
            System.out.println("Usage: "+SSLRC4Poke.class.getName()+" <host> <port> enable");
            System.exit(1);
        }
        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(args[0], Integer.parseInt(args[1]));
        
            cyphers = sslsocketfactory.getSupportedCipherSuites();
            if (args.length ==3){
                sslsocket.setEnabledCipherSuites(new String[]{
                    "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
                    "SSL_DH_anon_WITH_RC4_128_MD5",
                    "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
                    "SSL_RSA_WITH_RC4_128_MD5",
                    "SSL_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
                    "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_anon_WITH_RC4_128_SHA",
                    "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
                    "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
                    "TLS_KRB5_WITH_RC4_128_MD5",
                    "TLS_KRB5_WITH_RC4_128_SHA"
                });     
            }

            InputStream in = sslsocket.getInputStream();
            OutputStream out = sslsocket.getOutputStream();

            // Write a test byte to get a reaction :)
            out.write(1);

            while (in.available() > 0) {
                System.out.print(in.read());
            }
            System.out.println("Successfully connected");

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

1- https://www.java.com/en/download/faq/release_changes.xml


10

JDK 1.7を使用しようとしたときにこのエラーが発生しました。JDKをjdk1.8.0_66にアップグレードすると、すべて正常に動作し始めました。

したがって、この問題の最も簡単な解決策は、JDKアップグレードするとうまく機能し始めることです。


4
いいね。最も簡単な解決策は、JDKをアップグレードすることですか?:Dそれが行われている環境によっては、どれほど複雑になるか知っていますか?AmazonがJDK 7を実行していて、今すぐJDK 8にアップグレードする必要があるとしましょう...いいですね!
Arturas M 2017

1
単純なマイナーバージョンのアップグレードでこの問題は解決しました。JDK11.0.1から11.0.6へ
Clint

4

私の場合、証明書がインポートされ、エラーが残ります、System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");接続前に追加することでこれを解決しました


Java 1.8で私のために働いた。ありがとう:)
Supun Amarasinghe

3

適切なSSL / TLSプロトコルを使用し、keyStoreおよびを適切に構成trustStoreし、証明書自体に問題がないことを確認した場合、セキュリティアルゴリズム強化する必要があるかもしれません

Vineetの回答で述べたように、このエラーが発生する理由の1つとして、互換性のない暗号スイートが使用されていることが考えられます。JDKのフォルダーにあるlocal_policyUS_export_policyjarをJava Cryptography Extension(JCE)security提供されているjarで更新することにより、ハンドシェイクを正常に完了することができました。


2

今日、OkHttpクライアントで同じ問題に遭遇し、httpsベースのURLを取得しています。これは、Httpsプロトコルのバージョンと、サーバー側とクライアント側の暗号化方式の不一致原因でした。でした。

1)ウェブサイトのhttpsプロトコルのバージョンと暗号方式を確認します。

openssl>s_client -connect your_website.com:443 -showcerts

多くの詳細情報が表示されます。主要な情報は次のとおりです。

SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
2)たとえば、OkHttpクライアントの場合、httpクライアントを構成します
@Test()
public void testHttpsByOkHttp() {
    ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
            .tlsVersions(TlsVersion.TLS_1_0) //protocol version
            .cipherSuites(
                    CipherSuite.TLS_RSA_WITH_RC4_128_SHA, //cipher method
                    CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
                    CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
                    CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
            .build();

    OkHttpClient client = new OkHttpClient();
    client.setConnectionSpecs(Collections.singletonList(spec));
    Request request = new Request.Builder().url("https://your_website.com/").build();
    try {
        Response response = client.newCall(request).execute();
        if(response.isSuccessful()){
            logger.debug("result= {}", response.body().string());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

これは私たちが望むものを取得します。


2

Javaクライアントプロセスが次のように構成されている場合、この方法で失敗するHTTPSサーバーを見つけました

-Djsse.enableSNIExtension=false

handshake_failure後に接続が失敗しましたServerHello正常に終了していたが、データ・ストリームが開始する前に。

問題を特定する明確なエラーメッセージはなく、エラーは次のようになりました。

main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
%% Invalidated:  [Session-3, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

-Djsse.enableSNIExtension=false」オプションを使用して、使用せずに問題を特定しました


GDAXサンドボックスへの接続中に同じエラーが発生しますが、これに対する解決策はありますか?
Nitin Vavdiya

1

私は TLSバージョン非互換エラーでした。

以前はそれTLSv1を変更することでTLSV1.2問題が解決しました。


1

私はcom.google.api httpクライアントを使用しています。社内のサイトと通信するときに、httpではなく誤ってhttpsを使用したときにこの問題が発生しました。

main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
main, IOException in getSession():  javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
main, called close()
main, called closeInternal(true)
262 [main] DEBUG org.apache.http.impl.conn.DefaultClientConnection  - Connection shut down
main, called close()
main, called closeInternal(true)
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager  - Released connection is not reusable.
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute  - Releasing connection [HttpRoute[{s}->https://<I-replaced>]][null]
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute  - Notifying no-one, there are no waiting threads
Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.google.api.client.http.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:67)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:960)

いいえ、できません。サーバーがTLSを話していない場合、サーバーはTLSアラートを送信できません。
ローンの侯爵

プログラムの出力を表示するようにコメントを更新しました。これは現実です。反対票を削除することをお勧めします。
thebiggestlebowski 2016年

これは本当ですが、TLSとプレーンテキストサーバーとの通信が原因ではありません。プレーンテキストサーバーは、当然のことながらTLSを使用していないため、TLSアラートを受け取ることはできません。誰が回答に反対票を投じたのかについての情報はありません。
ローンの侯爵

私はあなたが反対票を投じたと仮定しました-そうでない場合は私の謝罪。私のエラーメッセージは、この質問のタイトルと完全に一致しています。このエラーメッセージが表示されるのは有効なパス/テストケースであり、他の人を助ける可能性のある解決策があります。敬具、それがTLSサーバーのエラー応答が原因かどうかは関係ないと思います。誰かがグーグルからここに着陸し、私の答えは彼らが同じ間違いをした場合に役立つかもしれません。
thebiggestlebowski 2016年

エラーメッセージについては何も言っていません。これは「誤ってHTTPではなくHTTPSを使用している」ためであるという誤った主張についてコメントしています。それはそうではありませんし、私が述べた理由やあなたが何らかの方法で対処しなかった理由のために、それは不可能です。プレーンテキストのTLSアラートはありませんが、根本的な問題には対応していないため、HTTPを使用すると、明らかにHTTPはなくなります。
ローン侯爵


1

Ugg!これは、単にJavaバージョンの問題であることがわかりました。JRE 1.6を使用してハンドシェイクエラーが発生し、JRE 1.8.0_144を使用するとすべてが完全に機能しました。


0

免責事項:答えが多くの人に役立つかどうかはわかりません。

Parasoft SOATestを使用してリクエストXML(SOAP)を送信しているときにこのエラーが発生しました。

問題は、証明書を追加して認証した後、ドロップダウンから間違ったエイリアス選択したことでした。


0

私の場合、ウェブサイトはTLSv1.2を使用できます。私はapache httpclient 4.5.6を使用しています。このコードを使用し、jceをインストールしてこれを解決します(JDK1.7):

jce

jdk7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

jdk 8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

コード:

SSLContext sslContext = SSLContext.getDefault();

  SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(
      sslContext,
      new String[]{"TLSv1.2"}, // important
      null,
      NoopHostnameVerifier.INSTANCE);

  Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
      .register("https", sslConnectionFactory)
      .register("http", PlainConnectionSocketFactory.INSTANCE)
      .build();

  HttpClientConnectionManager ccm = new BasicHttpClientConnectionManager(registry);
  httpclient = HttpClientBuilder.create().
      .setSSLSocketFactory(sslConnectionFactory)
      .setConnectionManager(ccm)
      .build();

0

開発者(アイテム1)およびシステム管理者(アイテム2および3)の観点からトラブルシューティングするには:

  1. JavaでSSLハンドシェイクデバッグを有効にします-Djavax.net.debug=ssl:handshake:verbose
  2. 観察した場合は、sudo apt install ssldumpこのリンクをたどってサーバーにssldumpをインストールするか、ソースからコンパイルしますUnknown value以下のステップを実行したときに暗号でれた。
  3. サーバーでは、 sudo ssldump -k <your-private-key> -i <your-network-interface>
  4. 失敗の実際の理由についてログを確認してください。

ssldumpログのハンドシェイクが機能しない例:

New TCP connection #1: 10.1.68.86(45308) <-> 10.1.68.83(5671)
1 1  0.0111 (0.0111)  C>S  Handshake
      ClientHello
        Version 3.3
        cipher suites
        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_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_WITH_AES_128_CBC_SHA
        TLS_EMPTY_RENEGOTIATION_INFO_SCSV
        compression methods
                  NULL
1 2  0.0122 (0.0011)  S>C  Alert
    level           fatal
    value           insufficient_security
1    0.0126 (0.0004)  S>C  TCP RST

ssldumpログの正常なハンドシェイクの例

New TCP connection #1: 10.1.68.86(56558) <-> 10.1.68.83(8443)
1 1  0.0009 (0.0009)  C>S  Handshake
      ClientHello
        Version 3.3
        cipher suites
        TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
        Unknown value 0xcca9
        Unknown value 0xcca8
        Unknown value 0xccaa
        TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA
        TLS_RSA_WITH_AES_256_GCM_SHA384
        TLS_RSA_WITH_AES_128_GCM_SHA256
        TLS_RSA_WITH_AES_256_CBC_SHA256
        TLS_RSA_WITH_AES_128_CBC_SHA256
        TLS_RSA_WITH_AES_256_CBC_SHA
        TLS_RSA_WITH_AES_128_CBC_SHA
        TLS_EMPTY_RENEGOTIATION_INFO_SCSV
        compression methods
                  NULL
1 2  0.0115 (0.0106)  S>C  Handshake
      ServerHello
        Version 3.3
        session_id[0]=

        cipherSuite         TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        compressionMethod                   NULL
1 3  0.0115 (0.0000)  S>C  Handshake
      Certificate
1 4  0.0115 (0.0000)  S>C  Handshake
      ServerKeyExchange
Not enough data. Found 294 bytes (expecting 32767)
1 5    0.0115   (0.0000)    S>C    Handshake
        ServerHelloDone
1 6    0.0141   (0.0025)    C>S    Handshake
        ClientKeyExchange
Not enough data. Found 31 bytes (expecting 16384)
1 7    0.0141   (0.0000)    C>S    ChangeCipherSpec
1 8    0.0141   (0.0000)    C>S      Handshake
1 9    0.0149   (0.0008)    S>C    Handshake
1 10   0.0149   (0.0000)    S>C    ChangeCipherSpec
1 11   0.0149   (0.0000)    S>C      Handshake

Javaログが機能しない例

javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.778 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.779 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.779 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: T LS_DHE_RSA_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10 javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.787 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|WARNING|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.818 MYT|SignatureScheme.java:282|Signature algorithm, ed25519, is not supported by the underlying providers
javax.net.ssl|WARNING|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.818 MYT|SignatureScheme.java:282|Signature algorithm, ed448, is not supported by the underlying providers
javax.net.ssl|ALL|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.822 MYT|SignatureScheme.java:358|Ignore disabled signature sheme: rsa_md5
javax.net.ssl|INFO|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.822 MYT|AlpnExtension.java:161|No available application protocols
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.823 MYT|SSLExtensions.java:256|Ignore, context unavailable extension: application_layer_protocol_negotiation
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.823 MYT|SSLExtensions.java:256|Ignore, context unavailable extension: renegotiation_info
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.825 MYT|ClientHello.java:651|Produced ClientHello handshake message (
"ClientHello": {
  "client version"      : "TLSv1.2",
  "random"              : "FB BC CD 7C 17 65 86 49 3E 1C 15 37 24 94 7D E7 60 44 1B B8 F4 18 21 D0 E1 B1 31 0D E1 80 D6 A7",
  "session id"          : "",
  "cipher suites"       : "[TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(0xC02E), TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(0xC032), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xC02F), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(0xC02D), TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(0xC031), TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x009E), TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(0x00A2), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(0xC024), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xC028), TLS_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(0xC026), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(0xC02A), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(0xC025), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]",
  "compression methods" : "00",  "extensions"          : [
    "server_name (0)": {
      type=host_name (0), value=mq.tpc-ohcis.moh.gov.my
    },
    "status_request (5)": {
      "certificate status type": ocsp
      "OCSP status request": {
        "responder_id": <empty>
        "request extensions": {
          <empty>
        }
      }
    },
    "supported_groups (10)": {
      "versions": [secp256r1, secp384r1, secp521r1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, secp256k1, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
    },
    "ec_point_formats (11)": {
      "formats": [uncompressed]
    },
    "signature_algorithms (13)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "signature_algorithms_cert (50)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "status_request_v2 (17)": {
      "cert status request": {
        "certificate status type": ocsp_multi
        "OCSP status request": {
          "responder_id": <empty>
          "request extensions": {
            <empty>
          }
        }      }
    },
    "extended_master_secret (23)": {
      <empty>
    },
    "supported_versions (43)": {
      "versions": [TLSv1.2, TLSv1.1, TLSv1]
    }
  ]
}
)
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.829 MYT|Alert.java:238|Received alert message (
"Alert": {
  "level"      : "fatal",
  "description": "insufficient_security"
}
)

0

私の場合、バージョン1.1で1つの問題がありました。カールで簡単に問題を再現していた。サーバーはTLS1.2より前のバージョンをサポートしていませんでした。

これはハンドシェイクの問題を受け取りました:

curl --insecure --tlsv1.1 -i https://youhost --noproxy "*"

バージョン1.2では問題なく動作していました。

curl --insecure --tlsv1.2 -i https://youhost --noproxy "*"

サーバーはWeblogicを実行しており、setEnvDomain.shにこの引数を追加すると、TLSv1.1で動作するようになりました。

-Dweblogic.security.SSL.minimumProtocolVersion=TLSv1.1

0

この問題は、Javaバージョンが原因で発生しています。1.8.0.231 JDKを使用していて、このエラーが発生しました。Javaバージョンを1.8.0.231から1.8.0.171に下げましたが、正常に動作しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.