Pensando che avrei avuto lo stesso problema degli altri, ho riscontrato numerosi problemi simili e potenziali soluzioni, ma senza fortuna.SSL Java: InstallCert riconosce il certificato, ma ancora "impossibile trovare il percorso di certificazione valido" errore?
L'archivio fidato che sto usando è cacerts, che si trova in lib/security di un JRE 1.6.0 di Java (build 1.6.0_20-b02 ... questa potrebbe essere la radice del problema?). Ho anche provato con jssecacerts.
Utilizzando InstallCert (per altri problemi simili pubblicati), posso vedere il mio certificato è in realtà installato e valido (e l'ho rimosso, re-importato, ecc per assicurarsi che sto vedendo i dati giusti) :
java InstallCert <my host name>
Loading KeyStore jssecacerts...
Opening connection to <my host name>:443...
Starting SSL handshake...
No errors, certificate is already trusted
il check-in keytool e Portecle, ri-importare il CERT (ho provato la generazione da OpenSSL con -showcert, l'esportazione dai browser e scp'ing sopra, ecc) mi dà "che esiste già in questo altro alias qui "tipo di messaggio. Quindi non sembra esserci alcun problema con il modo in cui il certificato sta entrando nello/negli strumento/i.
Forzare esplicitamente i percorsi trustStore nel codice non fa alcuna differenza, e in tutti i casi quello che vedo quando accendo il debug (tramite una setProperty di javax.net.debug su "all") è:
main, SEND TLSv1 ALERT: fatal, description = certificate_unknown
main, WRITE: TLSv1 Alert, length = 2 [Raw write]: length = 7 0000: 15
03 01 00 02 02 2E ....... main, called
closeSocket() main, handling exception:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target
Purtroppo non riesco a consentire l'override del controllo implementando il mio TrustManager - deve effettivamente controllare.
Il certificato che ricevo da l'host ha un certo numero di estensioni (9, per l'esattezza), il che mi fa chiedere se sono in qualche modo parte di questo problema.
Cos'altro posso controllare/provare? Passare a una diversa versione di JRE?
Perché non è possibile implementare il proprio 'TrustManager'? È ancora possibile utilizzare i certificati nel proprio gestore sicuro ed eseguire il controllo. –
@Vivin - Il problema principale che sto cercando di risolvere è all'interno di un livello di applicazione che non controllo direttamente (in questo caso un'applicazione Grails che chiama alcuni servizi Web che sono diventati di recente solo HTTPS), quindi mentre potrei usarlo nel mio scenario locale non posso far valere il suo uso a monte. Che è un dolore, ma ci penserò più tardi - per ora se riesco a farlo funzionare al livello più granulare, almeno mi dice dove andare avanti nella catena di risoluzione. – Bill
Stai eseguendo questo sotto un server di app come GlassFish? Si può verificare se il processo sta eseguendo il binario Java in /usr/lib/jvm/java-1.6.0-sun-1.6.0.20.x86_64 e non in qualche altro binario Java che non gli piace il tuo trustStore (OpenJDK, eccetera). L'output di debug che hai postato è utile, puoi pubblicare di più? – Brad