Java7 Odmowa zaufania do certyfikatu w magazynie zaufania

Mam dziwny problem - dostawca używa protokołu TLS SSLv3 zarówno z własnym podpisem klienta, jak i certyfikatem serwera. Nie był to problem z Java1.5 i Java1.6 - wystarczy zaimportować certyfikat klienta i klucz prywatny do magazynu kluczy, a certyfikat publiczny serwera do magazynu zaufanych certyfikatów. Wszystko dziala. Jednak w przypadku Java7 nie można ufać certyfikatowi serwera, nawet jeśli używany jest ten sam magazyn zaufanych certyfikatów. Wypróbowałem system Windows i Red Hat przy użyciu Java7 (wersje 1.7.03, 04 i 05, x86 i x64) bez powodzenia.

Odtworzyłem magazyn kluczy / magazyn zaufanych certyfikatów od podstaw i zawierają one tylko te certyfikaty. Ustawiono odpowiednie właściwości systemu (javax.net.ssl.keyStore, javax.net.ssl.trustStore), a kluczowym aspektem jest to, że dokładnie ten sam kod i konfiguracja działają idealnie w JDK5 / 6.

Jestem na straty - nie mogę znaleźć żadnego odniesienia do dodatkowego sprawdzania, ale pomyślałbym, że fakt, że certyfikat został umieszczony w magazynie zaufanych certyfikatów, powinien oznaczać, że jest zaufany, niezależnie od tego, czy został podpisany samodzielnie.

Każda pomoc doceniana. Reklamy

Śledzenie wyjątków:

Exception in thread "main" javax.net.ssl.SSLHandshakeException:     sun.security.validator.ValidatorException: PKIX path validation failed:     java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1868)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1338)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:154)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:998)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:685)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:111)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at com.alltria.ypsilon.testing.TestSSL.main(TestSSL.java:65)
Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:350)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:249)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1320)
... 13 more
Caused by: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:208)
at java.security.cert.CertPathValidator.validate(CertPathValidator.java:279)
at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:345)
... 19 more
Java Result: 1

Część, w której nie powiodło się debugowanie ssl, próbuje zweryfikować certyfikat serwera:

***
%% Invalidated:  [Session-1, SSL_RSA_WITH_RC4_128_SHA]
main, SEND SSLv3 ALERT:  fatal, description = certificate_unknown
main, WRITE: SSLv3 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 00 00 02 02 2E                               .......
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
main, called close()
main, called closeInternal(true)

questionAnswers(3)

yourAnswerToTheQuestion