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?