我们开发了一个控制台应用程序,它将从HTTPS上的ESB(https://esb.mkcl.org/)中获取数据。当我点击这个网站时,我得到javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
例外。我将网址更改为https://netbanking.hdfcbank.com/netbanking/,这也是在HTTPS上,在点击后我没有收到任何例外。
经过一番搜索后,我发现我必须在java的密钥库中导入公共证书,即cacerts(C:\ Program Files \ Java \ jre6 \ lib \ security)。所以我从浏览器导出了https://esb.mkcl.org/的证书,并使用keytool
在java中导入,然后执行了控制台应用程序,它就可以了!没有例外。
所以问题是为什么我需要导入微粒 URL的证书(其他HTTPS URL在没有导入任何证书的情况下工作)?
答案 0 :(得分:3)
该服务器证书(COMODO RSA证书颁发机构)使用的根证书在Java 8 Update 51中是added到Java,因此这意味着您正在使用的Java版本(jre路径中的java6)也是如此已经把它包括在内了。
要默认信任该证书,请更新为never java版本。
顺便说一下,that server的ssl配置非常不安全。
答案 1 :(得分:2)
客户端SSL实现依赖于一组已知的“受信任的根证书”。这些是已知可信/可信赖的SSL证书颁发机构的证书。
“问题”是在Java JDK / JRE中分发的密钥库中的受信任证书集(通常)小于典型Web浏览器中的集合。
这是有原因的。例如:
某些JRE可以使用主机操作系统默认密钥库或浏览器密钥库。