Menerima peringatan fatal: handshake_failure melalui SSLHandshakeException


134

Saya memiliki masalah dengan koneksi SSL resmi. Saya telah membuat Tindakan Struts yang menghubungkan ke server eksternal dengan sertifikat SSL Resmi Klien. Dalam Tindakan saya, saya mencoba mengirim beberapa data ke server bank tetapi tidak berhasil, karena saya memiliki kesalahan dari server sebagai berikut:

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

Metode saya dari kelas Tindakan saya yang mengirim data ke server

//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;

File properti pedagang saya:

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

Untuk pertama kalinya saya pikir ini adalah masalah sertifikat, saya mengonversinya dari .pfx ke .jks, tetapi saya memiliki kesalahan yang sama, tanpa perubahan.


apakah Anda menambahkan ssl cert server ke truststore Anda?
happymeal

maaf, saya tidak mengerti apa artinya ini, saya baru
mengenal

saya akan berasumsi bahwa aplikasi Anda menggunakan java default truststore. Truststore default adalah <java-home> / lib / security / cacerts. buka url server dengan browser Anda dan unduh semua sertifikat ssl; termasuk semua rantai / sertifikat menengah. lalu tambahkan semua sertifikat ini ke truststore.
happymeal

Saya tidak dapat membuka url di browser, karena sertifikat otentikasi klien, saya dapat mengirim ke tautan ini hanya parameter khusus yang saya dapatkan dari klien.
Denees

cukup buka url. abaikan semua kesalahan yang Anda lihat di browser Anda. ketika Anda mengakses url, Anda akan melihat ikon gembok di bilah alamat browser Anda. klik itu dan unduh sertifikat ssl server.
happymeal

Jawaban:


251

Kegagalan jabat tangan bisa terjadi karena berbagai alasan:

  • Suite sandi yang tidak kompatibel digunakan oleh klien dan server. Ini akan mengharuskan klien untuk menggunakan (atau mengaktifkan) suite sandi yang didukung oleh server.
  • Versi SSL yang tidak kompatibel sedang digunakan (server mungkin hanya menerima TLS v1, sementara klien hanya mampu menggunakan SSL v3). Sekali lagi, klien mungkin harus memastikan bahwa ia menggunakan versi protokol SSL / TLS yang kompatibel.
  • Jalur kepercayaan tidak lengkap untuk sertifikat server; sertifikat server mungkin tidak dipercaya oleh klien. Ini biasanya menghasilkan kesalahan yang lebih banyak, tetapi sangat mungkin. Biasanya perbaikannya adalah mengimpor sertifikat CA server ke toko kepercayaan klien.
  • Sertifikat dikeluarkan untuk domain yang berbeda. Sekali lagi, ini akan menghasilkan pesan yang lebih jelas, tetapi saya akan menyatakan perbaikannya jika ini penyebabnya. Resolusi dalam hal ini adalah mendapatkan server (tampaknya bukan milik Anda) untuk menggunakan sertifikat yang benar.

Karena, kegagalan mendasar tidak dapat ditunjukkan, lebih baik untuk mengaktifkan -Djavax.net.debug=allflag untuk mengaktifkan debugging koneksi SSL yang dibuat. Dengan debug diaktifkan, Anda dapat menentukan aktivitas apa yang gagal dalam jabat tangan.

Memperbarui

Berdasarkan perincian yang sekarang tersedia, tampaknya masalahnya disebabkan oleh jalur perwalian sertifikat yang tidak lengkap antara sertifikat yang dikeluarkan ke server, dan root CA. Dalam kebanyakan kasus, ini karena sertifikat CA root tidak ada di toko kepercayaan, yang mengarah ke situasi di mana jalur kepercayaan sertifikat tidak ada; sertifikat pada dasarnya tidak dipercaya oleh klien. Browser dapat memberikan peringatan sehingga pengguna dapat mengabaikan ini, tetapi hal yang sama tidak berlaku untuk klien SSL (seperti kelas HttpsURLConnection , atau perpustakaan Klien HTTP seperti Klien Apache HttpComponents ).

