no nginx.conf eu adicionei uma cláusula if para filtrar as conexões ssl baseadas no cn.
Por exemplo
map $ssl_client_s_dn $ssl_client_s_dn_cn {
default "";
~/CN=(?<CN>[^/]+) $CN;
}
server {
listen 80 default_server;
server_name nginx-server;
return 301 https://$server_name$request_uri;
listen 443 ssl;
listen [::]:443 ssl;
server_name nginx-server;
ssl_certificate /path/to/server/cert.pem
ssl_certificate_key /path/to/nginx-server/privatekey.pem
location / {
if ($ssl_client_s_dn_cn !~ "client") {
return 403;
}
root /usr/share/nginx/html;
index index.html index.htm;
}
}
Agora, na linha de comando, estou tentando enrolar fornecendo um certificado que possui um DN semelhante ao C=GB,ST=London,L=City,O=MyOrg,OU=myOU,CN=client
erro 403.
Tentei com outros certs também, independente do certificado DN/CN, notei que o Nginx retorna 403. Nos logs de acesso tentei logar o $ssl_client_s_dn
valor nos logs, mas vem em branco.
Peguei a referência de http://nginx.org/en/docs/http/ngx_http_ssl_module.html
O que estou perdendo aqui?
atualizar:
Se eu codificar o valor na função a seguir para retornar o cliente, ele funcionará bem:
map $ssl_client_s_dn $ssl_client_s_dn_cn {
default "client";
}
Percebo que o valor de ssl_client_s_dn pode estar em branco de acordo com os logs do nginx. Tem algo a ver com a ativação do módulo ngx_http_ssl_module?
Eu verifiquei $ nginx V
acho que o módulo está listado.
A saída é anexada em uma imagem
Não tenho certeza do que estou perdendo! Alguma ajuda por favor?
Obrigado, J.E.
Eu consegui consertar. Postando solução aqui apenas no caso de poder ajudar alguém no mesmo barco.
Nas minhas configurações faltava pouco
ssl_verify_client optional
; até especificarmos, aprendi que, a menos que mencionemos ssl_verify_client em ou opcional, a variável $ssl_client_s_dn não está definida. Continuará imprimindo em branco.Em retrospectiva, faz sentido que, sem habilitar a verificação do cliente, o que o servidor fará com o DN do assunto do cliente. No entanto, eu ficaria mais feliz se os logs do nginx mencionassem a diretiva ausente. Eu tive que descobrir por tentativa e erro. Mas ainda bem que finalmente funcionou.