我正在尝试使用 Perl Dancer 框架使用 HTTPS 客户端证书执行身份验证。 我想接受带/不带证书发送的请求,并对证书 CN 进行验证以继续进行有效响应 (https://medium.com/@sevcsik/authentication-using-https-client-certificates-3c9d270e8326,链接显示了如何在 node.js 中执行此操作,需要与 perl Dancer/Starman/Plackup 非常相似的东西)
我已经使用 Dancer/Plackup 设置了 ssl,但还没有找到一种方法来获取有关对等证书的详细信息以在 Dancer 框架中执行验证
我想实现以下目标:
如果发送请求
没有证书=> 401
有证书但客户端有自签名(CN 与服务器证书 CN 不匹配)=> 401
有证书但客户端证书已使用服务器证书签名(CN 匹配服务器证书 CN)=> 200
最佳答案
在 Dancer 中,您可以使用 request->env->{'psgix.io'}
获取 IO::Socket::SSL 对象,但这对您没有帮助,因为您没有机会将其配置为客户端验证。 IO::Socket::SSL::set_defaults 也没有足够早地运行。
这意味着最好设置Apache httpd或 nginx终止 TLS。在环境变量中将您需要的证书信息(例如客户端验证结果)传递给 Dancer 应用程序。
关于perl - 如何使用 Dancer/Starman 或 Mojolicious/Daemon 验证 https 客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321938/