Sebagian besar kelas / pustaka klien ini akan bergantung pada toko kepercayaan yang digunakan oleh JVM untuk validasi sertifikat. Dalam kebanyakan kasus, ini akan menjadi cacertsfile di direktori JRE_HOME / lib / security. Jika lokasi toko kepercayaan telah ditentukan menggunakan properti sistem JVM javax.net.ssl.trustStore, maka toko di jalur itu biasanya yang digunakan oleh perpustakaan klien. Jika Anda ragu, lihat Merchantkelas Anda , dan cari tahu kelas / pustaka yang digunakannya untuk membuat koneksi.

Menambahkan sertifikat server yang mengeluarkan CA ke toko kepercayaan ini harus menyelesaikan masalah. Anda dapat merujuk ke jawaban saya pada pertanyaan terkait tentang cara mendapatkan alat untuk tujuan ini, tetapi utilitas Java keytool cukup untuk tujuan ini.

Peringatan : Toko kepercayaan pada dasarnya adalah daftar semua CA yang Anda percayai. Jika Anda memasukkan sertifikat yang bukan milik CA yang tidak Anda percayai, maka koneksi SSL / TLS ke situs yang memiliki sertifikat yang dikeluarkan oleh entitas itu dapat didekripsi jika kunci privat tersedia.

Pembaruan # 2: Memahami output dari jejak JSSE

Keystore dan truststores yang digunakan oleh JVM biasanya terdaftar di awal, agak seperti yang berikut:

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 : 

Jika truststore yang salah digunakan, maka Anda harus mengimpor kembali sertifikat server ke yang benar, atau mengkonfigurasi ulang server untuk menggunakan yang terdaftar (tidak disarankan jika Anda memiliki beberapa JVM, dan semuanya digunakan untuk berbagai kebutuhan).

Jika Anda ingin memverifikasi apakah daftar sertifikat kepercayaan berisi sertifikat yang diperlukan, maka ada bagian yang sama, yang dimulai dengan:

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

Anda harus mencari apakah CA server adalah subjek.

Proses jabat tangan akan memiliki beberapa entri yang menonjol (Anda harus tahu SSL untuk memahaminya secara detail, tetapi untuk tujuan debugging masalah saat ini, cukuplah untuk mengetahui bahwa handshake_failure biasanya dilaporkan di ServerHello.

1. ClientHello

Serangkaian entri akan dilaporkan ketika koneksi sedang diinisialisasi. Pesan pertama yang dikirim oleh klien dalam pengaturan koneksi SSL / TLS adalah pesan ClientHello, biasanya dilaporkan dalam log sebagai:

*** 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 }
***

Perhatikan cipher suite yang digunakan. Ini mungkin harus setuju dengan entri dalam file merchant.properties Anda, untuk konvensi yang sama mungkin digunakan oleh perpustakaan bank. Jika konvensi yang digunakan berbeda, tidak ada alasan untuk khawatir, karena ServerHello akan menyatakan demikian, jika cipher suite tidak kompatibel.

2. ServerHello

Server merespons dengan ServerHello, yang akan menunjukkan apakah pengaturan koneksi dapat dilanjutkan. Entri dalam log biasanya dari jenis berikut:

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

Perhatikan paket sandi yang telah dipilihnya; suite terbaik ini tersedia untuk server dan klien. Biasanya suite sandi tidak ditentukan jika ada kesalahan. Sertifikat server (dan opsional seluruh rantai) dikirim oleh server, dan akan ditemukan dalam entri sebagai:

*** 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
***

Jika verifikasi sertifikat berhasil, Anda akan menemukan entri yang mirip dengan:

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

Salah satu langkah di atas tidak akan berhasil, sehingga kegagalan handshake_f, untuk handshake biasanya selesai pada tahap ini (tidak benar-benar, tetapi tahap-tahap berikutnya dari handshake biasanya tidak menyebabkan kegagalan handshake). Anda harus mengetahui langkah mana yang gagal, dan memposting pesan yang sesuai sebagai pembaruan untuk pertanyaan (kecuali Anda sudah memahami pesannya, dan Anda tahu apa yang harus dilakukan untuk menyelesaikannya).


Silakan kirim apa pun yang Anda punya, jika Anda bisa, sehingga saya dapat memperbarui jawabannya dengan yang lebih spesifik.
Vineet Reynolds

1
Ok Vineet, saya tidak tahu bagaimana menghadapinya, saya sudah kelelahan. Saya menemukan cara untuk memeriksa URL server dengan openssl "openssl s_client -connect servername: 4402", dan lihat apa yang saya dapatkan: img225.imageshack.us/img225/8999/screenshoturr.png
Denees

