Nhận được cảnh báo nghiêm trọng: handshake_failure thông qua SSLHandshakeException


134

Tôi gặp sự cố với kết nối SSL được ủy quyền. Tôi đã tạo Struts Action kết nối với máy chủ bên ngoài bằng chứng chỉ SSL ủy quyền của khách hàng. Trong hành động của mình, tôi đang cố gắng gửi một số dữ liệu đến máy chủ ngân hàng nhưng không gặp may, vì tôi gặp phải lỗi từ máy chủ:

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

Phương thức của tôi từ lớp Hành động của tôi gửi dữ liệu đến máy chủ

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

Tập tin merchant.properies của tôi:

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

Lần đầu tiên tôi nghĩ đây là vấn đề về chứng chỉ, tôi đã chuyển đổi nó từ .pfx sang .jks, nhưng tôi có cùng một lỗi, không có thay đổi.


bạn đã thêm chứng chỉ ssl của máy chủ vào cửa hàng tin cậy của mình chưa?
happyymeal

xin lỗi, tôi không hiểu điều này có nghĩa là gì, tôi mới biết về SSL
Denees

Tôi sẽ cho rằng ứng dụng của bạn đang sử dụng kho ủy thác mặc định của java. Cửa hàng tin cậy mặc định là <java-home> / lib / security / cacerts. mở url của máy chủ bằng trình duyệt của bạn và tải xuống tất cả các ssl certs; bao gồm bất kỳ chuỗi / certs trung gian. sau đó thêm tất cả các certs vào cửa hàng tin cậy.
happyymeal

Tôi không thể mở url trong trình duyệt, vì chứng chỉ xác thực ứng dụng khách, tôi chỉ có thể gửi tới liên kết này các tham số cụ thể mà tôi nhận được từ khách hàng.
Denees

chỉ cần mở url. bỏ qua tất cả các lỗi mà bạn thấy trên trình duyệt của bạn. Khi bạn truy cập url, bạn sẽ thấy biểu tượng ổ khóa trên thanh địa chỉ của trình duyệt. nhấp vào đó và tải về chứng chỉ ssl của máy chủ.
happyymeal

Câu trả lời:


251

Lỗi bắt tay có thể xảy ra do nhiều lý do:

  • Các bộ mật mã không tương thích được sử dụng bởi máy khách và máy chủ. Điều này sẽ yêu cầu khách hàng sử dụng (hoặc kích hoạt) một bộ mật mã được máy chủ hỗ trợ.
  • Các phiên bản SSL không tương thích đang sử dụng (máy chủ có thể chỉ chấp nhận TLS v1, trong khi máy khách chỉ có thể sử dụng SSL v3). Một lần nữa, khách hàng có thể phải đảm bảo rằng nó sử dụng phiên bản tương thích của giao thức SSL / TLS.
  • Đường dẫn tin cậy không đầy đủ cho chứng chỉ máy chủ; chứng chỉ của máy chủ có thể không được khách hàng tin cậy. Điều này thường sẽ dẫn đến một lỗi dài dòng hơn, nhưng nó hoàn toàn có thể. Thông thường, cách khắc phục là nhập chứng chỉ CA của máy chủ vào kho ủy thác của khách hàng.
  • Giấy chứng nhận được cấp cho một tên miền khác nhau. Một lần nữa, điều này sẽ dẫn đến một thông điệp dài dòng hơn, nhưng tôi sẽ nêu cách khắc phục ở đây trong trường hợp đây là nguyên nhân. Độ phân giải trong trường hợp này sẽ là lấy máy chủ (nó không có vẻ là của bạn) để sử dụng chứng chỉ chính xác.

Vì, lỗi cơ bản không thể được xác định chính xác, tốt hơn là bật -Djavax.net.debug=allcờ để cho phép gỡ lỗi kết nối SSL được thiết lập. Khi gỡ lỗi được bật, bạn có thể xác định hoạt động nào trong quá trình bắt tay đã thất bại.

Cập nhật

