【问题标题】:Perl certificate authenticationPerl 证书认证
【发布时间】:2020-02-28 14:02:54
【问题描述】:

我正在尝试使用 perl 验证证书。我可以验证证书并通过 curl 获得响应,但我该如何转换。以下为 perl。

curl -i --cert /Downloads/file.pfx:secret_key --cert-type P12 https://example.com/gettoken

当我在 curl 中运行上述内容时,我会返回一个带有状态 ok 和其他数据的 json 对象。

我尝试在 perl 中进行相同的转换

use LWP::UserAgent qw();
require LWP::Protocol::https;
my $ua = LWP::UserAgent->new;
$ua->ssl_opts(
SSL_ca_file   => '/Downloads/file.pfx',
);
my $test = $ua->post('https://example.com/gettoken');

当我在 $test 上进行转储时,我收到 500 错误。如何传递证书类型和密钥。还是我离题了,这不是正确的模块。

【问题讨论】:

  • 您确定您的下载目录在您的根目录中吗?如果是这样,那就太不寻常了。此外,Perl 是一种鼓励尝试不同方法直到成功的语言。您的错误似乎表明服务器无法正确处理您的请求(500),这可能意味着以下两种情况之一:服务器出现故障,或者您的请求完全荒谬。唯一的好处是您的程序正在运行,只是不是以“服务器兼容”的方式运行。
  • 下载只是一个例子。我正在寻求将 curl 命令转换为 perl 的帮助。我认为请求编写正确,但是我不确定在哪里添加 curl 命令正在使用的密钥和证书类型。

标签: perl curl


【解决方案1】:
curl -i --cert /Downloads/file.pfx:secret_key ...

--cert 用于客户端证书

...
SSL_ca_file   => '/Downloads/file.pfx',

SSL_ca_file 用于信任存储。 IE。您将相同的文件用于完全不同的任务。要用作客户端证书,您必须改用 SSL_cert_file 选项:

...
SSL_cert_file   => '/Downloads/file.pfx',

使用最新版本的 IO::Socket::SSL 它应该能够透明地处理 PFX 文件。我不确定它是否适用于受密码保护的 PFX 文件,但您可以尝试使用 SSL_passwd_cb 设置密码:

SSL_passwd_cb => sub { "secret_key" },

如果这不起作用并且对于旧版本的 IO::Socket::SSL,您需要从 PFX 文件中提取 PEM 格式的证书和密钥。

【讨论】:

  • 谢谢,我去看看。
【解决方案2】:
use LWP::UserAgent qw();
my $ua = LWP::UserAgent->new (
ssl_opts => {
  SSL_cert_file => '/path/to/file',
  #SSL_key_file  => $keyfile 
  SSL_passwd_cb => sub {"mysecretkey"},
}
);
my $res = $ua->get ("https://example.com/gettoken");

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 2012-12-09
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多