@hh, sepertinya sertifikat server dikeluarkan oleh entitas yang tidak ada di toko kepercayaan yang digunakan oleh OpenSSL, dan juga mungkin tidak ada di toko kepercayaan yang digunakan oleh server Anda (klien), ketika terhubung ke server. Dalam hal ini, Anda harus mengimpor sertifikat CA yang mengeluarkan sertifikat ( dan bukan server ) ke toko kepercayaan (OpenSSL / server Anda) klien Anda.
Vineet Reynolds

1
Yah, mungkin itu mengandalkan cacerts. Tetapi Anda dapat menentukan ini hanya jika Anda memahami output dari debug jaringan. Jika Anda ingin memeriksa ini, Anda harus menggunakan keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacertsperintah untuk mencetak konten. Kemudian verifikasi apakah sertifikat dalam cacerts cocok dengan CA dari sertifikat bank.
Vineet Reynolds

5
Default biasanya changeit. Kecuali jika itu diubah.
Vineet Reynolds

20

Menginstal Java Cryptography Extension (JCE) Kekuatan Tidak Terbatas ( untuk JDK7 | untuk JDK8 ) mungkin memperbaiki bug ini. Buka zip file dan ikuti readme untuk menginstalnya.


16

Kegagalan jabat tangan bisa menjadi implementasi protokol TLSv1 yang bermasalah.

Dalam kasus kami ini membantu dengan java 7:

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

JVM akan bernegosiasi dalam urutan ini. Server dengan pembaruan terbaru akan melakukan 1.2, yang kereta akan turun ke v1 dan yang bekerja dengan v1 serupa di java 7.


1
Ini membantu saya. Ada ClientHello saya, tetapi tidak ada server, akhirnya cukup tiba-tiba. Ini memperbaikinya untuk saya di Jawa 7. Terima kasih banyak.
virgo47

15

Ini juga bisa terjadi ketika klien perlu menunjukkan sertifikat. Setelah server mencantumkan rantai sertifikat, hal berikut dapat terjadi:

3. Permintaan Sertifikat Server akan mengeluarkan permintaan sertifikat dari klien. Permintaan akan mencantumkan semua sertifikat yang diterima server.

*** 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. Rantai Sertifikat Klien Ini adalah sertifikat yang dikirim klien ke server.

*** 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 

Jika tidak ada sertifikat di rantai dan server memerlukannya, Anda akan mendapatkan kesalahan jabat tangan di sini. Kemungkinan penyebabnya adalah jalur ke sertifikat Anda tidak ditemukan.

5. Verifikasi Sertifikat Klien meminta server untuk memverifikasi sertifikat

*** CertificateVerify
... payload of verify check

Langkah ini hanya akan terjadi jika Anda mengirim sertifikat.

6. Selesai Server akan merespons dengan respons verifikasi

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

dalam kasus saya sepertinya semua langkah baik-baik saja tetapi masih mendapatkan kesalahan jabat tangan.
tibi

jawaban yang sangat bagus ... tetapi semua ini ok dalam kegagalan jabat tangan saya tetapi saya masih mengalami kegagalan. dapatkah Anda melihat pertanyaan serupa saya?
tibi

Kegagalan untuk menampilkan sertifikat klien bukanlah kesalahan dalam TLS. Jika server memerlukan sertifikat klien dan satu tidak disajikan, itu akan menutup koneksi.
Marquis of Lorne

@ EJP itu benar itu bukan kesalahan dalam TLS namun koneksi gagal muncul sebagai kesalahan dalam Kode Java.
Brig

1
@ Brig Tapi bukan sebagai peringatan, yang merupakan jawaban dari jawaban ini, dan tentang pertanyaan apa.
Marquis of Lorne

15

Saya tidak berpikir ini menyelesaikan masalah kepada penanya pertama, tetapi bagi orang Google yang datang ke sini untuk mendapatkan jawaban:


Pada pembaruan 51, java 1.8 dilarang [1] RC4 cipher secara default, seperti yang bisa kita lihat di halaman Catatan Rilis:

Bug Fix: Melarang suite cipher RC4

RC4 sekarang dianggap sebagai sandi yang dikompromikan.

