1

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;

どんな提案でも大歓迎です。

4

2 に答える 2

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';
于 2012-04-25T01:49:02.777 に答える
0

1 つの解決策は、おそらく最善ではありませんが、stunnelなどの SSL プロキシを使用することです。ポートでリッスンするように設定すると、着信する接続はすべて、適切な証明書を使用して別のアドレス/ポートに転送されます。これは可動部分の 1 つですが、理想的とは言えませんが、仕事は完了します。

于 2012-04-25T00:37:09.660 に答える