Для всех, кто столкнулся с проблемой, я решил ее, выполнив следующие шаги: (Для создания клиентских и серверных сертификатов я следовал https://medium.com/@sevcsik/authentication-using-https-client-certificates-3c9d270e8326)
1) Используйте nginx (Руководство по установке: https://gist.github.com/netpoetica/5879685)
2) Создайте конфигурацию nginx
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
get '/' => sub {
info to_dumper(request->headers);
content_type 'text/xml';
return "OK";
};
4) Запустите приложение Dancer, используя plackup (или starman / ваш предпочтительный выбор)
carton exec plackup -R /bin,/lib bin/app.psgi
5) Отправьте запрос на сервер
curl -v https://localhost/ --key client_key.pem --cert client_cert.pem --cacert server_cert.pem
6) Вам следуетсоблюдать информацию о сертификате клиента в журналах размещения