Atualmente, estou lutando contra um problema persistente ao configurar a autenticação de certificado de cliente para nossos servidores de e-mail por meio de um proxy reverso NginX.
A configuração parece estar funcionando na maioria das partes sem os certificados do cliente. Mas quando eu habilito a checagem destes e executo um teste com openssl s_client
eu sempre obtenho:
Verify return code: 2 (unable to get issuer certificate)
A parte relevante do meu nginx.conf é a seguinte:
ssl on;
ssl_certificate /etc/ssl/certs/server_cert.pem;
ssl_certificate_key /etc/ssl/private/server_key.pem;
ssl_client_certificate /etc/ssl/certs/IntermediateCA_chain.crt;
ssl_crl /etc/ssl/crl.pem;
ssl_verify_client on;
O arquivo IntermediateCA_chain.crt está no formato PEM e consiste no certificado do IntermediateCA e depois no certificado do RootCA.
Side-note: when I do openssl x509 -text -noout -in IntermediateCA_chain.crt
only the IntermediateCA's cert is shown. I expected the chain to be displayed. Is that the correct behaviour?
Eu testo a conexão com o seguinte comando:
openssl s_client -connect server:995 -cert mycert.pem\
-key mykeyfile.pem -debug -CAfile IntermediateCA_chain.pem
Como resultado
[...]
0b50 - b3 c3 3b 17 66 8e 52 b3-ad 7f 14 ..;.f.R....
depth=1 DC = top, DC = ad, CN = Intermediate CA
verify error:num=2:unable to get issuer certificate
issuer= C = DE, O = My Company, CN = My Companies Root CA, emailAddress = [email protected]
read from 0x10f6a10 [0x10fe333] (5 bytes => 5 (0x5))
[...]
Eu tentei todas as variações de IntermediateCA_chain.pem eu poderia pensar em (IntermediateCA.pem, RootCA.pem, IntermediateCA_chein.pem) em ambos os lados.
Parece que a falha está no lado do cliente, porque ela muda levemente com o -CAfile
usado e os logs do servidor não mostram nada (literalmente nada - nenhuma tentativa de conexão ou qualquer outra coisa). Parece-me que o IntermediateCA_chain.pem no servidor ou o lado do cliente não são lidos corretamente. O erro parece resultar no fato de o openssl não conseguir verificar o IntermediateCA e os certificados emitidos por ele. Alguém pode me ajudar a resolver este enigma?