Dưới đây là các bước cần làm theo để định cấu hình trình điều khiển mỏng Oracle JDBC để kết nối với Cơ sở dữ liệu bằng TLS v1.2 (giả sử cấu hình Cơ sở dữ liệu của bạn là chính xác).
Bước 1:Áp dụng bản vá cho lỗi 19030178 (không cần thiết kể từ 12.2.0.1)
Bạn sẽ cần áp dụng bản vá cho lỗi 19030178 cho phép TLSv1.2. Lưu ý rằng bản vá cho phép TLSv1.2 nhưng không bật nó theo mặc định. Vì vậy, với trình điều khiển được vá 12.1.0.2, bạn cũng cần đặt oracle.net.ssl_version ='1.2'. Thuộc tính này có thể được đặt dưới dạng thuộc tính hệ thống (sử dụng -D) hoặc thông qua thuộc tính nguồn dữ liệu.
Bước 2:Cài đặt tệp JCE
Nếu không có tệp Java Cryptography Extension (JCE), các bộ mật mã mạnh (ví dụ:TLS_RSA_WITH_AES_256_CBC_SHA256) sẽ không được bật. Vì vậy, cho dù bạn đang sử dụng JDK7 hay JDK8, bạn nên cài đặt Tệp chính sách phạm vi quyền hạn sức mạnh không giới hạn của JCE. Bạn có thể tìm thấy các tệp này trên trang web của Oracle.
Bước 3:Luôn sử dụng bản cập nhật mới nhất của JDK
Đảm bảo sử dụng bản cập nhật mới nhất của JDK7 hoặc JDK8 vì các lỗi đã được khắc phục bắt buộc đối với TLSv1.2.
Bước 4:Sử dụng tệp JKS thay vì ví
Có vẻ như bạn đã làm điều đó nhưng chỉ để người khác thấy:ví rất phức tạp để định cấu hình và sử dụng với trình điều khiển mỏng Oracle JDBC vì chúng yêu cầu thêm các lọ và thuộc tính bổ sung. Mặt khác, các tệp JKS được hỗ trợ nguyên bản trong JRE và theo kinh nghiệm của tôi, luôn hoạt động tốt.
Bước 5:Khi sử dụng JDK7, hãy bật rõ ràng các bộ mật mã mạnh
Bước này không bắt buộc khi sử dụng JDK8. Với JDK7, nếu bạn đang sử dụng bộ mật mã mạnh, chẳng hạn như TLS_RSA_WITH_AES_256_CBC_SHA256, thì bạn phải kích hoạt nó thông qua thuộc tính kết nối oracle.net.ssl_cipher_suites.
Bước 6:Gỡ lỗi với -Djavax.net.debug =all
Cuối cùng, nếu bạn gặp nhiều sự cố hơn, bạn có thể bật tính năng theo dõi để tìm hiểu xem điều gì đang xảy ra bằng -Djavax.net.debug =all.
====VÍ DỤ VỚI JDK7 VÀ BỘ LÁI XE 12.1.0.2 ĐÓNG GÓP =====
java -Doracle.net.ssl_version='1.2' -Doracle.net.ssl_cipher_suites='(TLS_RSA_WITH_AES_256_CBC_SHA256)' -Doracle.net.ssl_server_dn_match='true' -Djavax.net.ssl.trustStore='truststore.jks' -Djavax.net.ssl.trustStorePassword='welcome1' -Djavax.net.ssl.keyStore='keystore.jks' -Djavax.net.ssl.keyStorePassword='welcome1' JDBCTest 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=myservice))(security=(ssl_server_cert_dn="CN=name,O=org,L=city,ST=state,C=country")))' 'pdb1' 'welcome1'
====VÍ DỤ VỚI JDK8 VÀ BỘ LÁI XE 12.1.0.2 ĐÓNG GÓP =====
java -Doracle.net.ssl_version='1.2' -Doracle.net.ssl_server_dn_match='true' -Djavax.net.ssl.trustStore='truststore.jks' -Djavax.net.ssl.trustStorePassword='welcome1' -Djavax.net.ssl.keyStore='keystore.jks' -Djavax.net.ssl.keyStorePassword='welcome1' JDBCTest 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=myservice))(security=(ssl_server_cert_dn="CN=name,O=org,L=city,ST=state,C=country")))' 'pdb1' 'welcome1'