【发布时间】:2015-07-16 23:59:53
【问题描述】:
我现在有一些 perl 代码退出到 shell 以调用 curl 与带有证书的端点对话。这很好用,但是当我逃到 shell 并采取简单的选择时,我总是觉得我在使用 perl 作弊。下面是我正在使用的 curl 命令,它工作正常。
$soap_response = echo '$soap_request' | curl --cacert $self->{'server_cert'} --cert $self->{'client_cert'} -d '\@-' -H 'SOAPAction:urn:anonOutInOp' $self->{'end_point'} -s | xmllint -format -;
我有一个 CA 文件和一个客户端文件,都是 PEM 格式的。
我曾尝试使用 LWP 和 Net::SSL 纯粹在 perl 中进行这种通信,并摆脱对 curl 的依赖,但我一辈子都无法让它工作。
我将 Net:SSL 的环境设置为
#set up the ssl envrioment for Net::SSL
$ENV{HTTPS_DEBUG} = 1;
$ENV{HTTPS_CERT_FILE} = $client_cert;
$ENV{HTTPS_CA_FILE} = $server_cert;
$ENV{HTTPS_CA_DIR} = $certificate_dir;
然后将我的请求发送为
my $ua = new LWP::UserAgent();
my $request = HTTP::Request->new(POST => $endpoint);
$request->header(SOAPAction => '"query"');
$request->content($query);
$request->content_type("text/xml; charset=utf-8");
my $response = $ua->request($request);
print $response->content,"\n";
我运行时得到的输出是
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soapenv:Fault><faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:HTTP</faultcode><faultstring>(403)Forbidden</faultstring><detail><ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">hh0pgw01</ns2:hostname><ns3:HttpErrorCode xmlns:ns3="http://xml.apache.org/axis/">403</ns3:HttpErrorCode></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
所以它似乎交换了 CA 文件并且对主机很满意,但是我的请求随后被 403 禁止错误拒绝,我怀疑这与我的客户端密钥没有与请求正确交换有关。
谁能帮我解决这个问题或建议它可能在哪里崩溃。
【问题讨论】:
标签: perl ssl curl lwp lwp-useragent