Estoy intentando probar la siguiente configuración:
Un servidor RADIUS funciona con el protocolo EAP-TLS. El cliente y el servidor tienen los siguientes certificados:
Cliente
Clave pública: clientcert_intermediatecert_chain.pem
Certificado CA: rootcert.pem
Servidor
Clave pública: servercert_intermediatecert_chain.pem
Certificado CA: rootcert.pem
Tanto el certificado del cliente ( clientcert.pem
) como el certificado del servidor ( servercert.pem
) están firmados por el mismo certificado intermedio ( intermediatecert.pem
), que está firmado por el certificado raíz ( rootcert.pem
).
Ambas cadenas, que están configuradas para ser las claves públicas, se juntan así (mediante el comando de Shell):
cat servercert.pem intermediatecert.pem > servercert_intermediatecert_chain.pem
cat clientcert.pem intermediatecert.pem > clientcert_intermediatecert_chain.pem
Ahora, el cliente intenta conectarse al servidor. Ambas partes envían sus claves públicas e intentan verificar las claves públicas recibidas con rootcert.pem
Sé que la forma "normal" sería, que la clave pública era solo el certificado del servidor o del cliente. Y el certificado CA sería la cadena imcert-rootcert, pero tengo que saber si esto también funcionará.
Ahora mis preguntas:
- ¿Es legítimo que la clave pública sea una cadena que consiste en el certificado del servidor / cliente y el certificado intermedio?
- Y si es así, ¿esto se aplica a ambos lados (servidor y cliente)?
- ¿Debería un servidor (como FreeRADIUS) o un cliente poder verificar cadenas como éstas con el certificado raíz, si las reciben de la parte del contador?
Según mi experiencia, FreeRADIUS no verifica el derecho de tal cadena de certificados. Si no me equivoco, FreeRADIUS usa la biblioteca OpenSSL y hace lo mismo que el siguiente comando en la situación que se muestra arriba:
openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem
Y estoy bastante seguro de que esto no funciona. OpenSSL no puede verificar una cadena como esta con el certificado raíz. Falla cuando se trata de unir la cadena de confianza.
¿Esto es correcto?
Por cierto, FreeRADIUS devuelve el mismo error que el comando de verificación: error 20 at 0 depth: cannot find issuer certificate
, lo que significa que no puede unir la cadena de confianza.