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、