首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Dancer/Starman或Mojolicious/Daemon验证https客户端证书?

如何使用Dancer/Starman或Mojolicious/Daemon验证https客户端证书?
EN

Stack Overflow用户
提问于 2019-05-27 15:58:47
回答 2查看 320关注 0票数 1

我正在尝试使用使用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进行签名

EN

回答 2

Stack Overflow用户

发布于 2019-05-27 19:49:00

在Dancer中,您可以使用request->env->{'psgix.io'}获取IO::Socket::SSL对象,但这对您没有帮助,因为您没有机会将其配置为用于客户端验证。IO::Socket::SSL::set_defaults的运行时间也不够早。

这意味着最好设置Apache httpdnginx来终止TLS。在环境变量中将所需的证书信息(例如,客户端验证结果)传递给Dancer应用程序。

票数 1
EN

Stack Overflow用户

发布于 2019-05-27 20:19:06

对于任何面临这个问题的人,我通过以下步骤解决了这个问题:(为了创建客户端和服务器证书,我遵循了https://medium.com/@sevcsik/authentication-using-https-client-certificates-3c9d270e8326)

1)使用nginx (安装指南:https://gist.github.com/netpoetica/5879685)

2)创建nginx配置

代码语言:javascript
复制
server {
    listen 443 ssl;
    server_name localhost;
    ssl_certificate /to/path/server_cert.pem;  # server certificate
    ssl_certificate_key /to/path/server_key.pem; # server key

    ssl_client_certificate /to/path/server_cert.pem; # client CA => server certificate for self signed 
    ssl_verify_client on;

    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header SSL_CLIENT_CERT $ssl_client_cert; #ENTIRE CLIENT CERTIFICATE
        proxy_set_header SSL_CLIENT_S_DN $ssl_client_s_dn; #SUBJECT DN
        proxy_set_header SSL_CLIENT_I_DN $ssl_client_i_dn; #ISSUER DN
    }
}

有关ssl的更多详细信息,可以使用http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables上提到的属性进行共享。

3) Dancer应用程序

代码语言:javascript
复制
get '/' => sub {
    info to_dumper(request->headers);
    content_type 'text/xml';
    return "OK";
};

4)使用plackup (或starman/您的首选)启动舞者应用程序

代码语言:javascript
复制
carton exec plackup -R /bin,/lib bin/app.psgi

5)向服务器发送请求

代码语言:javascript
复制
curl -v https://localhost/ --key client_key.pem --cert client_cert.pem --cacert server_cert.pem

6)您应该观察plackup日志中的客户端证书详细信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56321938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档