Dựa trên các chi tiết hiện có, có vẻ như sự cố là do đường dẫn tin cậy chứng chỉ chưa hoàn chỉnh giữa chứng chỉ được cấp cho máy chủ và CA gốc. Trong hầu hết các trường hợp, điều này là do chứng chỉ CA gốc không có trong kho ủy thác, dẫn đến tình trạng không thể tồn tại đường dẫn tin cậy chứng chỉ; chứng chỉ về cơ bản là không tin cậy bởi khách hàng. Các trình duyệt có thể đưa ra cảnh báo để người dùng có thể bỏ qua điều này, nhưng điều tương tự không xảy ra đối với các máy khách SSL (như lớp HttpsURLConnection hoặc bất kỳ thư viện Máy khách HTTP nào như Máy khách HTTPComponents của Apache ).

Hầu hết các lớp / thư viện khách này sẽ dựa vào kho ủy thác được JVM sử dụng để xác thực chứng chỉ. Trong hầu hết các trường hợp, đây sẽ là cacertstệp trong thư mục JRE_HOME / lib / security. Nếu vị trí của cửa hàng tin cậy đã được chỉ định bằng cách sử dụng thuộc tính hệ thống JVM javax.net.ssl.trustStore, thì cửa hàng trong đường dẫn đó thường là nơi được thư viện khách sử dụng. Nếu bạn nghi ngờ, hãy xem Merchantlớp của bạn và tìm ra lớp / thư viện mà nó đang sử dụng để tạo kết nối.

Thêm CA cấp chứng chỉ của máy chủ vào cửa hàng ủy thác này phải giải quyết vấn đề. Bạn có thể tham khảo câu trả lời của tôi về một câu hỏi liên quan về việc nhận các công cụ cho mục đích này, nhưng tiện ích keytool Java là đủ cho mục đích này.

Cảnh báo : Cửa hàng ủy thác về cơ bản là danh sách tất cả các CA mà bạn tin tưởng. Nếu bạn đặt chứng chỉ không thuộc về CA mà bạn không tin tưởng, thì các kết nối SSL / TLS đến các trang web có chứng chỉ do thực thể đó cấp có thể được giải mã nếu khóa riêng có sẵn.

Cập nhật # 2: Tìm hiểu đầu ra của dấu vết JSSE

Kho khóa và kho ủy thác được JVM sử dụng thường được liệt kê ngay từ đầu, hơi giống như sau:

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 : 

Nếu kho tin sai được sử dụng, thì bạn sẽ cần nhập lại chứng chỉ của máy chủ sang đúng hoặc cấu hình lại máy chủ để sử dụng một chứng chỉ được liệt kê (không được khuyến nghị nếu bạn có nhiều JVM và tất cả chúng đều được sử dụng cho khác nhau nhu cầu).

Nếu bạn muốn xác minh xem danh sách các certs tin cậy có chứa các certs cần thiết hay không, thì có một phần tương tự, bắt đầu như sau:

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

Bạn sẽ cần tìm nếu CA của máy chủ là một chủ đề.

