Önemli uyarı alındı: SSLHandshakeException aracılığıyla handshake_failure


134

Yetkili SSL bağlantısıyla ilgili bir sorunum var. İstemci Yetkili SSL sertifikası ile harici sunucuya bağlanan Struts Action'ı oluşturdum. Eylemimde banka sunucusuna bazı verileri göndermeye çalışıyorum ama şansım yok çünkü sunucudan kaynaklanan şu hata var:

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

Sunucuya veri gönderen eylem sınıfımdaki Yöntemim

//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 dosyam:

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

İlk defa bunun bir sertifika sorunu olduğunu düşündüm, onu .pfx'ten .jks'e çevirdim, ancak aynı hatayı hiçbir değişiklik olmadan aldım.


güvenli deponuza sunucunun SSL sertifikasını eklediniz mi?
happymeal

üzgünüm, bunun ne anlama geldiğini anlamıyorum,
SSL'de yeniyim

Uygulamanızın java varsayılan güven deposunu kullandığını varsayacağım. Varsayılan güven deposu <java-home> / lib / security / cacerts şeklindedir. sunucunun url'sini tarayıcınızla açın ve tüm SSL sertifikalarını indirin; herhangi bir zincir / ara sertifikalar dahil. sonra tüm bu sertifikaları güven mağazasına ekleyin.
happymeal

İstemci kimlik doğrulama sertifikası nedeniyle url'yi tarayıcıda açamıyorum, bu bağlantıya yalnızca istemcilerden aldığım belirli parametreleri gönderebilirim.
Denees

sadece url'yi aç. tarayıcınızda gördüğünüz tüm hataları yok sayın. url'ye eriştiğinizde, tarayıcınızın adres çubuğunda bir asma kilit simgesi görmelisiniz. buna tıklayın ve sunucunun SSL sertifikasını indirin.
happymeal

Yanıtlar:


252

