2012-04-24 77 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';