【问题标题】:Perl XML-RPC over HTTPS基于 HTTPS 的 Perl XML-RPC
【发布时间】:2012-04-24 23:27:50
【问题描述】:

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

我查看了 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;

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

【问题讨论】:

    标签: perl ssl xml-rpc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-04
        相关资源
        最近更新 更多