失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException

报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException

时间:2020-05-15 19:01:47

相关推荐

报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException

版权声明:本文为博主原创文章,未经博主允许。 /u010248330/article/details/70161899

[java]view plaincopyimportjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;.MalformedURLException;.URL;.URLConnection;importjava.util.Iterator;importjavax.imageio.ImageIO;importjavax.imageio.ImageReader;importjavax.imageio.stream.ImageInputStream;publicclassTestDownLoadImage{publicstaticvoidmain(String[]args){Stringurl="/mw690/006sl6kBgy1fel3aq0nyej30i20hxq7i.jpg";StringdownToFilePath="d:/download/image/";StringfileName="test";imageDownLoad(url,downToFilePath,fileName);}publicstaticvoidimageDownLoad(StringurlString,Stringfilepath,Stringfilename){InputStreamis=null;ImageInputStreamiis=null;OutputStreamos=null;StringdownloadPath=null;try{URLurl=newURL(urlString);URLConnectioncon=url.openConnection();is=con.getInputStream();iis=ImageIO.createImageInputStream(is);Iterator<ImageReader>iter=ImageIO.getImageReaders(iis);if(!iter.hasNext()){return;}ImageReaderreader=iter.next();//读文件格式jpg等StringimgFormat=reader.getFormatName();byte[]bs=newbyte[1024];intlen;Filefile=newFile(filepath);if(!file.exists()){file.mkdir();}downloadPath=filepath+"//"+filename+"."+imgFormat;os=newFileOutputStream(downloadPath);while((len=iis.read(bs))!=-1){os.write(bs,0,len);}}catch(MalformedURLExceptione){e.printStackTrace();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{try{os.close();is.close();iis.close();}catch(IOExceptione){e.printStackTrace();}}return;}}

这个代码是可以正常下载图片的。没有出问题。

后来遇到一个图片的地址是https的,String url="https://05./mobile/0413/0413053046_4a5e70ed0b39c824517630e6954861f2_1.jpeg";

代码就报错了。

报错:

[plain]view .ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderException:.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174).ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747).ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241).ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235).ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1209).ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:135).ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593).ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529).ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943).ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188).ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215).ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199).www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434).www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166).www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195).www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)atTestDownLoadImage.imageDownLoad(TestDownLoadImage.java:43)atTestDownLoadImage.main(TestDownLoadImage.java:30)Causedby:sun.security.validator.ValidatorException:PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderException:unabletofindvalidcertificationpathtorequestedtargetatsun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323)atsun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217)atsun.security.validator.Validator.validate(Validator.java:218).ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126).ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209).ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249).ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1188)...13moreCausedby:sun.security.provider.certpath.SunCertPathBuilderException:unabletofindvalidcertificationpathtorequestedtargetatsun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)atjava.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)atsun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318)...19moreExceptioninthread"main"java.lang.NullPointerExceptionatTestDownLoadImage.imageDownLoad(TestDownLoadImage.java:72)atTestDownLoadImage.main(TestDownLoadImage.java:30)

在网上查阅了信息说是证书问题,可以在代码中写一段逻辑忽略证书:

下面是网上下载的代码:/blog/195.html

[java]view plaincopyimportjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;.ssl.HostnameVerifier;.ssl.HttpsURLConnection;.ssl.SSLContext;.ssl.SSLSession;.ssl.TrustManager;.ssl.X509TrustManager;publicclassSslUtils{publicstaticvoidtrustAllHttpsCertificates()throwsException{TrustManager[]trustAllCerts=newTrustManager[1];TrustManagertm=newmiTM();trustAllCerts[0]=tm;SSLContextsc=SSLContext.getInstance("SSL");sc.init(null,trustAllCerts,null);HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());}staticclassmiTMimplementsTrustManager,X509TrustManager{publicX509Certificate[]getAcceptedIssuers(){returnnull;}publicbooleanisServerTrusted(X509Certificate[]certs){returntrue;}publicbooleanisClientTrusted(X509Certificate[]certs){returntrue;}publicvoidcheckServerTrusted(X509Certificate[]certs,StringauthType)throwsCertificateException{return;}publicvoidcheckClientTrusted(X509Certificate[]certs,StringauthType)throwsCertificateException{return;}}/***忽略HTTPS请求的SSL证书,必须在openConnection之前调用*@throwsException*/publicstaticvoidignoreSsl()throwsException{HostnameVerifierhv=newHostnameVerifier(){publicbooleanverify(StringurlHostName,SSLSessionsession){returntrue;}};trustAllHttpsCertificates();HttpsURLConnection.setDefaultHostnameVerifier(hv);}}//在URLConnection con = url.openConnection()之前使用就行

[java]view plaincopypublicstaticvoidmain(String[]args){//Stringurl="/mw690/006sl6kBgy1fel3aq0nyej30i20hxq7i.jpg";Stringurl="https://05./mobile/0413/0413053046_4a5e70ed0b39c824517630e6954861f2_1.jpeg";StringdownToFilePath="d:/download/image/";StringfileName="test";try{SslUtils.ignoreSsl();}catch(Exceptione){e.printStackTrace();}imageDownLoad(url,downToFilePath,fileName);}

如果觉得《报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。