El sıkışma hatası çeşitli nedenlerden dolayı meydana gelmiş olabilir:

  • İstemci ve sunucu tarafından kullanılan uyumsuz şifre paketleri. Bu, istemcinin sunucu tarafından desteklenen bir şifre paketini kullanmasını (veya etkinleştirmesini) gerektirir.
  • Kullanımdaki uyumsuz SSL sürümleri (sunucu yalnızca TLS v1'i kabul ederken, istemci yalnızca SSL v3 kullanabilir). Yine, istemcinin SSL / TLS protokolünün uyumlu bir sürümünü kullandığından emin olması gerekebilir.
  • Sunucu sertifikası için eksik güven yolu; sunucunun sertifikasına muhtemelen istemci tarafından güvenilmiyor. Bu genellikle daha ayrıntılı bir hatayla sonuçlanır, ancak oldukça olasıdır. Genellikle düzeltme, sunucunun CA sertifikasını istemcinin güven deposuna aktarmaktır.
  • Sertifika, farklı bir alan adı için verilir. Yine, bu daha ayrıntılı bir mesajla sonuçlanırdı, ancak nedeninin bu olması durumunda düzeltmeyi burada belirteceğim. Bu durumda çözüm, sunucunun (sizinki gibi görünmüyor) doğru sertifikayı kullanması olacaktır.

Altta yatan arıza tam olarak belirlenemediğinden, -Djavax.net.debug=allkurulan SSL bağlantısının hata ayıklamasını etkinleştirmek için bayrağı açmak daha iyidir . Hata ayıklama açıkken, anlaşmadaki hangi aktivitenin başarısız olduğunu belirleyebilirsiniz.

Güncelleme

Şu anda mevcut olan ayrıntılara göre, sorunun sunucuya verilen sertifika ile kök CA arasındaki eksik sertifika güven yolundan kaynaklandığı görülmektedir. Çoğu durumda, bunun nedeni kök CA'nın sertifikasının güven deposunda bulunmaması ve bunun bir sertifika güven yolunun var olamayacağı duruma yol açmasıdır; sertifika, istemci tarafından esasen güvenilmezdir. Tarayıcılar, kullanıcıların bunu görmezden gelebilmesi için bir uyarı sunabilir, ancak aynı durum SSL istemcileri için geçerli değildir ( HttpsURLConnection sınıfı veya Apache HttpComponents Client gibi herhangi bir HTTP İstemci kitaplığı gibi ).

Bu istemci sınıflarının / kitaplıklarının çoğu, sertifika doğrulaması için JVM tarafından kullanılan güven deposuna güvenir. Çoğu durumda, bu cacertsJRE_HOME / lib / security dizinindeki dosya olacaktır . Güven deposunun konumu JVM sistem özelliği kullanılarak belirtilmişse javax.net.ssl.trustStore, bu yoldaki depo genellikle istemci kitaplığı tarafından kullanılan depodur. Şüpheniz varsa, şuna bir bakın:Merchant sınıfınıza ve bağlantı kurmak için kullandığı sınıfı / kütüphaneyi belirleyin.

CA'yı veren sunucunun sertifikasını bu güven deposuna eklemek sorunu çözmelidir. Sen benim başvurabilirsiniz araçları alma konusunda ilgili soru üzerine cevap bu amaçla, ancak Java'nın keytool yarar bu amaç için yeterlidir.

Uyarı : Güven deposu, esasen güvendiğiniz tüm CA'ların listesidir. Güvenmediğiniz bir CA'ya ait olmayan bir sertifika koyarsanız, o varlık tarafından verilen sertifikalara sahip sitelere SSL / TLS bağlantılarının şifresi, özel anahtar mevcutsa çözülebilir.

Güncelleme # 2: JSSE izlemesinin çıktısını anlama

JVM tarafından kullanılan anahtar deposu ve güven depoları genellikle aşağıda olduğu gibi en başta listelenir:

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 : 

Yanlış güven deposu kullanılıyorsa, sunucunun sertifikasını doğru olana yeniden aktarmanız veya sunucuyu listelenen birini kullanacak şekilde yeniden yapılandırmanız gerekir (birden fazla JVM'niz varsa ve hepsi farklı amaçlar için kullanılıyorsa önerilmez) ) ihtiyacı vardır.

Güven sertifikaları listesinin gerekli sertifikaları içerip içermediğini doğrulamak isterseniz, aynı için şu şekilde başlayan bir bölüm vardır:

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

Sunucunun CA'sının bir konu olup olmadığını aramanız gerekir.

El sıkışma işleminin birkaç göze çarpan girişi olacaktır (bunları ayrıntılı olarak anlamak için SSL'yi bilmeniz gerekir, ancak mevcut sorunu gidermek amacıyla, genellikle ServerHello'da bir handshake_failure'un rapor edildiğini bilmek yeterli olacaktır.

1. MüşteriMerhaba

Bağlantı başlatılırken bir dizi giriş rapor edilecektir. İstemci tarafından SSL / TLS bağlantı kurulumunda gönderilen ilk mesaj ClientHello mesajıdır ve genellikle günlüklerde şu şekilde rapor edilir:

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

Kullanılan şifre paketlerine dikkat edin. Bu , merchant.properties dosyanızdaki girişe uymak zorunda kalabilir , çünkü aynı sözleşme bankanın kitaplığı tarafından da kullanılabilir. Kullanılan kural farklıysa, endişelenmenize gerek yoktur, çünkü ServerHello şifre paketi uyumsuzsa bunu belirtecektir.

2. ServerHello

Sunucu, bağlantı kurulumunun devam edip edemeyeceğini gösteren bir ServerHello ile yanıt verir. Günlüklere girişler genellikle aşağıdaki türdedir:

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

Seçtiği şifre paketine dikkat edin; bu, hem sunucu hem de istemci için mevcut en iyi pakettir. Bir hata varsa genellikle şifre paketi belirtilmez. Sunucunun sertifikası (ve isteğe bağlı olarak tüm zincirin) sunucu tarafından gönderilir ve girişlerde şu şekilde bulunur:

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

Sertifikanın doğrulanması başarılı olduysa, aşağıdakine benzer bir giriş bulacaksınız:

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

El sıkışma bu aşamada tipik olarak tamamlandığından (gerçekten değil, ancak el sıkışmanın sonraki aşamaları tipik olarak bir el sıkışma başarısızlığına neden olmaz) için yukarıdaki adımlardan biri başarılı olamazdı ve bu da el sıkışma başarısızlığıyla sonuçlanırdı. Hangi adımın başarısız olduğunu bulmanız ve uygun mesajı soruya bir güncelleme olarak göndermeniz gerekir (mesajı zaten anlamadıysanız ve çözmek için ne yapmanız gerektiğini bilmiyorsanız).


Yanıtı daha spesifik bir yanıtla güncelleyebilmem için, elinizde ne varsa lütfen gönderin.
Vineet Reynolds

1
Tamam Vineet, bununla nasıl başa çıkacağımı bilemiyorum, zaten çoktan bitkinim. Openssl "openssl s_client -connect servername: 4402" ile sunucu URL'sini kontrol etmenin bir yolunu buldum ve ne aldığıma
Denees

@hoss, sunucunun sertifikası OpenSSL tarafından kullanılan güven deposunda bulunmayan ve muhtemelen sunucunuz (istemci) tarafından bağlanıldığında kullanılan güven deposunda bulunmayan bir varlık tarafından verilmiş gibi görünüyor . sunucu. Bu durumda, sertifikayı veren ( sunucuyu değil ) CA'nın sertifikasını istemcinizin (OpenSSL / sunucunuz) güven deposuna aktarmanız gerekir .
vineet Reynolds

1
Belki de cacerts'a güveniyor olabilir. Ancak bunu yalnızca ağ hata ayıklamasının çıktısını anlarsanız belirleyebilirsiniz. Bunu kontrol etmek istiyorsanız keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts, içeriği yazdırmak için komutu kullanmanız gerekir . Ardından, cacerts içindeki sertifikaların banka sertifikasının CA ile eşleşip eşleşmediğini doğrulayın.
Vineet Reynolds

5
Varsayılan değer genellikle changeit. Değiştirilmediği sürece.
Vineet Reynolds


16

El sıkışma hatası, hatalı bir TLSv1 protokol uygulaması olabilir.

Bizim durumumuzda bu, java 7'ye yardımcı oldu:

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

Jvm bu sırayla müzakere edecek. En son güncellemeye sahip sunucular 1.2 yapacak, buggy olanlar v1'e düşecek ve java 7'deki benzer v1 ile çalışacak.


1
Bu bana yardımcı oldu. ClientHello'm vardı, ancak sunucu yok, son oldukça ani oldu. Bu benim için Java 7'de düzeltildi. Çok teşekkür ederim.
Başak47

15

Bu, müşterinin bir sertifika sunması gerektiğinde de gerçekleşebilir. Sunucu sertifika zincirini listeledikten sonra aşağıdakiler olabilir:

3. Sertifika İsteği Sunucu, istemciden bir sertifika isteği yayınlayacaktır. İstek, sunucunun kabul ettiği tüm sertifikaları listeleyecektir.

*** 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. İstemci Sertifika Zinciri Bu, istemcinin sunucuya gönderdiği sertifikadır.

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

Zincirde bir sertifika yoksa ve sunucu bir sertifika gerektiriyorsa, burada el sıkışma hatasını alırsınız. Muhtemel bir neden, sertifikanızın yolunun bulunamamış olmasıdır.

5. Sertifika Doğrulama İstemci, sunucudan sertifikayı doğrulamasını ister

*** CertificateVerify
... payload of verify check

Bu adım yalnızca bir sertifika gönderiyorsanız gerçekleşir.

6. Bitti Sunucu bir doğrulama yanıtı ile yanıt verecektir

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

benim durumumda, tüm adımlar iyi görünüyor, ancak yine de el sıkışma hatası alıyorum.
tibi

çok güzel cevap ... ama el sıkışma başarısızlığımda tüm bunlar tamam ama yine de başarısızlık bende. benzer soruma bir göz atabilir misin?
tibi

Bir istemci sertifikasının sunulmaması TLS'de herhangi bir hata değildir. Sunucu bir istemci sertifikası gerektiriyorsa ve bir tane sunulmuyorsa, bağlantıyı kapatır.
Marquis of Lorne

@EJP bu doğru, TLS'de bir hata değil, ancak başarısız bağlantı Java Kodunda bir hata olarak görünüyor.
Brig

1
@Brig Ama bir uyarı olarak değil, bu cevabın söylediği ve sorunun ne hakkında olduğu.
Marquis of Lorne

15

Bunun ilk soruyu soran için sorunu çözdüğünü sanmıyorum, ancak yanıtlar için buraya gelen Google çalışanları için:


Sürüm Notları sayfasında görebileceğimiz gibi, 51 güncellemesinde java 1.8 varsayılan olarak [1] RC4 şifrelerini yasakladı:

Hata Düzeltmesi: RC4 şifre paketlerini yasaklayın

RC4 artık güvenliği ihlal edilmiş bir şifre olarak kabul ediliyor.

RC4 şifre paketleri, Oracle JSSE uygulamasında hem istemci hem de sunucu varsayılan olarak etkinleştirilmiş şifre paketi listesinden kaldırılmıştır. Bu şifre paketleri SSLEngine.setEnabledCipherSuites()ve SSLSocket.setEnabledCipherSuites()yöntemleri ile yine de etkinleştirilebilir . Bkz. JDK-8077109 (herkese açık değildir).

Sunucunuzun bu şifre için güçlü bir tercihi varsa (veya yalnızca bu şifreyi kullanın), bu bir handshake_failureon java'yı tetikleyebilir .

RC4 şifrelerini etkinleştirerek sunucuya bağlanmayı test edebilirsiniz (önce a'yı enabledtetikleyip tetiklemediğini görmek için bağımsız değişken olmadan deneyin handshake_failure, ardından şunu ayarlayın 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'yi kullanmaya çalışırken bu hatayı aldım. JDK'mı jdk1.8.0_66'ya yükselttiğimde her şey düzgün çalışmaya başladı.

Dolayısıyla, bu problem için en basit çözüm , JDK'nızı yükseltmek olabilir ve iyi çalışmaya başlayabilir.


4
Güzel. En basit çözüm JDK'yı yükseltmek mi? : D Yapıldığı ortama bağlı olarak bunun ne kadar karmaşık olabileceğini biliyor musunuz? Diyelim ki Amazon JDK 7 çalıştırdı ve şimdi aniden JDK 8'e yükseltmesi gerekecek ... Güzel!
Arturas M

1
Basit bir küçük sürüm yükseltmesi bu sorunu benim için çözdü .. JDK 11.0.1'den 11.0.6'ya
Clint

5

Benim durumumda, sertifika içe aktarıldı, hata kaldı, System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");bağlanmadan önce ekleyerek bunu çözdü


Benim için java 1.8'de çalıştı. Teşekkürler :)
Supun Amarasinghe

3

Doğru SSL / TLS protokollerini kullandığınızı, ve'nizi doğru şekilde yapılandırdığınızı keyStoreve trustStoresertifikaların kendileriyle ilgili herhangi bir sorun olmadığını doğruladığınızı varsayarsak , güvenlik algoritmalarınızı güçlendirmeniz gerekebilir .

Vineet'in cevabında belirtildiği gibi , bu hatayı almanızın olası bir nedeni, uyumsuz şifre paketlerinin kullanılmasıdır. JDK klasörümdeki local_policyve US_export_policykavanozlarımı Java Şifreleme Uzantısı'nda (JCE)security sağlananlarla güncelleyerek , el sıkışmayı başarıyla tamamladım.


2

Https tabanlı bir url almak için bugün OkHttp istemcisiyle aynı sorunu yaşıyorum. Bu edilmiş sunucu tarafında ve istemci tarafı arasındaki Https protokolü sürümü ve Şifreleme yöntemi uyumsuzluğu nedeniyle .

1) web sitenizin https Protokolü sürümünü ve Şifreleme yöntemini kontrol edin.

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

Birçok detay bilgisi alacaksınız, temel bilgiler aşağıdaki gibi listelenmiştir:

SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
2) http istemcinizi, örneğin, OkHttp istemci durumunda yapılandırın :
@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();
    }
}

