Java的证书:HTTPS与SSL应用笔记测试

在取得connection的时候和正常浏览器访问一样,仍然会验证服务端的证书是否被信任(权威机构发行或者被权威机构签名);如果服务端证书不被信任,则默认的实现就会有问题,一般来说,java在访问ssl的链接时经常会报错误:

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
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:405)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
at com.wenhq.http.TestSSL.testAig(TestSSL.java:21)
at com.wenhq.http.TestSSL.main(TestSSL.java:13)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
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:954)
… 12 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at 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:280)

原因就是缺少信任的安全证书时出现的异常。

客户端在进行SSL连接时,JSSE将根据这个文件中的证书决定是否信任服务器端的证书。在SunJSSE中,有一个信任管理器类负责决定是否信任远端的证书,这个类有如下的处理规则:
1)若系统属性javax.net.sll.trustStore指定了TrustStore文件,那么信任管理器就去jre安装路径下的lib/security/目录中寻找并使用这个文件来检查证书。
2)若该系统属性没有指定TrustStore文件,它就会去jre安装路径下寻找默认的TrustStore文件,这个文件的相对路径为:lib/security/jssecacerts。
3)若jssecacerts不存在,但是cacerts存在(它随J2SDK一起发行,含有数量有限的可信任的基本证书),那么这个默认的TrustStore文件就是lib/security/cacerts。

可以通过下面的方法给java增加信任证书:
1、从chrome浏览器中导出 证书的cer格式文件;



2.导入cer证书到java的证书信任库
D:Program FilesJavajdk1.6.0_07bin>keytool -import -keystore jssecacerts -file purchase.cer -alias purchase

输入keystore密码:changeit
再次输入新密码:changeit

3、把生成的 jssecacerts文件放到$Javahomejdk1.6.0_07jrelibsecurity目录下就可以了。

关于keytool工具用法总结

SUN公司提供了制作证书的工具keytool,  在JDK 1.4以后的版本中都包含了这一工具,它的位置为<JAVA_HOME>binkeytool.exe。

keytool的几个常用的命令。
1.创建证书
2.查看证书库
3.导出证书文件
4.导入证书的信息
5.查看证书信息
6.删除密钥库中的条目
7.修改证书条目的口令

1.创建证书
keytool -genkeypair -alias “test1″ -keyalg “RSA” -keystore “test.keystore”

说明:
密钥库密码为testtest
证书条目密码为testtest1,若别名为test2则密码为testtest2
这样为个不乱
功能:
创建一个别名为test1的证书条目,该条目存放在名为test.keystore的密钥库中,若test.keystore密钥库不存在则创建。
参数说明:
-genkeypair:生成一对非对称密钥;
-alias:指定密钥对的别名,该别名是公开的;
-keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
-keystore:密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个”.keystore”的文件

2.查看证书库
keytool -list -keystore test.keystore

3.导出到证书文件
keytool -export -alias test1 -file test.crt -keystore test.keystore
将名为test.keystore的证书库中别名为test1的证书条目导出到证书文件test.crt中

4.导入证书的信息
keytool -import -keystore test_cacerts -file test.crt

5.查看证书信息
keytool -printcert -file “test.crt”

6.删除密钥库中的条目
删除密钥库test.keystore中别名为test2的证书条目
keytool -delete -keystore test.keystore -alias test2

7.修改证书条目的口令
keytool -keypasswd -alias test1 -keypass testtesttest1 -new testtest1 -storepass testtest -keystore test.keystore
功能:
将密钥库test.keystore中别名为test1的证书条目的密码修改为testtest1

时间: 2024-10-04 22:51:59

Java的证书:HTTPS与SSL应用笔记测试的相关文章

微信小程序 免费SSL证书https、TLS版本问题的解决办法_JavaScript

微信小程序 免费SSL证书https.TLS版本问题的解决办法 微信小程序与第三方服务器通讯的域名5个必要条件 1.一个已备案的域名,不是localhost.也不是127.0.0.1,域名不能加端口 2.加ssl证书,也就是https://~~~ 4.HTTPS 服务器的 TLS 版本支持1.2及以下版本,一般就是1.0.1.1.1.2要同时支持这三个版本,一个也不能少,要不然就会出现下面这种情况 5.微信小程序后台加上合法域名设置(一个月内改的次数是有限的,且行且珍惜)如下图 以上5个条件,必

