proxy nginx + ssl + clr erro “400 pedido incorreto”

5

Aqui está a situação - há um proxy nginx transparente que lida com certificados SSL e o faz bem até que decidimos adicionar um gerenciamento de lista de revogação, necessário por motivos de segurança. É quando a linha "ssl_crl" entra em jogo e estraga tudo.

server {
    listen  80;
    rewrite ^ https://$host$request_uri permanent;
}


server {
    listen 443 ssl;
    server_name example.com;
    ssl on;
    ssl_certificate /home/netadmin/keys/tid.crt;
    ssl_certificate_key /home/netadmin/keys/tid.key;
    ssl_session_cache shared:SSL:10m;
    ssl_client_certificate /home/netadmin/keys/personchain.pem;
    ssl_crl /home/netadmin/keys/personlist.crl;
    ssl_verify_client on;
    ssl_verify_depth 2;
    error_log /var/log/nginx/debug.log debug;

    location / {
            proxy_pass      http://111.111.111.111:80;
    }

O servidor sempre fornecerá o erro "400 Bad Request" sempre que um usuário tentar autenticar com SSL. Note que exatamente a mesma configuração (não a mesma porque sintaxe) funciona perfeitamente no Apache. Agora os certificados são impecáveis, o que foi comprovado muitas vezes; aqui está a verificação, por exemplo

openssl crl -CAfile personchain.pem -inform PEM -in personlist.crl -lastupdate -nextupdate -noout
verify OK
lastUpdate=Apr 22 14:59:18 2013 GMT 
nextUpdate=Apr 29 14:59:18 2013 GMT 

Os links da CRL estão funcionando e não há nada que pareça errado, aqui está uma parte do log de erros.

2013/04/23 15:47:42 [info] 3612#0: *1 client SSL certificate verify error: (3:unable to get certificate CRL) while reading client request headers, client: 192.168.122.1, server: example.com, request: "GET / HTTP/1.1", host: "example.com"

Este é basicamente o único erro que existe e, como afirmei anteriormente, os mesmos certificados funcionam com o Apache. Eu pensei que isso poderia ser um bug, mas o último aviso de erro semelhante é datado de 2011, então eu duvido que ninguém tenha resolvido esse quebra-cabeça ainda.

    
por Pavel Potatis 23.04.2013 / 16:48

2 respostas

1

Mesma resposta que aqui: link : Se você tiver vários CA, terá que concatenar todas as CRLs.

You have to concatenate all the CRL in chain: Root CA and Intermediate CAs.

Using openssl crl -in crl_list.crl -noout -text only read the first crl, but nginx reads them correctly and validate the user certificate.

Inspired by: https://www.ruby-forum.com/topic/6874370

    
por 18.03.2015 / 18:06
0

O processo nginx tem acesso de leitura a esse arquivo? Também está no formato pem adequado e assinado por um mesmo ca como root crt?

Exemplo:

$ openssl crl -text -noout -in personlist.crl

Referência: link

    
por 23.07.2013 / 13:46