Quá trình bắt tay sẽ có một vài mục nổi bật (bạn sẽ cần biết SSL để hiểu chi tiết về chúng, nhưng với mục đích gỡ lỗi cho vấn đề hiện tại, sẽ đủ để biết rằng một handshake_failure thường được báo cáo trong ServerHello.

1. Khách hàng

Một loạt các mục sẽ được báo cáo khi kết nối đang được khởi tạo. Tin nhắn đầu tiên được gửi bởi khách hàng trong thiết lập kết nối SSL / TLS là tin nhắn ClientHello, thường được báo cáo trong nhật ký là:

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

Lưu ý các bộ mật mã được sử dụng. Điều này có thể phải đồng ý với mục trong tệp merchant.properIES của bạn, cho cùng một quy ước có thể được sử dụng bởi thư viện của ngân hàng. Nếu quy ước được sử dụng là khác nhau, không có lý do gì để lo lắng, vì ServerHello sẽ nêu rõ như vậy, nếu bộ mật mã không tương thích.

2. Máy chủ

Máy chủ phản hồi với ServerHello, điều đó sẽ cho biết liệu thiết lập kết nối có thể tiến hành hay không. Các mục trong nhật ký thường thuộc loại sau:

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

Lưu ý bộ mật mã mà nó đã chọn; đây là bộ tốt nhất có sẵn cho cả máy chủ và máy khách. Thông thường bộ mật mã không được chỉ định nếu có lỗi. Chứng chỉ của máy chủ (và tùy chọn toàn bộ chuỗi) được gửi bởi máy chủ và sẽ được tìm thấy trong các mục dưới dạng:

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

Nếu xác minh chứng chỉ đã thành công, bạn sẽ tìm thấy một mục tương tự như:

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

Một trong những bước trên sẽ không thành công, dẫn đến handshake_failure, vì việc bắt tay thường hoàn thành ở giai đoạn này (không thực sự, nhưng các giai đoạn bắt tay tiếp theo thường không gây ra lỗi bắt tay). Bạn sẽ cần phải tìm ra bước nào đã thất bại và đăng thông báo phù hợp dưới dạng cập nhật cho câu hỏi (trừ khi bạn đã hiểu thông điệp và bạn biết phải làm gì để giải quyết nó).


Vui lòng gửi bất cứ điều gì bạn có, nếu bạn có thể, để tôi có thể cập nhật câu trả lời với một câu trả lời cụ thể hơn.
Vineet Reynold

1
Ok Vineet, tôi không thể tìm ra cách đối phó với nó, tôi đã kiệt sức rồi. Tôi đã tìm thấy một cách để kiểm tra URL máy chủ với openssl "openssl s_client -connect servername: 4402" và xem những gì tôi nhận được: img225.imageshack.us/img225/8999/sc Muffurr.png
Denees

@hoss, có vẻ như chứng chỉ của máy chủ được cấp bởi một thực thể không có trong kho ủy thác được sử dụng bởi OpenSSL và cũng có thể không có trong kho ủy thác được sử dụng bởi máy chủ của bạn (máy khách), khi nó kết nối với máy chủ. Trong trường hợp đó, bạn sẽ cần nhập chứng chỉ của CA đã cấp chứng chỉ ( chứ không phải máy chủ ) vào cửa hàng ủy thác của khách hàng (OpenSSL / máy chủ của bạn).
Vineet Reynold

1
Vâng, có thể nó đang dựa vào cacerts. Nhưng bạn chỉ có thể xác định điều này nếu bạn hiểu đầu ra của gỡ lỗi mạng. Nếu bạn muốn kiểm tra điều này, bạn sẽ cần sử dụng keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacertslệnh để in ra nội dung. Sau đó xác minh xem các chứng chỉ trong cacerts có khớp với CA của chứng chỉ ngân hàng không.
Vineet Reynold

5
Mặc định là thường changeit. Trừ khi nó được thay đổi.
Vineet Reynold

20

Cài đặt phần mở rộng mã hóa Java (JCE) Sức mạnh không giới hạn ( đối với JDK7 | cho JDK8 ) có thể khắc phục lỗi này. Giải nén tập tin và làm theo readme để cài đặt nó.


16

Lỗi bắt tay có thể là lỗi thực thi giao thức TLSv1.

Trong trường hợp của chúng tôi, điều này đã giúp với java 7:

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

Các jvm sẽ đàm phán theo thứ tự này. Các máy chủ có bản cập nhật mới nhất sẽ thực hiện 1.2, các máy chủ lỗi sẽ chuyển xuống v1 và hoạt động với v1 tương tự trong java 7.


1
Điều này đã giúp tôi. Có ClientHello của tôi, nhưng không có máy chủ, kết thúc khá đột ngột. Điều này đã sửa nó cho tôi trên Java 7. Cảm ơn bạn rất nhiều.
virgo47

15

Điều này cũng có thể xảy ra khi khách hàng cần xuất trình chứng chỉ. Sau khi máy chủ liệt kê chuỗi chứng chỉ, điều sau đây có thể xảy ra:

3. Yêu cầu chứng chỉ Máy chủ sẽ đưa ra yêu cầu chứng chỉ từ máy khách. Yêu cầu sẽ liệt kê tất cả các chứng chỉ mà máy chủ chấp nhận.

*** 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. Chuỗi chứng chỉ ứng dụng khách Đây là chứng chỉ mà máy khách đang gửi đến máy chủ.

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

Nếu không có chứng chỉ trong chuỗi và máy chủ yêu cầu chứng chỉ, bạn sẽ gặp lỗi bắt tay tại đây. Một nguyên nhân có thể là đường dẫn đến chứng chỉ của bạn không được tìm thấy.

5. Xác nhận chứng chỉ Máy khách yêu cầu máy chủ xác minh chứng chỉ

*** CertificateVerify
... payload of verify check

Bước này sẽ chỉ xảy ra nếu bạn đang gửi chứng chỉ.

6. Kết thúc Máy chủ sẽ phản hồi với phản hồi xác minh

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

trong trường hợp của tôi có vẻ như tất cả các bước đều ổn nhưng vẫn gặp lỗi bắt tay.
tibi

câu trả lời rất hay ... nhưng tất cả những điều này đều ổn trong thất bại bắt tay của tôi nhưng tôi vẫn thất bại. bạn có thể xem câu hỏi tương tự của tôi không?
tibi

Việc không xuất trình chứng chỉ ứng dụng khách không phải là bất kỳ lỗi nào trong TLS. Nếu máy chủ yêu cầu chứng chỉ ứng dụng khách và không được xuất trình, nó sẽ đóng kết nối.
Hầu tước Lorne

@EJP điều đó đúng, đó không phải là lỗi trong TLS tuy nhiên kết nối bị lỗi xuất hiện dưới dạng lỗi trong Mã Java.
Brig

1
@Brig Nhưng không phải là một cảnh báo, đó là những gì câu trả lời này nói, và câu hỏi là gì.
Hầu tước Lorne

15

Tôi không nghĩ rằng điều này giải quyết vấn đề cho người hỏi đầu tiên, nhưng đối với những người làm việc ở đây để trả lời:


Trên bản cập nhật 51, java 1.8 bị cấm [1] mật mã RC4 theo mặc định, như chúng ta có thể thấy trên trang Ghi chú phát hành:

Sửa lỗi: Cấm bộ mật mã RC4

RC4 hiện được coi là một mật mã bị xâm nhập.

Các bộ mật mã RC4 đã bị xóa khỏi danh sách bộ mật mã được kích hoạt mặc định của cả máy khách và máy chủ trong triển khai Oracle JSSE. Các bộ mật mã vẫn có thể được kích hoạt bởi SSLEngine.setEnabledCipherSuites()SSLSocket.setEnabledCipherSuites()phương thức. Xem JDK-8077109 (không công khai).

Nếu máy chủ của bạn có một ưu tiên mạnh mẽ cho mật mã này (hoặc chỉ sử dụng mật mã này) thì điều này có thể kích hoạt một handshake_failurejava.

Bạn có thể kiểm tra kết nối với máy chủ kích hoạt mật mã RC4 (đầu tiên, thử không có enabledđối số để xem nếu kích hoạt a handshake_failure, sau đó đặt 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/doad/faq/release_changes.xml


10

Tôi gặp lỗi này trong khi tôi cố gắng sử dụng JDK 1.7. Khi tôi nâng cấp JDK của mình lên jdk1.8.0_66, tất cả bắt đầu hoạt động tốt.

Vì vậy, giải pháp đơn giản nhất cho vấn đề này có thể là - nâng cấp JDK của bạn và nó có thể bắt đầu hoạt động tốt.


4
Đẹp. Giải pháp đơn giản nhất là nâng cấp JDK? : D Bạn có biết mức độ phức tạp có thể phụ thuộc vào môi trường nơi việc đó đang được thực hiện không? Giả sử Amazon chạy JDK 7 và bây giờ sẽ cần nâng cấp lên JDK 8 đột ngột ... Thật tuyệt!
Arturas M

1
Một nâng cấp phiên bản nhỏ đơn giản đã giải quyết vấn đề này cho tôi .. từ JDK 11.0.1 đến 11.0.6
Clint

4

Trong trường hợp của tôi, cert được nhập, lỗi vẫn còn, giải quyết điều này bằng cách thêm System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");trước khi kết nối


Làm việc cho tôi trong java 1.8. Cảm ơn :)
Supun Amarasinghe

3

Giả sử bạn đang sử dụng SSL đúng / giao thức TLS, cấu hình đúng của bạn keyStoretrustStore, và khẳng định rằng đó không tồn tại bất kỳ vấn đề với chứng chỉ bản thân, bạn có thể cần phải tăng cường các thuật toán bảo mật của bạn .

Như đã đề cập trong câu trả lời của Vineet , một lý do có thể bạn nhận được lỗi này là do các bộ mật mã không tương thích đang được sử dụng. Bằng cách cập nhật các tệp của tôi local_policyUS_export_policycác tệp trong securitythư mục JDK của tôi với các tệp được cung cấp trong Phần mở rộng mã hóa Java (JCE) , tôi đã có thể hoàn thành việc bắt tay thành công.


2

Hôm nay tôi gặp vấn đề tương tự với ứng dụng khách OkHttp để NHẬN url dựa trên https. Nó được gây ra bởi phiên bản giao thức Https và phương thức Mật mã không khớp giữa phía máy chủ và phía máy khách .

1) kiểm tra trang web của bạn https Phiên bản giao thức và phương thức Mật mã.

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

