certificado CA inválido openssl

8

Estou configurando o OpenVPN de servidor para servidor com uma infraestrutura de PKI e não posso fazê-lo funcionar. Suspeito que seja algo da cadeia de certificados, mas não consigo explicar como. Eu tenho uma CA raiz offline e uma hierarquia de certificados. As autoridades de certificação são gerenciadas externamente por um produto chamado EJBCA. Na figura, a corrente fica assim (com nomes alterados):

RootCA -> OnlineSubCA -> SubCA1 -> VPNCA

Assinei um certificado de servidor e cliente com o CA VPNCA e tenho a cadeia de certificados nesses sistemas. Ao depurar o OpenVPN, tentei usar "openssl s_server" e s_client ", levando-me a acreditar que é a cadeia de CA. Especificamente no servidor:

openssl s_server -cert server.cert -key server.key -CAfile chained.pem -verify 5

e no cliente

openssl s_client -cert client.cert -key client.key -CAfile chained.pem -verify 5

o servidor cospe de volta, entre outras coisas:

depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=24:invalid CA certificate
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=26:unsupported certificate purpose
verify return:1
depth=4 C = CA, O = My Company, CN = RootCA, emailAddress = [email protected]
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify return:1
depth=2 CN = SubCA1, O = My Company, C = CA
verify return:1
depth=1 CN = VPNCA
verify return:1
depth=0 C = CA, ST = , L = , O = My Company, OU = , CN = client1.mycompany.com, emailAddress = [email protected]
verify return:1

e estou completamente perdido para explicar como ou por que esse é o caso. O OpenVPN também falha com um erro semelhante, do cliente:

VERIFY ERROR: depth=3, error=invalid CA certificate: /C=CA/O=My_Company/CN=OnlineSubCA

Estou executando o OpenVPN 2.2.1 e o OpenSSL 1.0.1 no Ubuntu 12.04. O tempo está sincronizado nos dois.

Estou sem saber como proceder. Todas as idéias / sugestões serão muito apreciadas.

Michael Hart
fonte

Respostas:

16

Este é um problema com as extensões X509v3. Os certificados modernos são assinados de maneira a indicar os usos aprovados para esse tipo de certificado. Eles podem ser exibidos através da inserção do certificado openssl x509 -textou da especificação do caminho do arquivo -in.

No seu caso, essas mensagens de erro indicam que o certificado que você está especificando não é um certificado da CA. (a dica maior é "finalidade do certificado não suportada"). Usando o comando acima, exiba as informações de texto do certificado. Um certificado CA válido terá a seguinte redação:

        X509v3 Basic Constraints:
            CA:TRUE

Um certificado que não seja da CA exibirá isso:

        X509v3 Basic Constraints:
            CA:FALSE

Você pode ter seus arquivos desordenados, é uma coisa bastante fácil de fazer ao mover os arquivos. openssl x509vai brilhar uma lupa sobre o que são os conteúdos dos certificados reais.

Andrew B
fonte
Esse é realmente o problema, ao inspecionar o segundo certificado, mostramos o "CA: FALSE". Parece estar configurado dessa maneira no EJBCA, o que é um erro, talvez seja necessário recriá-lo. Obrigado Andrew!
Michael Hart
Ainda bem que ajudou. :)
Andrew B
7
Além disso, você receberá 26 / unspupported propósito certificado se você tem "crítica" como uma restrição básica, mas o seu cert não está assinado / a confiança de uma das autoridades legítimas (corri para este uso tentar um auto assinado um CA raiz)
Zerkz