服務器端配置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);
}
}
}