Suite cipher RC4 telah dihapus dari daftar suite cipher suite yang diaktifkan standar klien dan dalam implementasi Oracle JSSE. Suite sandi ini masih dapat diaktifkan oleh SSLEngine.setEnabledCipherSuites()dan SSLSocket.setEnabledCipherSuites()metode. Lihat JDK-8077109 (bukan publik).

Jika server Anda memiliki preferensi yang kuat untuk sandi ini (atau hanya gunakan sandi ini) ini dapat memicu handshake_failurepada java.

Anda dapat menguji koneksi ke server yang mengaktifkan sandi RC4 (pertama, coba tanpa enabledargumen untuk melihat apakah pemicu handshake_failure, lalu atur 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

Saya memiliki kesalahan ini ketika saya mencoba menggunakan JDK 1.7. Ketika saya memutakhirkan JDK saya ke jdk1.8.0_66 semua mulai berfungsi dengan baik.

Jadi solusi paling sederhana untuk masalah ini adalah - tingkatkan JDK Anda dan itu bisa mulai berfungsi dengan baik.


4
Bagus. Solusi paling sederhana adalah dengan meningkatkan JDK? : D Tahukah Anda betapa rumitnya hal itu dapat bergantung pada lingkungan di mana hal itu dilakukan? Misalkan Amazon menjalankan JDK 7 dan sekarang perlu meng-upgrade ke JDK 8 tiba-tiba ... Bagus!
Arturas M

1
Pemutakhiran versi kecil yang sederhana menyelesaikan masalah ini untuk saya .. dari JDK 11.0.1 hingga 11.0.6
Clint

4

Dalam kasus saya, cert diimpor, kesalahan tetap, diselesaikan dengan menambahkan System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");sebelum terhubung


Bekerja untuk saya di java 1.8. Terima kasih :)
Supun Amarasinghe

3

Dengan asumsi Anda menggunakan protokol SSL / TLS yang tepat, mengonfigurasi keyStoredan trustStore, dan mengonfirmasi dengan benar bahwa tidak ada masalah dengan sertifikat itu sendiri, Anda mungkin perlu memperkuat algoritme keamanan Anda .

Seperti disebutkan dalam jawaban Vineet , satu kemungkinan alasan Anda menerima kesalahan ini adalah karena suites cipher yang tidak kompatibel sedang digunakan. Dengan memperbarui guci local_policydan US_export_policysaya di securityfolder JDK saya dengan yang disediakan di Java Cryptography Extension (JCE) , saya berhasil menyelesaikan jabat tangan.


2

Saya menemui masalah yang sama hari ini dengan klien OkHttp untuk MENDAPATKAN url berbasis https. Itu disebabkan oleh versi protokol Https dan ketidaksesuaian metode Cipher antara sisi server dan sisi klien .

1) periksa situs web Anda https versi Protokol dan metode Cipher.

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

Anda akan mendapatkan banyak info detail, info kunci terdaftar sebagai berikut:

SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
2) konfigurasi klien http Anda, misalnya, dalam kasus klien OkHttp :
@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();
    }
}

Ini akan mendapatkan apa yang kita inginkan.


2

Saya menemukan server HTTPS yang gagal dengan cara ini jika proses klien Java saya dikonfigurasi dengan

-Djsse.enableSNIExtension=false

Sambungan gagal dengan handshake_failuresetelah ServerHelloselesai tetapi sebelum aliran data dimulai.

Tidak ada pesan kesalahan yang jelas yang mengidentifikasi masalah, kesalahannya hanya tampak

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

Saya mengisolasikan masalah dengan mencoba dengan dan tanpa opsi " -Djsse.enableSNIExtension=false"


Saya mendapatkan kesalahan yang sama saat menghubungkan ke kotak pasir GDAX, ada solusi untuk ini?
Nitin Vavdiya

1

Milik saya adalah TLSkesalahan versi yang tidak kompatibel.

Sebelumnya TLSv1saya mengubahnya, TLSV1.2ini menyelesaikan masalah saya.


1

Saya menggunakan klien http com.google.api. Ketika saya berkomunikasi dengan situs internal perusahaan, saya mendapatkan masalah ini ketika saya salah menggunakan https, bukan http.

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)

Tidak, kamu tidak bisa. Server tidak dapat mengirim peringatan TLS jika tidak berbicara TLS.
Marquis of Lorne

