¿Por qué necesito agregar certificados de CA intermedios al archivo de cacerts de JVM?

5

Mi empresa utiliza su propia PKI. El navegador web que utilizo para acceder al repositorio de códigos muestra una cadena de certificados de la siguiente manera:

Company Root CA
    Company Issuing CA Intranet Server
        Certificate to the code repository that I want to access

Sin embargo, cuando intento acceder al repositorio usando Gradle, obtengo un

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

error.

Gradle utiliza JVM. He exportado el certificado "Company Root CA" y lo agregué al almacén de certificados de la JVM con el siguiente comando:

"%JAVA_HOME%\bin\keytool.exe" -import -alias company_root_cacert -file "C:\path\to\company\root\cacert.cer" -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit

Sin embargo, esto no resolvió el problema. Además, exporté el certificado "Empresa emisora del servidor de intranet de CA" y lo agregué al almacén de certificados de la JVM con el siguiente comando:

"%JAVA_HOME%\bin\keytool.exe" -import -alias company_intermediate_cacert -file "C:\path\to\company\intermediate\cacert.cer" -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit

Esto ha resuelto el problema.

Mi pregunta es, ¿por qué fue necesario el segundo paso? Dado que el "Servidor de la Intranet de la CA Emisora de la Compañía" está firmado por la "CA Raíz de la Compañía", y como tengo la "CA Raíz de la Compañía" en la lista de certificados en los que confía JVM, ¿por qué necesito agregar además el "Servidor de la Intranet de la CA Emisora de la Compañía"? "certificado al almacén de certificados de JVM?

    
pregunta Utku 23.06.2017 - 11:57
fuente

2 respuestas

5

El problema que describe ocurre generalmente si el servidor solo envía su certificado de hoja y no agrega todos los certificados de cadena necesarios para construir la cadena de confianza a la CA raíz. Desafortunadamente, esta es una mala configuración de los servidores.

Muchos exploradores de escritorio solucionan este problema si ya conocen el certificado de cadena faltante de visitas anteriores o tal vez descargan el certificado faltante si el certificado de hoja contiene una URL para los emisores de CA con acceso de información de autoridad. Pero este comportamiento generalmente se restringe a los navegadores de escritorio y otras herramientas simplemente fallan porque no pueden construir la cadena de confianza.

    
respondido por el Steffen Ullrich 23.06.2017 - 12:18
fuente
5

El JRE de Oracle puede descargar automáticamente el certificado intermedio:

  

Soporte para la extensión de Acceso de información de la autoridad (AIA)

     

Soporte   para el método de acceso de caIssuers de la Autoridad de Acceso de Información   la extensión está disponible. Está deshabilitado por defecto por compatibilidad   y se puede habilitar configurando la propiedad del sistema    com.sun.security.enableAIAcaIssuers al valor true .

     

Si se establece en verdadero, la implementación PKIX de Sun de CertPathBuilder usa la   información en la extensión AIA de un certificado (además de    CertStores que se especifican) para encontrar el certificado de la CA emisora,   siempre que sea un URI de tipo ldap, http o ftp.

     
    

Nota: Dependiendo de su configuración de red y firewall, puede ser necesario configurar también sus servidores proxy de red como se describe     en la documentación de red .

  

(Fuente: Oracle, "Java PKI Programmer's Guide" .)

    
respondido por el Marnix Klooster 23.08.2017 - 15:50
fuente

Lea otras preguntas en las etiquetas