一个具有JDBC薄wtih连接的Java应用程序,现在需要在TCPS中进行转换,以便从应用程序到数据库进行加密传输。
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=servername)(PORT=XXXX))(CONNECT_DATA=(SERVICE_NAME=XXXX)))"); 使用JKS信任库作为证书;
在这里,我们没有使用sqlnet.ora文件来设置TCPS加密。对于JDBC、Ciper、证书等方面的更改,任何人都能提供同样的帮助吗?
发布于 2021-02-05 12:16:38
要用JDBC设置TCPS,我们有几个任务。
首先,在客户机和服务器中创建钱包:
orapki wallet create -wallet "wallet" -pwd XXXXXXXX -auto_login然后,创建自签名证书(或由可信CA签名)
orapki wallet add -wallet "wallet" -pwd XXXXXXXX -dn "CN=%COMPUTERNAME%" -keysize 1024 -self_signed -sign_alg sha256 -validity 3650通过SFTP/SCP交换并在钱包中相互导入证书。
orapki wallet export -wallet "wallet" -pwd XXXXXXXX -dn "CN=%COMPUTERNAME%" -cert ./%COMPUTERNAME%.crt
orapki wallet add -wallet "wallet" -pwd XXXXXXXX -trusted_cert -cert %REMOTECOMPUTER%.crt现在在SQLNET.ORA中指明钱包的位置(在TNS_ADMIN文件夹中,在客户机和服务器中)。
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = D:\oracle\wallet)
)
)
SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS,BEQ)
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)现在在服务器中编辑listener.ora以添加安全端点(PROTOCOL = TCPS):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mydbservername)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = mydbservername)(PORT = 2484))
)
)用lsnrctl停止、启动和状态重新启动侦听器,以检查是否显示了您的行。
相应地在客户机和服务器中更新TNSNAMES.ORA。
MYDB_SSL=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCPS)
(HOST=MYDBSERVERNAME)
(PORT=2484)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=REP3)
)
)客户端中的TNS_ADMIN文件夹必须与钱包使用的文件夹相同,所以只将sqlnet.ora和tnsnames.ora放在该文件夹中。
如果到目前为止一切都很好,那么tnsping MYDB_SSL将返回OK。
D:\>tnsping MYDB_SSL
TNS Ping Utility for 64-bit Windows: Version 12.2.0.1.0 - Production on 05-FEB-2021 13:10:59
Copyright (c) 1997, 2016, Oracle. All rights reserved.
Used parameter files:
D:\oracle\product\12.2.0\dbhome_1\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS= (PROTOCOL=TCPS) (HOST=MYDBSERVERNAME) (PORT=2484)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MYDB)))
OK (1100 msec)否则,在服务器端检查lsnrctl,查找日志并排除故障。
在java端,按照下面的示例(对于Spring/JPA)设置JDBC:
spring:
jpa:
database: oracle
properties:
hibernate:
dialect: org.hibernate.dialect.Oracle12cDialect
datasource:
url: jdbc:oracle:thin:@MYDB_SSL?TNS_ADMIN=\\oracledb\\wallet使用keytool命令在仙人掌中加载证书:
keytool -importcert -file %ORACLE_BASE%\%CN%.crt -keystore %CACERTS% -storepass changeit -alias %CN%运行应用程序,您也可以在命令行中指定TNS_ADMIN:
%JAVA% -Doracle.net.tns_admin=%ORACLE_BASE%\wallet -jar myapp.jar...希望这能帮上忙。
https://dba.stackexchange.com/questions/277955
复制相似问题