报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
来源:互联网 发布:想给自己淘宝店铺刷单 编辑:程序博客网 时间:2024/06/05 16:07
import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.Iterator;import javax.imageio.ImageIO;import javax.imageio.ImageReader;import javax.imageio.stream.ImageInputStream;public class TestDownLoadImage {public static void main(String[] args) { String url="http://wx1.sinaimg.cn/mw690/006sl6kBgy1fel3aq0nyej30i20hxq7i.jpg"; String downToFilePath="d:/download/image/"; String fileName="test"; imageDownLoad(url, downToFilePath,fileName);}public static void imageDownLoad(String urlString, String filepath,String filename) {InputStream is =null;ImageInputStream iis=null;OutputStream os =null;String downloadPath=null; try { URL url = new URL(urlString);URLConnection con = url.openConnection();is = con.getInputStream();iis=ImageIO.createImageInputStream(is);Iterator<ImageReader> iter = ImageIO.getImageReaders(iis); if (!iter.hasNext()) { return ; } ImageReader reader = iter.next(); //读文件格式jpg 等 String imgFormat=reader.getFormatName(); byte[] bs = new byte[1024];int len;File file=new File(filepath);if(!file.exists()){file.mkdir();}downloadPath=filepath+"//"+filename+"."+imgFormat;os = new FileOutputStream(downloadPath);while ((len = iis.read(bs)) != -1) { os.write(bs, 0, len);}} catch (MalformedURLException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally{try {os.close();is.close();iis.close();} catch (IOException e) {e.printStackTrace();} } return ;} }
这个代码是可以正常下载图片的。没有出问题。
后来遇到一个图片的地址是https的,String url="https://05.imgmini.eastday.com/mobile/20170413/20170413053046_4a5e70ed0b39c824517630e6954861f2_1.jpeg";
代码就报错了。
报错:
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 targetat com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747)at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1209)at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:135)at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)at TestDownLoadImage.imageDownLoad(TestDownLoadImage.java:43)at TestDownLoadImage.main(TestDownLoadImage.java:30)Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323)at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217)at sun.security.validator.Validator.validate(Validator.java:218)at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1188)... 13 moreCaused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318)... 19 moreException in thread "main" java.lang.NullPointerExceptionat TestDownLoadImage.imageDownLoad(TestDownLoadImage.java:72)at TestDownLoadImage.main(TestDownLoadImage.java:30)
在网上查阅了信息说是证书问题,可以在代码中写一段逻辑忽略证书:
下面是网上下载的代码:http://www.sojson.com/blog/195.html
import java.security.cert.CertificateException;import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager; public class SslUtils { public static void trustAllHttpsCertificates() throws Exception { TrustManager[] trustAllCerts = new TrustManager[1]; TrustManager tm = new miTM(); trustAllCerts[0] = tm; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, null); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } static class miTM implements TrustManager,X509TrustManager { public X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted(X509Certificate[] certs) { return true; } public boolean isClientTrusted(X509Certificate[] certs) { return true; } public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { return; } public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { return; } } /** * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用 * @throws Exception */ public static void ignoreSsl() throws Exception{ HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { return true; } }; trustAllHttpsCertificates(); HttpsURLConnection.setDefaultHostnameVerifier(hv); }}//在URLConnection con = url.openConnection()之前使用就行
public static void main(String[] args) { //String url="http://wx1.sinaimg.cn/mw690/006sl6kBgy1fel3aq0nyej30i20hxq7i.jpg"; String url="https://05.imgmini.eastday.com/mobile/20170413/20170413053046_4a5e70ed0b39c824517630e6954861f2_1.jpeg"; String downToFilePath="d:/download/image/"; String fileName="test"; try {SslUtils.ignoreSsl();} catch (Exception e) {e.printStackTrace();} imageDownLoad(url, downToFilePath,fileName);}
2 0
- 报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
- javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f
- Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path
- javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path building失败
- javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f
- javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building
- 解决 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path buildin
- 爬数据出现错误javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
- https请求证书异常javax.net.ssl.SSLHandshakeException sun.security.validator.Validator
- javax.net.ssl.SSLHandshakeException: sun.security.validator 问题解决,与环境有关
- sun.security.validator.ValidatorException
- OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
- OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
- OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
- javax.net.ssl.SSLHandshakeException
- javax.net.ssl.SSLHandshakeException
- javax.net.ssl.SSLHandshakeException
- 解决 javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException
- POJ2349 Arctic Network
- GreenDao3.0新特性解析(配置、注解、加密)
- HTML5新标签在IE6/IE7/IE8中的几种兼容方式
- CUDA优化策略之-achieved occupancy
- 线性结构—栈
- 报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
- 设计模式学习笔记——装饰模式
- 汇编语言实验4-利用跳转指令构造循环
- C语言笔记之技巧
- 构建高效可申缩的结果缓存
- 文章标题Linux下进度条的简单实现
- 开篇
- 【java】【java collection】Vector
- RESTful服务最佳实践——(十三)