在Perl中处理x509客户端证书

时间:2014-10-30 16:42:20

标签: perl x509

我正在与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一样。

1 个答案:

答案 0 :(得分: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,但并不是特别彻底。