Certificate error "javax.net.ssl.SSLHandshakeException: PKIX path building failed" - java

I'm using JSOUP to connect to a web page and get some content via web scraping method. Everything seems to work fine for months but recently this error started to appear.
ERROR: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
I've added the certificate of the web page (downloaded the certificate from chrome explorer, base64 cer) and added to my java cacert using this command
keytool -import -alias certificatebase64-2 -keystore "C:\Program Files\Java\jdk-11.0.10\lib\security\cacerts" -file certificate-base64.cer
I've also installed the certificate in my windows machine, since in this machine is where the java app is running, using certificate windows assistant
right click on the certificate -> install certificate -> local machine -> and manually select "Trusted Root Certification Authorities"
After this two steps the app begin to works fine again, but after some hours the error pops up again.
The work around I've found is the execute the same comands explained above to add the certificate to my cacerts again (have to change the name of the import)
Here is how I connect to the web page using JSOUP
Connection.Response response = Jsoup.connect("https://www.test.store/us/").method(Connection.Method.GET)
.execute();
I can't seem to find to root cause of this error and why It fails to work some hours after I import the certificates again.

Related

getting sun.security.validator.ValidatorException: PKIX path building failed:

Trying to install Eclipse DTP (Data Tools Platform) from Eclipse marketPlace.I am using Eclipse Java Neon. I am getting following exception/error.
Unable to read repository at
http://download.eclipse.org/datatools/updates/content.jar.
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
Any help is appreciated.
When downloading the content.jar file you're redirected to another mirror site.
In my case i was redirected to "https://mirrors.shu.edu.cn/eclipse/datatools/updates/content.jar"
This website expose an ssl certificate to you but you don't have any certificate authority able to validate this certificate.
What can you do?
download keystore explorer
In Internet explorer open the developper tools and start network recording in the network view
In the address bar copy/paste "http://download.eclipse.org/datatools/updates/content.jar"
Get the https redirected url from the network view
Launch Keystore explorer and open your cacerts file (JRE_OR_JDK_HOME/jre/lib/security/cacerts). The access password is "changeit"
I don't know the exact translation but in keystore explorer menu bar you will find a menu item something along the line "get certificate from TLS/SSL", click on it and provide the secured domain name (for me : mirrors.shu.edu.cn)
Import the certificate in cacerts and save cacerts
restart eclipse and test again
Some important points:
. cacerts is the default repository for certificate authorities used by java
. it is better to import the certificate chain (all the certificates shown by keystore explorer except the website's one)
. Take a good look to the certificates you're importing in cacerts because java will trust them

errors connecting to sonarqube server built in Azure, unverified host and unable to find certificate path

I have set up sonarqube server on a VM in Azure with Azure sql. A self signed cert was created using IIS.
I can connect to the server via a remote browser and after installing the certificate into the Trusted CA I can successfully connect to the server with no warnings.
However on running the sonar-scanner.bat from a a remote client, I receive the following error :
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
I followed some guidelines to install the certificate into the Java keystore by exporting the certificate via IE then importing it into the JAVA keychain as below
keytool -importcert -file c:\sonarcertnew.cer -keystore keystore.jks -alias "Aliasonar but this then gives another error : Caused by: javax.net.ssl.SSLPeerUnverifiedException: Hostname not verified:
So despite exporting the cert and importing into the java keystore still unable to connect. Can anyone advise?
I might be a bit late to help you with this but just solved this issue myself and though I'd add my solution to this for future Googlers!
My problem was caused by trying to use the IP address that Azure assigned to the server, I couldn't get the certificate to work with Java. In the end, I gave my Azure VM a DNS and re-exported the certificate and imported to both Windows and Java. This solved the SSLHandshakeException for me.

STS cloudfoundy integration - SSL exception

scenario:
1. in STS open 'servers' view and add 'cloudFoundry' server
2. in the new server wizard enter "https://api.run.pivotal.io/" and user password
3. press next - I get the following exception :
Unable to communicate with server - I/O error on GET request for "https://api.run.pivotal.io/info":sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
tried adding SSL certificate from the URL to the JDK used by STS , also
tried using the "Trust self-signed certificate" option
both didn't help.
One suggestion to see why connecting to Pivotal Web Services (api.run.pivotal.io) is not working through STS, is to verify that when you added the SSL certificate to the JDK used by STS, it is listed by Java keytool.
For Pivotal Web Services, I believe it should be DigiCert:
Owner: CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
Normally, if this certificate appears in the list of certificates used by the STS JDK, users should be able to connect without getting validator exceptions, and without having to check "Trust self-signed certificate" option.
Maybe this related post can provide additional information:
PKIX path building failed in Java application
Unlike the cf CLI via the option:
--skip-ssl-validation
the Cloud Foundry Tools in STS does not have an option to skip SSL validation.

Connecting via SSL with Java: The basics

I need to connect to a URL over HTTPS using Java. I don't have any experience with SSL certificates, and most of the questions here assume some basic knowledge. I was hoping someone here could get me started on the basics.
When I put the URL in my browser, it connects just fine. When I do it using Java:
new URL("https://mysite.com/").openStream()
it throws javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
This question shows how to ignore the whole certificate thing, but that doesn't feel right. I simply want to use the same certificate my browser does.
I've already tried adding the -Djavax.net.ssl.trustStore=cacerts property, which changes the exception to javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty, which I've taken from this question to mean it can't find the trust store called cacerts. I'm not sure what else to specify, though.
Many sites use self-signed certificates for ssl. You should add them to your JRE's cacerts file. In such cases I use following steps:
Go to https://mysite.com with your browser
Save its certificate to your local machine
Import it to your cacerts with keytool command. The command line looks like this: keytool -import -alias mysite -file mysite.cer -keystore {path/to/cacerts}
As an alternative, you can use openssl s_client utility to retreive mysite.com certificate.

How can I add a server certificate to my local trusted Java key store?

I've written Java client to access a securely-served Web service, however the certificate used by the Web service host is not issued by certification authority, but a self signed or issued by a private CMS. I get the following error:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
use this class
https://confluence.atlassian.com/download/attachments/180292346/InstallCert.java?version=1&modificationDate=1315453596921
issue this command
Java InstallCert “yourserver:sslport”
ex Java InstallCert “chades:8443”
Also don't forget to copy your jssecacerts file to following directory
Java home/jre[version_number]/lib/security

Categories

Resources