Bạn sẽ nhận được nhiều thông tin chi tiết, thông tin chính được liệt kê như sau:

SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
2) cấu hình máy khách http của bạn, ví dụ, trong trường hợp máy khách 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();
    }
}

Điều này sẽ có được những gì chúng ta muốn.


2

Tôi đã tìm thấy một máy chủ HTTPS bị lỗi theo cách này nếu quy trình máy khách Java của tôi được cấu hình với

-Djsse.enableSNIExtension=false

Kết nối thất bại với handshake_failuresau khi ServerHellokết thúc thành công nhưng trước khi luồng dữ liệu bắt đầu.

Không có thông báo lỗi rõ ràng xác định vấn đề, lỗi trông giống như

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

Tôi đã tách biệt vấn đề bằng cách thử có và không có -Djsse.enableSNIExtension=falsetùy chọn ""


Tôi gặp lỗi tương tự trong khi kết nối với hộp cát GDAX, giải pháp nào cho việc này?
Nitin Vavdiya

1

Của tôi là một TLSphiên bản lỗi không tương thích.

Trước đây TLSv1tôi đã thay đổi nó TLSV1.2giải quyết vấn đề của tôi.


1

Tôi đang sử dụng ứng dụng khách com.google.api http. Khi tôi liên lạc với một trang web nội bộ của công ty, tôi đã gặp phải vấn đề này khi sử dụng nhầm https, thay vì 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)

