gpt4 book ai didi

使用 JDBC thin 和 JKS 的 Oracle 数据库 TLS1.2/SSL 连接

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:17 24 4
gpt4 key购买 nike

当尝试使用 12.1.0.2 JDBC 瘦驱动程序连接到 Oracle Database 12c 时,出现异常。我们使用带有 JKS 证书的 TLSv1.2。但是,我们无法成功连接到数据库。

线程“main”中的异常 java.sql.SQLRecoverableException:IO 错误:收到致命警报:handshake_failure

最佳答案

以下是配置 Oracle JDBC 瘦驱动程序以使用 TLS v1.2 连接到数据库的步骤(假设您的数据库配置正确)。

第 1 步:为错误 19030178 应用补丁(从 12.2.0.1 开始不需要)

您需要为允许 TLSv1.2 的错误 19030178 应用补丁。请注意,该补丁允许 TLSv1.2,但默认情况下不启用它。因此,对于 12.1.0.2 补丁驱动程序,您还需要设置 oracle.net.ssl_version='1.2'。此属性可以设置为系统属性(使用 -D)或通过数据源属性设置。

第 2 步:安装 JCE 文件

如果没有 Java 加密扩展 (JCE) 文件,将不会启用强密码套件(例如 TLS_RSA_WITH_AES_256_CBC_SHA256)。因此,无论您使用的是 JDK7 还是 JDK8,都应该安装 JCE Unlimited Strength Jurisdiction Policy Files。这些文件可以在 Oracle 网站上找到。

第 3 步:始终使用 JDK 的最新更新

请务必使用 JDK7 或 JDK8 的最新更新,因为 TLSv1.2 所需的错误已得到修复。

第 4 步:使用 JKS 文件代替钱包

看起来您已经这样做了,但只是为了让其他人看到:钱包在配置和与 Oracle JDBC 瘦驱动程序一起使用时很复杂,因为它们需要额外的 jar 和额外的属性。另一方面,JRE 原生支持 JKS 文件,根据我的经验,JKS 文件一直运行良好。

第 5 步:使用 JDK7 时,显式启用强密码套件

使用JDK8时不需要这一步。对于 JDK7,如果您使用的是强密码套件,例如 TLS_RSA_WITH_AES_256_CBC_SHA256,则必须通过 oracle.net.ssl_cipher_suites 连接属性启用它。

第 6 步:使用 -Djavax.net.debug=all 进行调试

最后,如果您遇到更多问题,您可以使用 -Djavax.net.debug=all 打开跟踪以找出发生了什么。

==== 使用 JDK7 和 12.1.0.2 修补的瘦驱动程序的示例 =====

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'

==== 使用 JDK8 和 12.1.0.2 修补的瘦驱动程序的示例 =====

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'

关于使用 JDBC thin 和 JKS 的 Oracle 数据库 TLS1.2/SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39174147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com