我正在与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一样。
答案 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,但并不是特别彻底。