我有几个利用DBI的Perl脚本,我正在清理这些脚本并将其转换为Rose::DB。我的公司使用名为Password Manager Pro (PMP)的产品来管理身份验证资源。PMP有一个XML-RPC API,我正在尝试构建一个模块,Rose::DB::Object将调用该模块来获取数据库资源的密码,而不是将凭据存储为明文。
我已经看过RPC::XML和XML::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;任何有帮助的建议都将不胜感激。
发布于 2012-04-25 08:37:10
一种解决方案,虽然可能不是最好的,是使用像stunnel这样的SSL代理。您将其设置为侦听一个端口,传入的任何连接都将使用适当的证书转发到另一个地址/端口。这是另一个移动的部分,这并不理想,但它确实完成了工作。
发布于 2012-04-25 09:49:03
XML::RPC首先使用LWP (如果已安装),LWP for SSL使用Crypt::SSLeay和Net::SSL,它们使用以下变量:
$ENV{HTTPS_PKCS12_FILE} = 'certs/pkcs12.pkcs12';
$ENV{HTTPS_PKCS12_PASSWORD} = 'PKCS12_PASSWORD';更新:如果需要,所有密钥。
# 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';https://stackoverflow.com/questions/10307406
复制相似问题