Il nostro sistema comunica con diversi provider di servizi Web. Sono tutti invocati da una singola applicazione client Java. Tutti i servizi Web fino ad ora sono stati su SSL, ma nessuno usa i certificati client. Bene, un nuovo partner sta cambiando.Scelta del certificato client SSL in Java
Fare in modo che l'applicazione utilizzi un certificato per l'invocazione è semplice; l'impostazione javax.net.ssl.keyStore
e javax.net.ssl.keyStorePassword
lo farà. Tuttavia, il problema è ora come farlo in modo che utilizzi il certificato solo quando si richiama quel particolare servizio web. Immagino più in generale, vorremmo poter scegliere il certificato client da utilizzare, se esiste.
Una soluzione rapida potrebbe essere impostare le proprietà del sistema, richiamare i metodi e quindi disattivarli. L'unico problema è che abbiamo a che fare con un'applicazione multi-thread, quindi ora avremmo bisogno di gestire la sincronizzazione o i blocchi o cosa avete.
Ogni client di servizio dovrebbe essere completamente indipendente l'uno dall'altro e sono confezionati singolarmente in JAR separati. Quindi, un'opzione che mi è venuta in mente (anche se non l'abbiamo analizzata correttamente) è di isolare in qualche modo ogni JAR, magari caricandoli ciascuno sotto una VM diversa con parametri diversi. È semplicemente un'idea che non so come implementare (o se è addirittura possibile, per quello).
This post suggerisce che è possibile selezionare un singolo certificato da un keystore, ma come collegarlo alla richiesta sembra essere un problema diverso del tutto.
Stiamo utilizzando le classi Java 1.5, Axis2 e client generate con wsimport
o wsdl2java
.
Purtroppo non abbiamo alcun controllo sui server. Speravo anche che questi suggerimenti potessero essere utili, ma un test ha dimostrato che almeno con un server non lo erano. WRT Axis2, è stata anche la mia esperienza. Se ti capita di conoscere un altro strumento Java che consente questo tipo di comportamento, apprezzerei molto la tua condivisione; lo esploreremo volentieri – Carlos
@Carlos - Forse non ero chiaro. Non hai bisogno di alcun controllo sul server; se il tuo partner richiede ora un certificato client, configurerà il suo server per richiederlo. Il tuo cliente * non * invierà quel certificato a nessun altro server, perché (presumibilmente) non lo richiederanno. L'unico problema potenziale potrebbe essere se i servizi aggiuntivi iniziano a richiedere un certificato client, ma non accettano le stesse CA. – erickson
Capito, grazie. Immagino che l'altra domanda resti, però.Se domani aggiungiamo un altro servizio Web che richiede anche un certificato client, esiste un modo per scegliere quale certificato nel keystore presentare a ciascun servizio? – Carlos