Oracle数据库升级后,如何修改persistence.xml配置TCPS连接?
解决Oracle TCPS安全连接的Java应用配置修改
一、修改persistence.xml的核心配置
1. 更新JDBC URL
将原TCP协议的URL修改为TCPS格式,两种常用写法可选:
- 直连格式(推荐,无需依赖tnsnames.ora):
替换原有URL为TCPS协议的连接串,注意端口需与数据库TCPS监听端口一致(通常不是原1521,需确认新库配置,比如常见的1522):<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=testdb01)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=test_app)))"/> - 基于tnsnames.ora的格式:
若复用SQL Developer的tns配置,需指定TNS别名并配置tns文件路径:
其中<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@test_app_tcps"/> <property name="oracle.net.tns_admin" value="/path/to/tnsnames.ora所在目录"/>test_app_tcps是tnsnames.ora中定义的TCPS连接别名。
2. 添加SSL验证属性
TCPS为加密连接,需配置信任库验证数据库证书,在persistence.xml的properties节点下添加:
<!-- 信任库路径及密码 --> <property name="javax.net.ssl.trustStore" value="/path/to/your/truststore.jks"/> <property name="javax.net.ssl.trustStorePassword" value="信任库密码"/> <!-- 双向认证场景需额外配置密钥库(单向认证无需此部分) --> <!-- <property name="javax.net.ssl.keyStore" value="/path/to/your/keystore.jks"/> --> <!-- <property name="javax.net.ssl.keyStorePassword" value="密钥库密码"/> -->
二、额外应用端配置要求
- 驱动版本:确保使用的Oracle JDBC驱动(ojdbc.jar)与数据库版本兼容,推荐12c及以上版本,对TCPS支持更完善。
- 信任库准备:
- 从数据库服务器获取CA证书(通常为
.cer格式)。 - 使用Java
keytool命令将证书导入信任库:keytool -importcert -file /path/to/db_ca.cer -keystore /path/to/truststore.jks -alias oracle_ca - 确保应用可访问该信任库文件,路径配置准确。
- 从数据库服务器获取CA证书(通常为
- 测试环境临时配置(生产禁用):
若测试环境证书主机名与数据库主机不匹配,可临时添加属性跳过验证:<property name="oracle.net.ssl_server_dn_match" value="false"/>
修改后的完整persistence.xml示例(直连+单向认证)
<properties> <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=testdb01)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=test_app)))"/> <property name="javax.persistence.jdbc.user" value="testuser"/> <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> <property name="javax.persistence.jdbc.password" value="password01"/> <property name="javax.persistence.schema-generation.database.action" value="create"/> <!-- SSL信任库配置 --> <property name="javax.net.ssl.trustStore" value="/opt/app/truststore.jks"/> <property name="javax.net.ssl.trustStorePassword" value="changeit"/> </properties>
内容的提问来源于stack exchange,提问作者Luke_Skywalker007
相关产品推荐
相关产品推荐

