【问题标题】:Process x509 client certificates in Perl在 Perl 中处理 x509 客户端证书
【发布时间】:2014-10-30 16:42:20
【问题描述】:

我正在与Web::ID 合作并有一些问题。

来自FAQ for Web::ID:

如何在 Perl 中使用 WebID?

[...]

否则需要直接使用Web::ID。假设您已将 Web 服务器配置为从浏览器请求客户端证书,并且您已设法将该客户端证书以 PEM 格式导入 Perl,那么它只是:

my $webid = Web::ID->new(certificate => $pem);

my $uri = $webid->uri;

你有 URI。

无论如何,我被困在.. get that client certificate into Perl .. 部分。

通过检查%ENV环境变量,我可以看到客户端证书正在传递给脚本。但我仍然不确定如何以Web::ID 的方式实际处理它……比如检查 SAN。

【问题讨论】:

    标签: perl x509


    【解决方案1】:

    根据mod_ssl的文档,你会在环境变量SSL_CLIENT_CERT中找到PEM编码的客户端证书,所以你只需要调用

     my $webid  = Web::ID->new(certificate => $ENV{SSL_CLIENT_CERT});
    

    但是,Apache 默认不设置SSL_CLIENT_CERT 环境变量。这是出于性能原因 - 如果您的 Perl 脚本不使用它们,那么在生成 Perl 脚本(通过 mod_perl 或 CGI 或其他任何方式)之前设置一大堆环境变量是浪费的,因此它只设置一小部分环境变量默认。您需要 configure Apache correctly 告诉它您想要所有 DA STUFFZ。特别是您希望在 .htaccess 或您的虚拟主机配置或服务器配置文件中有类似的内容:

    SSLOptions +StdEnvVars +ExportCertData
    

    在进行此操作时,您还需要确保将 Apache 配置为要求客户端提供证书。为此,您需要以下内容:

    SSLVerifyClient optional_no_ca
    

    所有这些都是kind of covered in the documentation for Web::ID,但不是特别彻底。

    【讨论】:

    • 哈!我知道就是这样。 my $webid = Web::ID->new(certificate => $ENV{SSL_CLIENT_CERT});你是我爱你的男人tobyink!作为记录,我已经阅读了所有内容,但只是想多了。那一行代码解决了这么多,我希望那行在文档中大声笑
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多