W przeciwieństwie do przyjętej odpowiedzi, nie potrzebujesz niestandardowego menedżera zaufania, musisz naprawić konfigurację serwera!
Uderzyłem ten sam problem podczas łączenia się z serwerem Apache z niepoprawnie zainstalowanym certyfikatem dynadot / alphassl. Łączę się za pomocą HttpsUrlConnection (Java / Android), który rzucał -
javax.net.ssl.SSLHandshakeException:
java.security.cert.CertPathValidatorException:
Trust anchor for certification path not found.
Rzeczywistym problemem jest błędna konfiguracja serwera - przetestuj go http://www.digicert.com/help/ lub podobnej, a nawet podpowie Ci rozwiązanie:
„Certyfikat nie jest podpisany przez zaufany organ (porównanie z głównym sklepem Mozilli). Jeśli kupiłeś certyfikat od zaufanego organu, prawdopodobnie po prostu musisz zainstalować jeden lub więcej certyfikatów pośrednich . Skontaktuj się z dostawcą certyfikatu, aby uzyskać pomoc platforma serwera ”.
Możesz także sprawdzić certyfikat za pomocą openssl:
openssl s_client -debug -connect www.thedomaintocheck.com:443
Prawdopodobnie zobaczysz:
Verify return code: 21 (unable to verify the first certificate)
i wcześniej w danych wyjściowych:
depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
verify error:num=21:unable to verify the first certificate`
Łańcuch certyfikatów będzie zawierał tylko 1 element (twój certyfikat):
Certificate chain
0 s:/OU=Domain Control Validated/CN=www.thedomaintocheck.com
i:/O=AlphaSSL/CN=AlphaSSL CA - G2
... ale powinien odwoływać się do organów podpisujących w łańcuchu z powrotem do zaufanego systemu Android (Verisign, GlobalSign itp.):
Certificate chain
0 s:/OU=Domain Control Validated/CN=www.thedomaintocheck.com
i:/O=AlphaSSL/CN=AlphaSSL CA - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
Instrukcje (i certyfikaty pośrednie) dotyczące konfigurowania serwera są zwykle dostarczane przez organ, który wystawił certyfikat, na przykład: http://www.alphassl.com/support/install-root-certificate.html
Po zainstalowaniu certyfikatów pośrednich dostarczonych przez mojego wystawcę certyfikatu nie mam teraz błędów podczas łączenia za pomocą HttpsUrlConnection.