certificado de CA inválido openssl

8

Estoy configurando OpenVPN de servidor a servidor con una infraestructura PKI, y no puedo hacer que funcione. Sospecho que es algo en la cadena de certificados, pero no puedo explicar cómo. Tengo una CA raíz fuera de línea y una jerarquía de certificados. Las CA son administradas externamente por un producto llamado EJBCA. Pictóricamente, la cadena se ve así (con los nombres cambiados):

RootCA -> OnlineSubCA -> SubCA1 -> VPNCA

Firmé un certificado de servidor y cliente con CA VPNCA, y tengo la cadena de certificados en esos sistemas. Mientras depuraba OpenVPN intenté usar "openssl s_server" y s_client ", lo que me hizo creer que es la cadena CA. Específicamente en el servidor:

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

y en el cliente

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

el servidor escupe, entre otras cosas:

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

y estoy completamente perdido para explicar cómo o por qué este es el caso. OpenVPN también falla con un error similar, desde el cliente:

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

Estoy ejecutando OpenVPN 2.2.1 y OpenSSL 1.0.1 en Ubuntu 12.04. El tiempo está sincronizado en ambos.

No sé cómo proceder más. Cualquier idea / sugerencia sería muy apreciada.

Michael Hart
fuente

Respuestas:

16

Este es un problema con las extensiones X509v3. Los certificados modernos se firman de una manera que indica los usos aprobados para ese tipo de certificado. Éstos se pueden mostrar conectando el certificado openssl x509 -texto especificando la ruta del archivo con -in.

En su caso, estos mensajes de error indican que el certificado que está especificando no es un certificado de CA. (la sugerencia más importante es "propósito de certificado no admitido") Utilizando el comando anterior, muestre la información de texto del certificado. Un certificado de CA válido se leerá así:

        X509v3 Basic Constraints:
            CA:TRUE

Un certificado que no sea de CA mostrará esto en su lugar:

        X509v3 Basic Constraints:
            CA:FALSE

Es posible que haya confundido sus archivos, es algo bastante fácil de hacer cuando mueve los archivos. openssl x509brillará una lupa sobre cuáles son los contenidos de los certificados reales.

Andrew B
fuente
Ese es de hecho el problema, inspeccionar el segundo certificado muestra el "CA: FALSO". Parece que está configurado de esa manera en EJBCA, lo cual es un error, es posible que tenga que volver a crearlo. Gracias Andrew!
Michael Hart
Me alegra que haya ayudado. :)
Andrew B
77
Además, obtendrá 26 propósito de certificado / unspupported si tiene "crítico" como una limitación básica, pero su certificado no está firmado / confianza de una de las autoridades de fiar (encontré con este uso de probar un auto firmado una CA raíz)
Zerkz