通过HTTPS Perl XML-RPC

时间:2012-04-24 23:27:50

标签: perl ssl xml-rpc

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

我查看了RPC::XMLXML::RPC并且找不到ssl的选项。我用Google搜索了一个基于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;

非常感谢任何建议帮助。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

XML :: RPC首先使用LWP(如果安装),LWP for SSL使用Crypt :: 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';