Saya telah memperbarui komentar saya untuk menunjukkan output dari program saya. Ini nyata. Sangat menghargai jika Anda akan menghapus suara turun.
thebiggestlebowski

Ini nyata, tetapi tidak disebabkan oleh berbicara TLS ke server plaintext. Server plaintext tidak berbicara TLS, menurut definisi, dan oleh karena itu Anda tidak mungkin menerima peringatan TLS darinya, menurut definisi. Anda tidak memiliki informasi tentang siapa yang menurunkan jawaban Anda.
Marquis of Lorne

Saya berasumsi Anda terpilih - permintaan maaf saya jika itu tidak terjadi. Pesan kesalahan saya sama persis dengan judul pertanyaan ini. Ini adalah jalur / uji kasus yang valid untuk mendapatkan pesan kesalahan ini dan saya memiliki solusi yang dapat membantu orang lain. Dengan hormat, saya tidak berpikir itu penting jika disebabkan oleh respons kesalahan server TLS atau tidak. Seseorang akan mendarat di sini dari google dan jawaban saya mungkin membantu jika mereka melakukan kesalahan yang sama.
thebiggestlebowski

Saya belum mengatakan apa-apa tentang pesan kesalahan Anda. Saya mengomentari klaim Anda yang salah bahwa itu karena 'keliru menggunakan HTTPS, bukan HTTP'. Tidak, dan tidak bisa, karena alasan yang telah saya nyatakan dan yang belum Anda sebutkan. Menggunakan HTTP tentu akan membuatnya hilang, jelas, karena tidak ada peringatan TLS di plaintext, tetapi tidak mengatasi masalah yang mendasarinya.
Marquis of Lorne

1

Saya memiliki masalah serupa; meningkatkan ke Apache HTTPClient 4.5.3 memperbaikinya.


1

Ugg! Ini ternyata hanya menjadi masalah versi Java untuk saya. Saya mendapat kesalahan handshake menggunakan JRE 1.6 dan semuanya bekerja dengan baik menggunakan JRE 1.8.0_144.


0

Penafian: Saya tidak tahu apakah jawabannya akan bermanfaat bagi banyak orang, hanya berbagi karena mungkin.

Saya mendapatkan kesalahan ini saat menggunakan Parasoft SOATest untuk mengirim permintaan XML (SOAP).

Masalahnya adalah saya telah memilih alias yang salah dari dropdown setelah menambahkan sertifikat dan mengautentikasi itu.


0

Dalam kasus saya, situs web hanya dapat menggunakan TLSv1.2. dan saya menggunakan apache httpclient 4.5.6, saya menggunakan kode ini dan menginstal jce untuk menyelesaikan ini (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

kode:

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

Untuk memecahkan masalah dari perspektif pengembang (item 1) dan admin sistem (item 2 dan 3):

  1. Aktifkan debug jabat tangan SSL di Java via -Djavax.net.debug=ssl:handshake:verbose.
  2. Instal ssldump di server melalui sudo apt install ssldumpatau kompilasi dari sumber dengan mengikuti tautan ini jika Anda mengamati Unknown valuedalam sandi ketika Anda menjalankan langkah di bawah ini.
  3. Di server, sudo ssldump -k <your-private-key> -i <your-network-interface>
  4. Periksa log tentang alasan sebenarnya dari kegagalan tersebut.

Contoh handshake log ssldump yang tidak berfungsi:

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

Contoh jabat tangan sukses dari ssldump log

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

Contoh log Java tidak berfungsi

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

Dalam kasus saya, saya punya satu masalah dengan versi 1.1. Saya mereproduksi masalah dengan mudah dengan ikal. Server tidak mendukung versi yang lebih rendah dari TLS1.2.

Masalah jabat tangan yang diterima ini:

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

Dengan versi 1.2 itu berfungsi dengan baik:

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

Server menjalankan Weblogic, dan menambahkan argumen ini di setEnvDomain.sh membuatnya bekerja dengan TLSv1.1:

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

0

Masalah ini terjadi karena versi java. Saya menggunakan 1.8.0.231 JDK dan mendapatkan kesalahan ini. Saya telah menurunkan versi java saya dari 1.8.0.231 ke 1.8.0.171, Sekarang Ini berfungsi dengan baik.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.