Я пытаюсь проверить действительность сертификата сервера перед отправкой запроса данных. Следующий код привел к появлению этого сообщения об ошибке: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security ....
, так как мне показалось, что это проблема с trustStore, первым делом я скачал небольшую java-программу под названием «Install Cert.java», чтобы загрузить и установить сертификат сайтов в моем хранилище доверенных сертификатов. Это оказалось успешным. Однако при повторном запуске кода (я использую NetBeans, но запускаю InstallCert из командной строки), выдается та же ошибка.
Я видел другие посты здесь, где совет просто не проверять - использовать фиктивное хранилище доверенных сертификатов или что-то в этом роде. Я не думаю, что это будет уместно для меня, потому что моя спецификация специально требует проверки сертификата проверки кода, даты истечения срока действия, и является ли он доверенным. (Я тоже заблудился - любой совет здесь был бы очень признателен.)
Я новичок в сетевом программировании на Java и провел два дня, стуча головой об этом.
HELP! ~
Спасибо!
Marc
private void connectToNetConnect() throws SSLPeerUnverifiedException {
X509Certificate xCertificate;
HttpsURLConnection secured;
HostnameVerifier hostNameVerifier;
try {
url = new URL(this.SERVER_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
secured = (HttpsURLConnection) con;
secured.connect();
// now get servercertificates and check some stuff
java.security.cert.Certificate[] certs = secured.getServerCertificates();
// prints out the certificates
System.out.println("CERTIFICATES: ");
for(java.security.cert.Certificate cert : certs) {
System.out.println("Certificate is: " + cert);
}
java.security.cert.Certificate firstCert = certs[0];
xCertificate = (X509Certificate)firstCert;
try {
xCertificate.checkValidity();
} catch(CertificateExpiredException e) {
System.out.println("Certificate Expired");
} catch(CertificateNotYetValidException e) {
System.out.println("Certificate Not Yet Valid");
} catch(Exception e) {
System.out.println("Error checking Certificate Validity. See admin.");
}
} catch(MalformedURLException e) {
System.out.println("Malformed URL");
} catch(SSLHandshakeException e) {
System.out.println("Handshake exceptionn");
e.printStackTrace();
} catch(Exception e) {
System.out.println("Plain ole exception");
}
}