Sprawdzanie poprawności certyfikatu w java zgłasza wyjątek - nie można znaleźć prawidłowej ścieżki certyfikatu do żądanego celu
Mam aplikację internetową, która wymaga od klienta wysłania certyfikatu, a serwer musi zweryfikować certyfikat (tzn. Sprawdzić, czy wystawca jest prawidłowym wystawcą i jest obecny w magazynie zaufanych certyfikatów). Oto kod:
<code>FileInputStream fin=new FileInputStream("C:/trustedca"); KeyStore anchors = KeyStore.getInstance("JKS","SUN"); anchors.load(fin, "server".toCharArray()); X509CertSelector target = new X509CertSelector(); FileInputStream fin1=new FileInputStream("C:/client.crt"); CertificateFactory cf=CertificateFactory.getInstance("X.509"); X509Certificate cert=null; while (fin1.available() > 0) { System.out.println("in while---------"); cert =(X509Certificate) cf.generateCertificate(fin1); } target.setCertificate(cert); PKIXBuilderParameters params = new PKIXBuilderParameters(anchors, target); CertPathBuilder builder = (CertPathBuilder) CertPathBuilder.getInstance("PKIX").build(params); PKIXCertPathBuilderResult r = (PKIXCertPathBuilderResult) builder.build((CertPathParameters)params);<br> </code>
Ale dostaję wyjątek:
<code>sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target<br> </code>
UWAGA :
Tutaj certyfikat wysłany przez klienta to client.crt, a certyfikatem używanym do podpisania certyfikatu client.crt jest ca.crt, który jest obecny w magazynie kluczy „zaufanego”. Dlaczego więc daje ten wyjątek?