首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JDBC瘦客户机中为oracle配置TCPS

如何在JDBC瘦客户机中为oracle配置TCPS
EN

Database Administration用户
提问于 2020-10-13 06:20:17
回答 1查看 4K关注 0票数 2

一个具有JDBC薄wtih连接的Java应用程序,现在需要在TCPS中进行转换,以便从应用程序到数据库进行加密传输。

代码语言:javascript
复制
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=servername)(PORT=XXXX))(CONNECT_DATA=(SERVICE_NAME=XXXX)))"); 

使用JKS信任库作为证书;

在这里,我们没有使用sqlnet.ora文件来设置TCPS加密。对于JDBC、Ciper、证书等方面的更改,任何人都能提供同样的帮助吗?

EN

回答 1

Database Administration用户

发布于 2021-02-05 12:16:38

要用JDBC设置TCPS,我们有几个任务。

首先,在客户机和服务器中创建钱包:

代码语言:javascript
复制
orapki wallet create -wallet "wallet" -pwd XXXXXXXX -auto_login

然后,创建自签名证书(或由可信CA签名)

代码语言:javascript
复制
orapki wallet add -wallet "wallet" -pwd XXXXXXXX -dn "CN=%COMPUTERNAME%" -keysize 1024 -self_signed -sign_alg sha256 -validity 3650

通过SFTP/SCP交换并在钱包中相互导入证书。

代码语言:javascript
复制
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文件夹中,在客户机和服务器中)。

代码语言:javascript
复制
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):

代码语言:javascript
复制
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。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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:

代码语言:javascript
复制
spring:
  jpa:
    database: oracle
    properties:
      hibernate:
        dialect: org.hibernate.dialect.Oracle12cDialect
  datasource:
    url: jdbc:oracle:thin:@MYDB_SSL?TNS_ADMIN=\\oracledb\\wallet

使用keytool命令在仙人掌中加载证书:

代码语言:javascript
复制
keytool -importcert -file %ORACLE_BASE%\%CN%.crt -keystore %CACERTS% -storepass changeit -alias %CN%

运行应用程序,您也可以在命令行中指定TNS_ADMIN:

代码语言:javascript
复制
%JAVA% -Doracle.net.tns_admin=%ORACLE_BASE%\wallet -jar myapp.jar...

希望这能帮上忙。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/277955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档