Không, bạn không thể. Máy chủ không thể gửi cảnh báo TLS nếu không nói TLS.
Hầu tước Lorne

Tôi đã cập nhật nhận xét của mình để hiển thị đầu ra từ chương trình của mình. Đây là thực. Sẽ đánh giá cao nếu bạn loại bỏ phiếu bầu xuống.
thebigestlebowski

Đó là sự thật, nhưng không phải do nói chuyện TLS với máy chủ văn bản gốc. Theo định nghĩa, một máy chủ văn bản không nói chuyện TLS, và do đó bạn không thể nhận được cảnh báo TLS từ nó. Bạn không có bất kỳ thông tin nào về việc ai đánh giá thấp câu trả lời của bạn.
Hầu tước Lorne

Tôi cho rằng bạn đã bỏ phiếu - lời xin lỗi của tôi nếu không phải vậy. Thông báo lỗi của tôi chính xác phù hợp với tiêu đề của câu hỏi này. Đây là một đường dẫn / trường hợp kiểm tra hợp lệ để nhận thông báo lỗi này và tôi có một giải pháp có thể giúp người khác. Trân trọng, tôi không nghĩ nó có vấn đề nếu nó gây ra bởi phản hồi lỗi máy chủ TLS hay không. Ai đó sẽ đến đây từ google và câu trả lời của tôi có thể giúp ích nếu họ mắc lỗi tương tự.
thebigestlebowski

