我有几个利用DBI的Perl脚本,我正在清理并转换为Rose :: DB。我公司使用名为Password Manager Pro(PMP)的产品来管理身份验证资源。 PMP有XML-RPC API,我正在尝试构建一个模块,Rose :: DB :: Object将调用该模块来获取数据库资源的密码,而不是以明文形式存储的凭据。
我查看了RPC::XML和XML::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;
非常感谢任何建议帮助。
答案 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';