Oracle Wallet是用来加密解密的,前两天做的项目中用到了这个技术,现把一些用到的东西总结一下。
原文如下:
Our application does a web service call
(from db to app server) to generate reports. Since SSL is used in
prod, I think Oracle wallet needs to be setup in the db server for
the web service calls to get through.
Here's a sample code that we can use to
test:
SQL> set define
SQL> set serverout
SQL> declare
vHttpReq utl_http.req;
begin
vHttpReq := utl_http.begin_request
('https://10.37.240.202/emagine/admin/ws/report.php
'||'?'||'target=report&io=461&io2=462&io3=463&code=34',
'GET');
end; 2 3 4 5
declare
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line
ORA-29024: Certificate validation
failure
ORA-06512: at line 4
I've already downloaded the site's
certificate in My Documents folder in the RDP server.
下面是我的解决方法(我不知道他的证书是怎么来的,以后有机会深究一下):
1.I have already create a
wallet.
orapki wallet create -wallet
$ORACLE_HOME/network/admin/wallet1 -pwd elcaro_2011
2.You can use https certificate like
this:
orapki wallet add -wallet
$ORACLE_HOME/network/admin/wallet1 -trusted_cert -cert
/home/oracle/wallet/CA_cert.cer
3.this procedure is the demo of how to use
this wallet.
create or replace procedure
get_realtime_account_data is
req UTL_HTTP.REQ;
resp UTL_HTTP.RESP;
val varchar2(2000);
real_records
datacenter.common_utils.STRING_LIST;
fields
datacenter.common_utils.STRING_LIST;
d_date date := to_date(to_char(sysdate,
'yyyy-mm-dd hh24:mi') ||
':00',
'yyyy-mm-dd hh24:mi:ss'); begin
UTL_HTTP.SET_WALLET('file:/home/oracle/wallet',
'wallet');
req :=
UTL_HTTP.BEGIN_REQUEST('https://192.168.127.1/GameMaster/GetServerInfo.aspx');
resp :=
UTL_HTTP.GET_RESPONSE(req);
utl_http.read_line(resp, val,
true);
utl_http.end_response(resp);
real_records :=
datacenter.common_utils.EXPLODE(val, '|');
for i in 1 .. real_records.count
fields :=
datacenter.common_utils.EXPLODE(real_records(i), '/');
insert into
stat_realtime_player_count
values
(d_date, fields(1), '',
fields(2));
end loop;
commit;
EXCEPTION
WHEN utl_http.end_of_body THEN
utl_http.end_response(resp);
end get_realtime_account_data;
用下面的命令可以看到关于wallet用法的帮助
[oracle@au390 EMAGPROD]$ orapki wallet
Oracle PKI Tool : Version 11.2.0.1.0 - Production
reserved.
wallet:
create [-wallet [wallet]] [[-pwd ] [-auto_login|-auto_login_local]]
| [-auto_login_only]
display [-wallet [wallet]]
[-pwd ]
change_pwd [-wallet [wallet]] [-oldpwd ] [-newpwd ]
add [-wallet [wallet]]
[512|1024|2048|4096]] [-dn [dn]]>
[mm/dd/yyyy] -valid_until [mm/dd/yyyy]]
[-serial_file ] | [-serial_num ]>
[-trusted_cert|-user_cert]> [-pwd ] |
[-auto_login_only]
remove [-wallet [wallet]] [-dn [dn]]
[-trusted_cert_all|-trusted_cert|-user_cert|-cert_req]
[-pwd ] | [-auto_login_only]
export [-wallet [wallet]] [-dn [dn]] [-cert [filename] | -request
[filename]] [-pwd ]
export_trust_chain [-wallet [wallet]] [-certchain [filename]] [-dn
[user_cert_dn]] [-pwd ]
upload [-wallet [wallet]] [-ldap [host:port]] [-user [user]]
[-userpwd [userpwd]] [-pwd ]
download [-wallet [wallet]] [-ldap [host:nonsslport]] [-user
[user]] [-userpwd [userpwd]] [-pwd ]
jks_to_pkcs12 [-wallet [wallet]] [-pwd ] [-keystore [keystore]]
[-jkspwd [jkspwd]]
pkcs12_to_jks [-wallet [wallet]] [-pwd ] [-jksKeyStoreLoc
-jksKeyStorepwd ]
[-jksTrustStoreLoc -jksTrustStorepwd ]
p11_add [-wallet [wallet]] [-p11_lib ] [-p11_tokenlabel ]
[-p11_tokenpw ] [-p11_certlabel ] [-pwd ]
p11_verify [-wallet [wallet]] [-pwd ]
之前说过了
ORACLE
可以使用存储过程来发送未加密的smtp协议邮件,但是现在越来越多邮箱服务商要求强制使用ssl加密,按照前一篇文章的方式,是无法发送的,因此这一篇教大家如何使用
ORACLE
存储过程来发送带ssl加密的email。
文章分以下几个部分
一、获取邮件SSL证书文件
二、把证书添加到
oracle
钱夹(
wal
let
)
三、发送邮件的方法
一、获取邮件ssl证书文件
#### 方法一:使用浏览器获取证书(以360极速浏览器为例)
打开对应邮箱的网页客户端,例如QQ邮箱,浏览器会显示一把锁,如图
#########1.ACL详细解释:
11g 对于XDBUTL_HTTP or others package 的权限管控进一步加强,如果需要使用到XDB 以下包 UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, UTL_INADDR,,必须显性使用到授予用户ACL 权限,
Security in
Oracle
11 and greater has be...
项目上有个需要,证书统一修改为https的接口地址,由于要修改为https,和其系统对接的系统
oracle
数据库内要进行一系列配置来创建钱包导入证书这样子。下面陈述一下我的做法,(其中遇到了很多坑!1.确认当前操作系统的版本 11g还是12c 其实数据库版本对证书导入没啥影响。创建钱包,服务器上首先确认是否有这个钱包路径 没有的话 创建一下。首先保障你得证书是有效的,安全的。要是不可以 检查下证书是否按照上面步骤安装加载的。在钱包中加入当前咱们导出传入服务器的证书。要是可以就是证书配置的没啥问题了。
https://
oracle
-base.com/articles/misc/utl_http-and-sslhttp://blog.whitehorses.nl/2010/05/27/access-to-https-via-utl_http-using-the-orapki-
wal
let
-command/UTL_HTTP and SSL (HTTPS) using
Oracle
Wal
let
sSi...
ORA-29273 http request failed.和ORA-24247: network access denied by access control list (ACL);
Oracle
的一个存储过程要调WebService,报上述错误:
oracle
11.2.0.4版本。
处理办法:http://blog.sina.com.cn/s/blog_14d5a51a90102yuhp.html
项目要求每个星期执行一次C#后台代码,写了一个http请求的存储过程以便每个星期固定时间访问一次后台代码, 用callSP_XXX();执行存储过程,报出如下异常
ORA-29273: HTTP 请求失败
ORA-06512: 在 "SYS.UTL_HTTP", line 1130
ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
ORA-06512: 在 "YGMM.P_SEN...
项目中需要使用utl_http访问webserivce。使用utl_http时报错ORA-29273。最后通过给用户授权解决。BEGIN/* dbms_network_acl_admin.create_acl(acl => '/sys/acls/utlpkg.xml',description => '/sys/acls/utlpkg.xml',principal =...
一般开发中,很少会接触到
Oracle
数据库的
wal
let
,但是我在一次研究发送ssl邮件的时候,了解到了这个东西,当时因为我没找到关于
wal
let
的完整介绍文档,没和DBA说清楚,导致DBA错误操作使数据库无法登陆了。后来我翻了很多中文和英文的文档和文章,对于单实例
ORACLE
数据库,大致整理出以下四种常用的用途
1.客户端免密码登陆数据库
可以生成一个
wal
let
,配置好相关登录信息后,将
wal
let
文件放在客户端上,客户端即可实现无密码登录,防止密码明文配置在客户端导致泄漏的风险,像java、