Bu istediğimizi alacak.


2

Java istemci işlemim ile yapılandırıldıysa bu şekilde başarısız olan bir HTTPS sunucusu buldum

-Djsse.enableSNIExtension=false

Bağlantı başarıyla tamamlandıktan handshake_failuresonra, ServerHelloancak veri akışı başlamadan önce başarısız oldu .

Sorunu tanımlayan net bir hata mesajı yoktu, hata sadece şuna benziyordu

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" Seçeneğini kullanarak ve kullanmayarak sorunu izole ettim


GDAX sandbox'a bağlanırken aynı hatayı alıyorum, bunun için herhangi bir çözüm var mı?
Nitin Vavdiya

1

Benimki bir TLS sürüm uyumsuz bir hataydı.

Daha TLSv1önce değiştirdim, TLSV1.2bu sorunumu çözdü.


1

Com.google.api http istemcisini kullanıyorum. Şirket içi bir site ile iletişim kurduğumda, yanlışlıkla http yerine https kullandığımda bu sorunu yaşadım.

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)

Hayır yapamazsın. Sunucu, TLS konuşmuyorsa bir TLS uyarısı gönderemez.
Marquis of Lorne

Yorumumu programımın çıktısını gösterecek şekilde güncelledim. Bu gerçek. Olumsuz oyu kaldırırsanız memnun olurum.
thebiggestlebowski

