oracle使用ssl+jdbc连接(1)

服务器端配置Wallet和生成证书(单向)

创建一个新的自动登录wallet

mkdir -p /data0/app/oracle/wallet
 orapki wallet create -wallet "/data0/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local

创建一个自签名证书并将其加载到

orapki wallet add -wallet "/data0/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650

检查wallet的内容,需要注意的是自签名证书既是用户也是可信证书

orapki wallet display -wallet "/data0/app/oracle/wallet" -pwd WalletPasswd123

导出证书,以便稍后将其加载到客户的wallet中

orapki wallet export -wallet "/data0/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -cert /tmp/`hostname`-certificate.pem

检查证书是否已按预期导出

cat /tmp/`hostname`-certificate.pem

将pem证书下载至客户端

keytool -import -trustcacerts -v -alias Mysql -file "server-certificate.pem" -keystore "oracle.jks"

jdbc代码

import org.omg.CORBA.PRIVATE_MEMBER;

import java.sql.*;
import java.util.Properties;

public class OracleSslConnectionTest {
    private  static final String DB_SERVER_NAME="192.168.126.154";
    private  static final Integer SSL_PORT=2484;
    private  static final String SERVICE_NAME="orcl11g.us.oracle.com";
    private  static final String DB_USER="test";
    private  static final String DB_PASSWORD="test";
    private  static final String KEY_STORE_FILE_PATH="C:\\Users\\13468\\Desktop\\fsdownload\\oracle.jks";
    private  static final String KEY_STORE_PASS="WalletPasswd123";

    public static void main(String[] args) throws SQLException{
        final Properties properties = new Properties();
        final String connectionString=String.format(
            "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SERVICE_NAME=%s)))",
                DB_SERVER_NAME,
                SSL_PORT,
                SERVICE_NAME
        );
        System.out.println(connectionString);
        properties.put("user",DB_USER);
        properties.put("password",DB_PASSWORD);
        properties.put("oracle.jdbc.J2EE13Complaint","true");
        properties.put("javax.net.ssl.trustStore",KEY_STORE_FILE_PATH);
        properties.put("javax.net.ssl.trustStoreType","JKS");
        properties.put("javax.net.ssl.trustStorePassword",KEY_STORE_PASS);

        final Connection connection= DriverManager.getConnection(connectionString,properties);
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("select * from TEST");
        //4. 遍历查询结果
        while (rs.next()) {
            String ID = rs.getString("ID");
            String NAME = rs.getString("NAME");
            System.out.println(ID + "-" + NAME);
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用SSL连接Oracle,需要在JDBC连接字符串中指定以下属性: ```java jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVICE_NAME=<service_name>))) ``` 其中,`PROTOCOL`指定为tcps表示使用SSL连接,`HOST`和`PORT`指定为Oracle数据库的主机和端口,`SERVICE_NAME`指定数据库的服务名称。 还需要将以下属性设置为`true`: ```java properties.setProperty("oracle.net.ssl_cipher_suites", "<cipher_suite>"); properties.setProperty("javax.net.ssl.trustStore", "<trust_store_path>"); properties.setProperty("javax.net.ssl.trustStorePassword", "<trust_store_password>"); ``` 其中,`oracle.net.ssl_cipher_suites`指定SSL使用的加密套件,`javax.net.ssl.trustStore`指定SSL连接的信任存储库路径,`javax.net.ssl.trustStorePassword`指定信任存储库的密码。 如果不需要验证证书,则可以将`javax.net.ssl.trustStore`设置为`null`,同时将`oracle.net.ssl_server_dn_match`设置为`false`,即可跳过证书验证: ```java properties.setProperty("javax.net.ssl.trustStore", null); properties.setProperty("oracle.net.ssl_server_dn_match", "false"); ``` 完整的Java代码示例: ```java Properties properties = new Properties(); properties.setProperty("oracle.net.ssl_cipher_suites", "<cipher_suite>"); properties.setProperty("javax.net.ssl.trustStore", null); properties.setProperty("oracle.net.ssl_server_dn_match", "false"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVICE_NAME=<service_name>)))", properties); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值