Visualizzazione post con etichetta https. Mostra tutti i post
Visualizzazione post con etichetta https. Mostra tutti i post

lunedì 12 gennaio 2015

Configurazione WAS 8.5 per chiamate HTTPS

Se da una applicazione Web richiamiamo un url di WebSphere e questa Url è in https allora è necessario importare il certificato dentro WebSphere.
Si noti che questo vale sempre, anche se ci si connette a siti trusted (es https://www.google.it).
Mi è capitato infatti che lo stesso codice funzionante su Tomcat 7 andasse in errore su Was 8.5.
L'eccezione in fase di chiamata era la seguente :

Error 500: javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: PKIX path building failed: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is: java.security.cert.CertPathValidatorException: The certificate issued by OU=Equifax Secure Certificate Authority, O=Equifax, C=US is not trusted; internal cause is: java.security.cert.CertPathValidatorException: Certificate chaining error 

Per risolvere occorre seguire i passaggi seguenti

1 - Da console WAS 8.5 Sicurezza/Gestione chiavi e certificati SSL






2 - Selezionare keystore e certificati



3 - Cliccare quindi su "Certificati firmatario"







4 - Selezionare NodeDefaultTrustore per accedere alla lista

5 - Selezionare l'opzione "Richiama da porta" e quindi inserire i dati del server, la porta (di solito la 443) e un alias che possiamo definire a piacere per il nome del trustore, quindi cliccare su Richiama Informazioni Firmatario per avere i dettagli del certificato





 Salvando questa configurazione, senza necessità di riavviare WAS 8.5 la chiamata all'url in https funziona correttamente.



martedì 28 gennaio 2014

Errore CertificateException : No subject alternative names present in chiamata HTTPS

Ho passato un pomeriggio a dannarmi per questo errore, ottenuto in fase di chiamata ad un Web Service in HTTPS sulla mia macchina.
Lo scenario è il seguente:
  1. Ho creato un certificato HTTPS;
  2. Lo ho inserito in Tomcat per fare in modo che un mio web service rispondesse in HTTPS;
  3. Ho scritto un client JAVA per il servizio
Il client Java è stato generato con JAX-WS, con il comando wsimport prima che fosse messo in HTTPS il servizio.
L'unica modifica al client fatta è stata quella di creare un costruttore ulteriore che prendesse in input l'url del servizio come Stringa, in modo da poterlo invocare a runtime con il percorso in https.
Cercando quindi l'errore su Internet ho letto che il problema era dato dalla presenza nel CN del certificato di un nome diverso da quello del server invocato lato client; ho letto anche che tale problema si verifica soltanto in caso di certificati self signed.
Ho provato a rigenerare il certificato mettendo nel CN (il primo campo richiesto dalla procedura keytool) l'indirizzo 127.0.0.1 oppure localhost ma nulla da fare, sempre lo stesso errore.
Ho risolto così:
  1. Nel file hosts della mia macchina ho aggiunto un nome XXX mappandolo a 127.0.0.1;
  2. Ho rigenerato il certificato mettendo come nome nel CN lo stesso del punto 1;
  3. Ho effettuato la chiamata client con l'indirizzo http://XXX:8080/URL_WSDL.

Cosìfacendo ha funzionato, anche se non capisco perchè...