Bu gerçektir, ancak TLS'yi bir düz metin sunucusuyla konuşmaktan kaynaklanmaz. Bir düz metin sunucusu tanımı gereği TLS'den bahsetmez ve bu nedenle tanım gereği muhtemelen ondan bir TLS uyarısı alamazsınız. Cevabınızı kimin reddettiği hakkında hiçbir bilginiz yok.
Marquis of Lorne

Olumsuz oy kullandığınızı varsaydım - durum böyle değilse özür dilerim. Hata mesajım bu sorunun başlığıyla tam olarak eşleşiyor. Bu hata mesajını almak geçerli bir yol / test vakası ve başkalarına yardımcı olabilecek bir çözümüm var. Saygılarımla, bunun bir TLS sunucu hatası yanıtından kaynaklanmasının önemli olduğunu sanmıyorum. Birisi buraya google'dan inecek ve aynı hatayı yaparsa cevabım yardımcı olabilir.
thebiggestlebowski

Hata mesajınız hakkında hiçbir şey söylemedim. Yanlış bir şekilde 'HTTP yerine yanlışlıkla HTTPS kullanmaktan' kaynaklandığına dair yanlış iddianız üzerine yorum yapıyorum. Belirtmiş olduğum ve hiçbir şekilde değinmediğiniz nedenlerden ötürü değildir ve olamaz. Düz metinde TLS uyarısı olmadığından, ancak temeldeki sorunu çözmediğinden, HTTP kullanmak kesinlikle onu ortadan kaldıracaktır.
Marquis of Lorne

