2012-04-24 75 views
1

我有几个利用DBI进行清理并转换成Rose :: DB的Perl脚本。我的公司使用名为Password Manager Pro(PMP)的产品来管理验证资源。 PMP有一个XML-RPC API,我正在尝试构建一个Rose :: DB :: Object将调用的模块来获取数据库资源的密码,而不是将凭据存储为明文。通过HTTPS的Perl XML-RPC

我看过RPC::XMLXML::RPC,可以找到ssl的选项。我通过HTTPS搜索了一个XML-RPC的例子,但没有运气。

我的大部分脚本都与数据库相关,至今我还没有做过很多基于web的模块。我希望有人能推荐一个解决方案/例子就如何我可以通过下面的XML到服务器,并确定自己使用SSL证书:

<?xml version="1.0" encoding="utf-8"?> 
<methodCall> 
    <methodName>pmp.password.retrieve</methodName> 
    <params> 
     <param> 
     <value><string>pmp-server</string></value> 
     </param> 
     <param> 
     <value><string>administrator</string></value> 
     </param> 
    </params> 
</methodCall> 

我开始用下面的模块,但不使用SSL呈现到服务器它不好:

#!/usr/bin/perl 

use XML::RPC; 
my $certfile = /home/api/.ssl/pmp.p12; #Where to pass this? 
my $xmlrpc = XML::RPC->new('https://pmp.local:7070/xmlrpc'); 
my @result = $xmlrpc->call('pmp.password.retrieve', { 
    resourceName => 'DBSERV', 
    userAccount => 'APITest', 
    reason => 'Test' 
}); 

print @result; 

任何建议的帮助将不胜感激。

回答

0

一个解决方案虽然可能不是最好的,但是可以使用像stunnel这样的SSL代理。您将其设置为侦听端口,并使用相应的证书将任何进入的连接转发到另一个地址/端口。这是一个更加动人的部分,这并不理想,但它确实完成了工作。

0

XML RPC ::使用LWP第一(如果他安装),LWP为SSL使用地穴:: SSLeay的和Net :: SSL,他们使用这个变量:

$ENV{HTTPS_PKCS12_FILE}  = 'certs/pkcs12.pkcs12'; 
$ENV{HTTPS_PKCS12_PASSWORD} = 'PKCS12_PASSWORD'; 

UPD:如有需要,所有的键。

# proxy support 
$ENV{HTTPS_PROXY} = 'http://proxy_hostname_or_ip:port'; 

# proxy_basic_auth 
$ENV{HTTPS_PROXY_USERNAME} = 'username'; 
$ENV{HTTPS_PROXY_PASSWORD} = 'password'; 

# debugging (SSL diagnostics) 
$ENV{HTTPS_DEBUG} = 1; 

# default ssl version 
$ENV{HTTPS_VERSION} = '3'; 

# client certificate support 
$ENV{HTTPS_CERT_FILE} = 'certs/notacacert.pem'; 
$ENV{HTTPS_KEY_FILE} = 'certs/notacakeynopass.pem'; 

# CA cert peer verification 
$ENV{HTTPS_CA_FILE} = 'certs/ca-bundle.crt'; 
$ENV{HTTPS_CA_DIR} = 'certs/'; 

# Client PKCS12 cert support 
$ENV{HTTPS_PKCS12_FILE}  = 'certs/pkcs12.pkcs12'; 
$ENV{HTTPS_PKCS12_PASSWORD} = 'PKCS12_PASSWORD';