通过HTTPS进行Java身份验证

时间:2012-01-23 23:42:00

标签: java authentication https

我正在尝试通过HTTPS对服务器进行身份验证。我在握手方面遇到了问题。我认为这是因为当我在浏览器中访问URL时,会出现一个弹出框。如果我取消了,我可以转到一个允许我再次登录的表格。服务器安全性是TAM。

它实际上是在我遇到问题的开始。当我尝试运行此代码时:

        HttpResponse response = httpclient.execute(httpget);

我收到IOException错误,指出javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated。我正在使用的示例代码来自Apache HTTPClient docs。我也尝试过使用内置的java身份验证方法,但是我遇到了握手的其他问题,说证书不受信任。

无论如何,我现在非常困难,这令人沮丧,因为我觉得这种东西应该足够基本。

那么,是否有人可以指导我通过HTTPS进行身份验证的示例代码?

感谢。

编辑: 只是添加另一个错误,我在使用与证书相关的内置java http auth时得到:

javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.g: PKIX path building failed: 
java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is: 
java.security.cert.CertPathValidatorException: The certificate issued by CN=XXX Internal Root CA, O=XXX Corporation, C=US is not trusted; internal cause is: 
java.security.cert.CertPathValidatorException: Certificate chaining error

2 个答案:

答案 0 :(得分:0)

您似乎缺少jvm密钥库中的服务器SSL证书,您需要使用keytool导入证书。这是一个link 如何做。这是另一个link (即使它适用于Gmail,您可能会发现有用的步骤)

答案 1 :(得分:0)

这里的问题是Windows。或者更具体地说是WinInet API,显然。

我可以创建一个接受所有证书的自定义TrustManager,它可以正常连接。另外,如果我在Linux上没有hack的情况下尝试我的代码,那么它工作正常。因此无论Windows处理密钥库的方式如何,都会给我带来麻烦。