1

Benzer bir sorun yaşadım; Apache HTTPClient 4.5.3'e yükseltme sorunu çözdü.


1

Ugg! Bu benim için basitçe bir Java sürümü sorunu oldu. JRE 1.6 kullanarak el sıkışma hatasını aldım ve JRE 1.8.0_144 kullanarak her şey mükemmel çalıştı.


0

Sorumluluk reddi: Cevabın birçok insan için yararlı olup olmayacağını bilmiyorum, sadece paylaşabilir, çünkü olabilir.

Bu hatayı Parasoft SOATest'i XML istek (SABUN) göndermek için kullanırken alıyordum.

Sorun, sertifikayı ekledikten ve doğruladıktan sonra açılır menüden yanlış takma adı seçmiş olmamdı.


0

Benim durumumda, web sitesi sadece TLSv1.2'yi kullanabilir. ve apache httpclient 4.5.6 kullanıyorum, bu kodu kullanıyorum ve bunu çözmek için jce'yi kuruyorum (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

kod:

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

Geliştirici (öğe 1) ve sistem yöneticisi (öğe 2 ve 3) perspektifinden sorunları gidermek için:

  1. Java'da SSL anlaşması hata ayıklamasını etkinleştirin -Djavax.net.debug=ssl:handshake:verbose .
  2. Ssldump'ı sunucuya kurun sudo apt install ssldumpveya gözlemlerseniz bu bağlantıyı izleyerek kaynaktan derleyin.Unknown valueAşağıdaki adımı çalıştırdığınızda şifreli olarak .
  3. Sunucuda, sudo ssldump -k <your-private-key> -i <your-network-interface>
  4. Hatanın gerçek nedeni hakkındaki günlüğü kontrol edin .

Ssldump günlüğünün çalışmayan el sıkışma örneği:

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

Başarılı ssldump günlüğünün el sıkışması örneği

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

Çalışmayan Java günlüğü örneği

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

Benim durumumda 1.1 sürümüyle ilgili bir sorun yaşadım. Curl ile sorunu kolayca yeniden oluşturuyordum. Sunucu, TLS1.2'den daha düşük sürümleri desteklemiyordu.

El sıkışma sorunu yaşandı:

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

1.2 sürümü ile iyi çalışıyordu:

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

Sunucu bir Weblogic çalıştırıyordu ve bu bağımsız değişkeni setEnvDomain.sh içine eklemek, onu TLSv1.1 ile çalışmasını sağladı:

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

0

Bu sorun java sürümünden kaynaklanmaktadır. 1.8.0.231 JDK kullanıyordum ve bu hatayı alıyordum. Java sürümümü 1.8.0.231'den 1.8.0.171'e düşürdüm, Şimdi iyi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.