OpenVPN: certificado autoassinado em cadeia


9

Estou tentando, sem êxito, usar TunnelBlick(um cliente OS / X OpenVPN 2.2.1 que seja conhecido) para conectar-se usando certificados. Aqui está a mensagem de erro (higienizada) que recebo:

2012-01-11 11:18:26 TLS: Pacote inicial de **. **. **. **: 1194, sid = 17a4a801 5012e004
2012-01-11 11:18:26 VERIFICAR ERRO: profundidade = 1, erro = certificado autoassinado na cadeia de certificados: / C = US / ST = ** / L = ** / O = ** / CN = ** / emailAddress = **
2012-01-11 11:18:26 TLS_ERROR: BIO lê erro tls_read_plaintext: erro: 14090086: rotinas SSL: SSL3_GET_SERVER_CERTIFICATE: falha na verificação do certificado
2012-01-11 11:18:26 Erro TLS: objeto TLS -> erro de leitura de texto sem formatação recebido
2012-01-11 11:18:26 Erro no TLS: falha no handshake TLS
2012-01-11 11:18:26 TCP / UDP: soquete de fechamento

Agora, aqui está o problema. Eu mesmo gerei um CSR para solicitar esse certificado, usando o arquivo ca.crt fornecido pelo outro lado (na verdade, eles fizeram isso duas vezes apenas para garantir).

As entradas relevantes na configuração do cliente são:

ca   ca.crt
cert my.crt
key  my.key

e, além disso ... posso verificar as chaves desta maneira:

openssl verifica -CAfile ca.crt my.crt 
my.crt: OK

Ok, agora estou completamente confuso e perplexo. Neste ponto, eu sei que o CSR e a chave foram gerados usando o CSR apropriado. De fato, aqui está o próprio comando que fez isso:

openssl req -newkey rsa:2048 -new -out my.csr -keyout my.key

Eu também sabia fazer isso:

openssl x509 -subject -issuer -noout -in ca.crt

...

(piscar!)

Acabei de encontrar ?

A saída desse comando é semelhante a esta: (editada um pouco)

Assunto = / C = US / ST = VA / L = ** / O = ** / CN = ** CA / emailAddress = **
emissor = (o mesmo)

enquanto na mensagem de erro do OpenVPN, o ST = não é exatamente o mesmo:

VERIFICAR ERRO: profundidade = 1, erro = certificado autoassinado na cadeia de certificados: / C = US / ST = Virgínia / L = ** / O = ** / CN = ** / emailAddress = **

"VA" não é exatamente igual a "Virginia".


2
Experimente openssl s_client -connect host:port -showcertse compare a impressão digital do certificado recebido com openssl x509 -noout -text -in ca.crt.
Shane Madden

Respostas:


7

Apenas para encerrar completamente esse segmento: esse era realmente o problema. O "ca.crt" que eu recebi ("Virginia") NÃO era de fato aquele que meu colega estava usando ("VA"), e nenhum de nós notou na época.

Então ... basicamente (e puramente em termos de leigos), a VPN estava tentando dar um passeio pela cadeia de autoridade procurando o ca.crt que esperava encontrar, mas nunca encontrou (porque não estava lá).

E, essa é uma daquelas mensagens maravilhosas pelas quais os sistemas de criptografia são tão conhecidos: inteiramente precisos e, no entanto, completamente misteriosos para os não iniciados. (E, para ser justo, os sistemas de criptografia não gostam de divulgar informações sobre nada, pois presumem que a pessoa com quem estão conversando é certamente uma Eva má , não agradável Alice ou Bob.)


Para ser justo, não estou convencido de que isso tenha algo a ver com a cadeia de CA e mais com o fato de que era uma CA diferente em primeiro lugar e, portanto, automaticamente não confiável. O OpenSSL não precisa andar muito. Talvez seja isso que você quis dizer.
gparent
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.