URL url = new URL("https://servidor.com/");
Si la URL a la que vols accedir és d'un servidor ben conegut, segur que els seus certificats han estat emesos per una Autoritat Certificadora coneguda per Sun (ara Oracle) i tot anirà a la primera. Si no és el cas i es tracta d'un certificat emès per una entitat relativament petita, o fins i tot un certificat autosignat, comencen els problemes.
Cal saber que els certificats arrel que manega la màquina virtual java (si no s'especifica el contrari amb
-Djavax.net.ssl.trustStore
), es troben a un fitxer anomenat cacerts
que es troba a java.home/lib/security
. Si tens més d'un Java instal·lat el primer que has de saber és quin estàs fent servir. I que el PATH
i el JAVA_HOME
siguin correctes.L'eina per explorar i modificar aquest repositori de claus és el keytool que ve amb el Java. Per llistar els valors de
cacaerts
, per exemple, cal llençar la següent comanda des del directori correcte (noteu que el password per defecte és changeit
):keytool -list -v -keystore cacerts -storepass changeit -storetype jks
Si l'emisor dels certificats no és dels "coneguts", no hi serà al
cacerts
. Així que si és alguna cosa com la Fábrica Nacional de Moneda y Timbre o l'Agència Catalana de Certificació et toca obtenir els certificats i instal·lar-los amb el keytool
. Hi ha molts tutorials de com obtenir i instal·lar certificats.Si el que tens és un certificat autosignat, el que necessites és que Java no el validi. No és molt segur, però de vegades no tens més remei. Aquesta pàgina d'exemple mostra com desactivar la validació de certificats en Java.
Finalment anoto uns enllaços que he trobat interessants:
- Comandes keytool habituals
- Comandes OpenSSL habituals
- Troubleshooting PKIX Path Building Failed (També conté un enllaç a una utilitat que instal·la els certificats automàticament)
3 comments:
Sembla q tu tb t'has hagut de barallar amb els certificats...
"Per llistar els valors de cacaerts...". T'ha traït el subconscient? :)
Qué recuerdos, qué recuerdos... ;-)
Post a Comment