La mia azienda utilizza il proprio PKI. Il browser Web che utilizzo per accedere al repository di codice mostra una catena di certificati come segue:
Company Root CA
Company Issuing CA Intranet Server
Certificate to the code repository that I want to access
Tuttavia, quando provo ad accedere al repository usando Gradle, ottengo un
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
errore.
Gradle usa JVM. Ho esportato il certificato "CA radice aziendale" e l'ho aggiunto all'archivio certificati della JVM con il seguente 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
Tuttavia, questo non risolve il problema. Ho inoltre esportato il certificato "Azienda che rilascia il CA Intranet Server" e l'ho aggiunto all'archivio certificati della JVM con il seguente 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
Questo ha risolto il problema.
La mia domanda è: perché è stato necessario il secondo passaggio? Poiché il "Company Issuing CA Intranet Server" è firmato da "Company Root CA", e poiché ho "Company Root CA" nell'elenco dei certificati attendibili da JVM, perché ho dovuto aggiungere anche "Server di Intranet CA di emissione della società" "certificato per l'archivio certificati di JVM?