如何为 Jruby Oracle 连接设置 SSL?
Posted
技术标签:
【中文标题】如何为 Jruby Oracle 连接设置 SSL?【英文标题】:How do I setup SSL for Jruby Oracle connection? 【发布时间】:2019-03-05 17:22:49 【问题描述】:在 Rails、Jruby 等中,我创建了一个在网页中查询 Oracle 数据库的功能调用。我需要保护 SSL 中的正常调用。
<%
require 'jdbc_connection'
# Database settings
user = "***REMOVED***"
passwd = "***REMOVED***"
url = "jdbc:oracle:thin:@***REMOVED***:1521/test"
output = ""
error = ""
select_stmt, rest, select_sql = nil
error = "No Errors."
begin
conn = OracleConnection.create(user, passwd, url)
select_sql = "select columnA from test.tableA WHERE name='"+@subject["name"].first+"'"
select_stmt = conn.create_statement
rset = select_stmt.execute_query select_sql
while (rset.next)
output = output + rset.getString(1)
end
rescue
error = "Failed executing Oracle demo from JRuby ", $!, "\n"
ensure
# We have to ensure everything is closed here.
if (!select_stmt.nil?)
select_stmt.close
end
if (!rset.nil?)
rset.close
end
conn.close_connection
end
%>
我想我需要对密钥库、用户名、密码和连接字符串的引用。
我在这个网站上找到了一个示例连接字符串:https://blogs.oracle.com/dev2dev/ssl-connection-to-oracle-db-using-jdbc,-tlsv12,-jks-or-oracle-wallets
DB_USER = "hr", DB_PASSWORD ="hr", and
DB_URL = "jdbc:oracle:thin:@(DESCRIPTION= (ADDRESS=
(PROTOCOL=TCPS)(PORT=1522)(HOST=myhost))
(CONNECT_DATA=(SERVICE_NAME=myorcldbservicename))
(SECURITY=(ssl_server_cert_dn="CN=testcert.oracle.com, O=Oracle Corporation,L=Redwood City,ST=California,C=US")))"
我在哪里引用密钥库?我觉得 OracleConnection 类可能应该是 OracleConnectionSSL 之类的东西?
【问题讨论】:
您自己创建了jdbc_connection.rb
吗?里面是什么?您通常将 Java 中的 Oracle SSL 设置设置为 JDBC 连接对象上的 JSSE 属性(例如 javax.net.ssl.keyStore
)。
它基本上是驱动程序的接口。此处由 Oracle 提供:oracle.com/technetwork/articles/dsl/jruby-oracle11g-330825.html
【参考方案1】:
对不起,这只是一半的答案——我对 JRuby 了解不多,但从 Oracle 方面来说——this Oracle PDF describes how to set up SSL with the Oracle JDBC Thin driver。您可能想通读全文,但这是他们使用 JKS 密钥库的 Java 示例(对于 Oracle 钱包略有不同):
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps(HOST=servername)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=servicename))))";
Properties props = new Properties();
props.setProperty("user", "scott");
props.setProperty("password", "tiger");
props.setProperty("javax.net.ssl.keyStore",
"D:\\client_jks\\keystore.jks");
props.setProperty("javax.net.ssl.keyStoreType","JKS");
props.setProperty("javax.net.ssl.keyStorePassword","welcome123");
Connection conn = DriverManager.getConnection(url, props);
您看到它在调用 DriverManager.getConnection 之前是如何设置 Java 属性的吗?我认为在同一个 getConnection 调用之前需要进入你的jdbc_connection
接口。但我对 Ruby 不够熟悉,不知道该怎么做。
【讨论】:
这让我走上了创建解决方案的正确道路。【参考方案2】:有很多方法可以设置 JKS 连接属性。 (a) 以编程方式使用连接属性。查看示例DataSourceForJKS.java
(b) 您可以将这些属性设置为系统属性。
-Doracle.net.ssl_server_dn_match=true
-Djavax.net.ssl.trustStore=$TNS_ADMIN/truststore.jks
-Djavax.net.ssl.trustStorePassword=welcome1
-Djavax.net.ssl.keyStore=$TNS_ADMIN/keystore.jks
-Djavax.net.ssl.keyStorePassword=welcome1
(c) 如果您使用的是 18.3,则可以利用 ojdbc.properties 添加这些连接属性。查看blog
【讨论】:
以上是关于如何为 Jruby Oracle 连接设置 SSL?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 react.cordova、ionic 和 android 设置 ssl 证书?
如何为以下设置安装 SSL(React 前端 + Nodejs 后端 + 自定义域 Heroku)
如何为自己的WordPress站点安装SSL证书开启https访问