Tôi chưa nói gì về thông báo lỗi của bạn. Tôi đang nhận xét về khiếu nại không chính xác của bạn rằng đó là do 'sử dụng sai HTTPS thay vì HTTP'. Nó không phải, và nó không thể, vì những lý do mà tôi đã nêu và bạn chưa giải quyết theo bất kỳ cách nào. Sử dụng HTTP chắc chắn sẽ làm cho nó biến mất, rõ ràng, vì không có cảnh báo TLS trong bản rõ, nhưng không giải quyết được vấn đề tiềm ẩn.
Hầu tước Lorne

1

Tôi đã có một vấn đề tương tự; nâng cấp lên Apache HTTPClient 4.5.3 đã sửa nó.


1

Ừ! Điều này hóa ra chỉ đơn giản là một vấn đề phiên bản Java đối với tôi. Tôi đã gặp lỗi bắt tay khi sử dụng JRE 1.6 và mọi thứ hoạt động hoàn hảo khi sử dụng JRE 1.8.0_144.


0

Tuyên bố miễn trừ trách nhiệm: Tôi không biết câu trả lời sẽ hữu ích cho nhiều người hay không, chỉ chia sẻ vì có thể.

Tôi đã gặp lỗi này khi sử dụng Parasoft SOATest để gửi yêu cầu XML (SOAP).

Vấn đề là tôi đã chọn sai bí danh từ danh sách thả xuống sau khi thêm chứng chỉ và xác thực nó.


0

Trong trường hợp của tôi, trang web chỉ có thể sử dụng TLSv1.2. và tôi sử dụng apache httpclient 4.5.6, tôi sử dụng mã này và cài đặt jce để giải quyết điều này (JDK1.7):

jce

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

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

mã:

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

Để khắc phục sự cố từ phối cảnh của nhà phát triển (mục 1) và quản trị viên hệ thống (mục 2 và 3):

  1. Cho phép gỡ lỗi bắt tay SSL tại Java thông qua -Djavax.net.debug=ssl:handshake:verbose.
  2. Cài đặt ssldump tại máy chủ thông qua sudo apt install ssldumphoặc biên dịch từ nguồn bằng cách theo liên kết này nếu bạn quan sát Unknown valuetrong mật mã khi bạn chạy bên dưới bước.
  3. Tại máy chủ, sudo ssldump -k <your-private-key> -i <your-network-interface>
  4. Kiểm tra nhật ký về lý do thực sự của sự thất bại.

Ví dụ về bắt tay không làm việc của nhật ký 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

Ví dụ về bắt tay thành công nhật ký 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

Ví dụ về nhật ký Java không hoạt động

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

Trong trường hợp của tôi, tôi đã có một vấn đề với phiên bản 1.1. Tôi đã tái tạo vấn đề dễ dàng với curl. Máy chủ không hỗ trợ các phiên bản thấp hơn TLS1.2.

Vấn đề bắt tay này đã nhận được:

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

Với phiên bản 1.2, nó hoạt động tốt:

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

Máy chủ đang chạy Weblogic và thêm đối số này trong setEnvDomain.sh khiến nó hoạt động với TLSv1.1:

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

0

Vấn đề này xảy ra vì phiên bản java. Tôi đã sử dụng JDK 1.8.0.231 và gặp lỗi này. Tôi đã làm giảm phiên bản java của tôi từ 1.8.0.231 xuống 1.8.0.171, Bây giờ nó đang hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.