Java https服务器认证问题的解决方法
2016-03-08 11:05
585 查看
Java https服务器认证问题的解决方法
java访问https出现如下错误:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed
原因
由于Java自带根证书库中不包含此HTTPS服务器上的根证书,导致认证失败。解决方案
有两种:1、导入服务器证书到本地Java环境
2、代码中忽略证书信任问题
第二种方案会有安全性问题,一般不推荐。
证书导入注意事项
将服务器的根证书导入到Java运行环境的根证书库中,能解决对应的服务器https连接问题。实现方式是使用$JAVA_HOME/jre/bin下的keytool工具将服务器端的证书添加到jre/lib/security/cacerts文件中。
需要注意的是:
确定当前Java程序所用的java运行环境jre的路径(可能为jdk下的jre,也可能是单独的jre)。
确定有jre/lib/security/cacerts文件的写入权限(可以用管理员权限运行keytool)。
导入证书详细步骤:
1. 获取服务器端的证书文件
可以使用浏览器打开服务器网站页面,然后导出证书文件,假设导出的证书文件为test.crt 。2. 生成keystore文件
利用keytool生成密钥文件keystore:keytool -importcert -noprompt -trustcacerts -alias test -file mycer.cer -keystore mykeystore
这里要设置口令。
3. 导入证书到Java运行时环境
将证书导入jre/lib/security/cacerts:keytool -importkeystore -srckeystore ~/keystore -destkeystore [path_jre]/lib/security/cacerts
会要求输入目标密钥库口令(也就是jre/lib/security/cacerts 的口令,默认是changeit或者changeme),以及源密钥库口令(之前设置的口令).
最后会显示是否导入成功。如果成功则重启Java程序。
忽略证书信任代码:
// Create a trust manager that does not validate certificate chainsTrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
public X509Certificate[] getAcceptedIssuers(){return null;}
public void checkClientTrusted(X509Certificate[] certs, String authType){}
public void checkServerTrusted(X509Certificate[] certs, String authType){}
}};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
相关文章推荐
- AFHTTPSessionManager
- 安卓Service组件使用系列3:使用IntentService下载网络图片
- httpd2.2.3+SVN1.4.6 (一)
- httpd2.2.3+SVN1.4.6(二)
- SvnManager1.0.5+httpd2.2.3+SVN1.4.6+PHP5.2.8+MySQL5.1.51
- TCP连接建立断开
- HttpClient 大量连接等待异常的处理
- 安卓Service组件使用系列2:使用Service下载网络图片并存储于sdCard卡上
- TCP状态学习
- HTTP Status Code [RFC]
- iOS AFN 封装POST网络请求(AFURLSessionManager)
- 下载网络文件HttpURLConnection.getContentLength()大小为 -1
- 无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase的类文件
- 【小镇的技术天梯】理解VMware WorkStation的虚拟网络
- 计算机网络——6.局域网交换技术
- android 网络判断是否可用
- JAVA利用HttpClient进行POST请求(HTTPS)
- 【bzoj1834】[ZJOI2010]network 网络扩容 费用流
- Linux-配置网络
- Android——网络编程(网络图片查看器)