Error: "The server selected protocol version TLS10 is not accepted by client preferences

Chào mọi người. Em đang dùng netbeans 8.0.2 và jdk 8 version 292, em kết nối với cơ sở dữ liệu thì bị báo lỗi
The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences"
Hiện em không biết phải sử lý như thế nào ạ. Em xin mọi người giúp với ạ

Tớ cần cậu giúp chút:

  • Cậu đang kết nối tới hệ quản trị CSDL nào thế? Có phải MSSQL không cậu?
  • Cậu đang dùng JDBC để kết nối phải không? Nếu đúng, cậu đang dùng phiên bản nào để kết nối vậy?
  • Cậu có thể ném cho tớ full error log được không?
  • Cậu có thể cho tớ biết connection string của cậu được không?

Ngoài ra, tớ có research chút về thông điệp lỗi mà cậu đưa. Cậu thử xem github issue dưới đây có giúp được gì cậu không? (Trong TH cậu kết nối tới MSSQL thật)

Một vài posible solution:


Giúp tớ trả lời các câu hỏi ở trên, và đọc hết các link tớ đưa (đặc biệt là link AWS) nhé! :smile:

3 Likes

hix anh ơi em cũng bị lỗi giống bạn, em tạo 1 web động trên eclipse thì nó bị lỗi như này
The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: “The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”. ClientConnectionId:268e85a3-494b-4dd0-a4cc-983a6d729114.

Đoạn mã em kết nối như này ạ:
String url = “jdbc:sqlserver://localhost:1433;databaseName=DB_QLSV1; encode = false”;

Hi @Hai_Nguyen4,

Cậu đã thử đọc mấy link tớ đưa chưa? :smile:
Tớ nghĩ cậu có thể giải quyết với solution ở link AWS mà tớ đề cập ở comment trên đấy.
Thử làm theo và cho tớ biết kết quả nhé! :smile:

2 Likes

Bước này ở trong AWS làm sao ạ …

  • Start your application with -Djava.security.properties=path/to/enableLegacyTLS.security .

Cậu phải truyền argument đó khi chạy application của cậu. Application của cậu là tomcat phải không? Trong TH tomcat, cậu có thể dùng CATALINA_OPTS để truyền parameter vào khi start tomcat.

2 Likes


E bị lỗi khi kết nối DB với netbeans ý ạ, chạy glassfish ạ. E k rõ cái -D này lắm :((
Mong anh chiỉ rõ ạ

Đó là argument cậu truyền vào JAVA_OPS đó. Cậu sẽ biết thêm về nó khi cậu đủ lớn :smile:

Nguyên nhân của lỗi này có thể là do ở JDK version mới (JDK 8+ version 191), họ đã disable tất cả các giải thuật DES TLS rồi (xem chi tiết ở JDK8 release changes, version 191)

  • Change: Disabled all DES TLS Cipher Suites
    DES-based TLS cipher suites are considered obsolete and should no longer be used. DES-based cipher suites have been deactivated by default in the SunJSSE implementation by adding the “DES” identifier to the jdk.tls.disabledAlgorithms security property. These cipher suites can be reactivated by removing “DES” from the jdk.tls.disabledAlgorithms security property in the java.security file or by dynamically calling the Security.setProperty() method.

Về cách sửa, đoạn quote trên đã đề cập rõ, cậu cần phải reactivate giải thuật TLS mà cậu dùng.
Tớ sẽ cần thêm thông tin từ cậu (cậu cần đưa tớ thêm log, để biết chính xác giải thuật gì đã được dùng để kết nối). Cơ mà khả năng cao là giải thuật 3DES_EDE_CBC đã được dùng (xem câu trả lời này).
Do đó, cậu thử sửa file ${jdk.home}/jre/lib/security/java.security xem.

Sửa dòng này ở file ${jdk.home}/jre/lib/security/java.security:

jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, 3DES_EDE_CBC

thành

jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768, \
    EC keySize < 224

Thử làm theo và cho tớ biết kết quả nhé! :smile:

2 Likes

. Bạn sửa được lỗi đấy chưa ạ chỉ mình với ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?