У меня есть веб-приложение, которое требует, чтобы клиент отправил свой сертификат, а сервер должен проверить сертификат (, т.е. проверить, является ли эмитент действительным эмитентом и присутствует ли он в хранилище доверенных сертификатов сервера ). Вот код:
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>
Но я получаю исключение:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
certification path to requested target<br>
ПРИМЕЧАНИЕ:
Здесь сертификат, отправленный клиентом, — это client.crt, а сертификат, используемый для подписи сертификата client.crt, — это ca.crt, который присутствует в хранилище ключей "trustedca". Тогда почему он дает это исключение?