Như bạn có thể thấy trong standard names documentation, tất cả các mục nhập (SSLv3, TLSv1.0, TLSv1.1, ...) nói rằng chúng có thể hỗ trợ các phiên bản khác.
Trong thực tế, trong Oracle JDK (và OpenJDK), tất cả đều làm. Nếu bạn nhìn vào số source code, lớp TLS10Context
là những gì được sử dụng cho TLS, SSL, SSLv3 và TLS10, TLS11Context
được sử dụng cho TLSv1.1 và TLS12Context
cho TLSv1.2. Tất cả hỗ trợ tất cả các phiên bản của SSL/TLS, đó là những gì được kích hoạt theo mặc định khác nhau.
Điều này có thể khác với nhà cung cấp khác hoặc nhà cung cấp JRE. Tất nhiên bạn nên chọn một trong số đó ít nhất là sẽ hỗ trợ phiên bản giao thức mà bạn muốn sử dụng.
Lưu ý rằng giao thức được sử dụng được xác định sau bằng cách sử dụng SSLSocket.setEnabledProtocols(...)
hoặc tương đương SSLEngine
tương đương.
Như quy tắc chung, hãy sử dụng số phiên bản cao nhất bạn có thể (SSLv3 < TLSv1.0 < TLSv1.1 ...), có thể phụ thuộc vào những bên mà bạn muốn liên lạc với bộ phận hỗ trợ.
Giao thức nào được bật theo mặc định khác nhau tùy thuộc vào phiên bản chính xác của JRE Oracle.
Khi nhìn vào the source code for sun.security.ssl.SunJSSE
in OpenJDK 7u40-b43, TLS
chỉ đơn giản là một bí danh cho TLSv1
(và như vậy là SSL
và SSLv3
), về mặt SSLContext
giao thức. Nhìn vào hình implementations of SSLContextImpl
(là lớp bên trong của SSLContextImpl
tự):
- Tất cả hỗ trợ tất cả các giao thức.
- Tất cả giao thức được bật ở phía máy chủ theo mặc định.
- các giao thức client-side được kích hoạt theo mặc định khác nhau:
TLS10Context
(sử dụng cho các giao thức SSL
, SSLv3
, TLS
, TLSv1
) cho phép SSLv3 để TLSv1.0 theo mặc định trên các mặt hàng.
TLS11Context
(được sử dụng cho giao thức TLSv1.1
) cũng cho phép TLSv1.1 theo mặc định.
TLS12Context
(được sử dụng cho giao thức TLSv1.2
) cũng bật TLSv1.2 theo mặc định.
- Nếu FIPS được bật, SSL không được hỗ trợ (do đó không được bật theo mặc định).
Thay đổi này trong Java 8, kết hợp với thuộc tính hệ thống the new jdk.tls.client.protocols
.
Một lần nữa, khi nhìn vào the source code for sun.security.ssl.SunJSSE
in OpenJDK 8u40-b25, SSLContext
giao thức TLSv1
, TLSv1.1
, và TLSv1.2
cũng tận dụng TLS10Context
, TLS11Context
và TLS12Context
, mà theo logic tương tự như trong Java 7.
Tuy nhiên, giao thức TLS
không còn đặt biệt hiệu cho bất kỳ người trong số họ. Thay vào đó, nó sử dụng TLSContext
dựa trên các giá trị trong thuộc tính hệ thống jdk.tls.client.protocols
. Từ số JSSE Reference guide:
Để bật giao thức SunJSSE cụ thể trên máy khách, hãy chỉ định chúng trong danh sách được phân cách bằng dấu phẩy trong dấu ngoặc kép; tất cả các giao thức được hỗ trợ khác sau đó được tắt trên máy khách. Ví dụ: nếu giá trị của thuộc tính này là "TLSv1, TLSv1.1" thì cài đặt giao thức mặc định trên máy khách cho TLSv1 và TLSv1.1 được bật trên máy khách, trong khi SSLv3, TLSv1.2 và SSLv2Hello bị tắt trên khách hàng.
Nếu thuộc tính này trống, tất cả giao thức được bật theo mặc định trên cả máy khách và phía máy chủ.
Tất nhiên, trong recent versions of Oracle JRE 8, SSL is also completely disabled by default (để xóa khỏi danh sách đó).
Lưu ý rằng trong cả hai trường hợp (JRE 7 và 8), các SSLContext
bạn nhận được theo mặc định thông qua SSLContext.getDefault()
ra khỏi hộp được ít nhiều tương đương với một SSLContext
thu được với giao thức TLS
và khởi tạo với các thông số truststore mặc định và vân vân .
Xin chào EJP, ý bạn là sử dụng 'SSLContext.getDefault()'? Ngoài ra, các giá trị mặc định là gì? –
@MickaelMarrache Xem chỉnh sửa. – EJP