代码-java 如何调用 https 双向认证接口内容

问题描述 java 如何调用 https 双向认证接口内容 通过webservice获取一个https的内容,但这个网址需要pfx证书(证书和密码我都有,通过IE访问没问题),请问怎么通过 java webservice 代码去访问这个连接的内容? 解决方案 双向认证的话,http://love398146779.iteye.com/blog/2065423 解决方案二: 可以参考:http://blog.csdn.net/a351945755/article/details/22796797h

聊聊HTTPS和SSL/TLS协议

要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 TCP 的关系(尤其是"短连接"VS"长连接") 大致了解加密算法的概念(尤其是"对称加密与非对称加密"的区别) 大致了解 CA 证书的用途 考虑到很多技术菜鸟可能不了解上述背景,俺先用最简短的文字描述一下.如果你自认为不是菜鸟,请略过本章节,直接去看"HTTPS 协议的需求".

Java中请求HTTPS加密的源代码

import java.io.*;import java.net.*;import java.security.*;import java.security.cert.*;import java.util.*;import javax.net.ssl.*; public class HttpsTest {    // We would never hardcode this literal in a real system,    // this is only for this article

效率提升十倍!浪潮推出针对Https的SSL解决方案

近年来互联网上的安全事故频发,因此行业内开始了新的一轮对互联网安全的大讨论.其中已经有20多年历史的Http协议备受争议,由于其采用明文传输,让黑客有了可乘之机.但是其"安全版本"Https处理效率慢导致的访问延时则成为阻碍其推广的一大瓶颈.近期,浪潮推出了针对Https的SSL加解密加速解决方案,使Https加解密效率提升十倍以上,保障访问安全的同时,不会影响网站访问的效率,为打造更安全的网络环境奠定基础.   有天,小A接到用户的反馈,说是在其官网下载的游戏是另家公司的产品.当时小

浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

浅谈 HTTPS 和 SSL/TLS 协议的背景与基础 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 TCP 的关系(尤其是"短连接"VS"长连接") 大致了解加密算法的概念(尤其是"对称加密与非对称加密"的区别) 大致了解 CA 证书的用途 考虑到很多技术菜鸟可能不了解上述背景,俺先用最简短的文字描述一下.如果你自认为不是菜鸟,请

java后台请求https协议返回xml怎么解决?

问题描述 java后台请求https协议返回xml怎么解决? 我在做一个跟第三方支付对接,现在做到了查询支付结果这里,它们给的接口是异步请求他们的地址,但是他们的协议是https的,直接ajax请求没有权限.后台我又在后台请求,结果报ssl错误,我的jdk版本是1.7_11版本的,tomcat5.5的,请求地址是https://payment.dinpay.com/MQueryOrder.do 返回一段xml,求高手帮我在后台请求这个地址,然后把这个xml以字符串的形式返回,非常感谢

黑帽大会:HTTPS和SSL协议存在安全漏洞

HTTPS(安全HTTP)和SSL/TLS(安全套接层/传输层安全)协议是Web安全和可信电子商务的核心,但Web应用安全专家Robert "RSnake" Hansen和Josh Sokol在昨天的黑帽大会上宣布,Web浏览器的基础架构中存在24个危险程度不同的安全漏洞.这些漏洞基本上使HTTPS和SSL能够提供的浏览器保护荡然无存. HTTPS对HTTP协议进行了加密,以保护用户的页面请求和Web服务器返回的页面不被窃听.SSL及后来的TLS协议允许HTTPS利用公钥加密验证Web

SAE Java环境访问https报错:java.security.InvalidAlgorithmPara

使用SAE的Java一直很顺利,在本地Tomcat测试没有问题,上传到SAE后就报这个错,搜索了一下,大体上是指环境方面的问题,这里分享一下. 访问地址: https://api.weibo.com/2/users/show.json 错误信息: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty on Linux, or why is the default