它看起来像一个标准问题,但我无法在任何地方找到明确的方向.
我有java代码尝试连接到可能具有自签名(或过期)证书的服务器.代码报告以下错误:
[HttpMethodDirector] I/O exception (javax.net.ssl.SSLHandshakeException) caught
when processing request: sun.security.validator.ValidatorException: PKIX path
building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Run Code Online (Sandbox Code Playgroud)
据我了解,我必须使用keytool并告诉java允许这种连接是可以的.
解决此问题的所有说明都假设我完全熟练使用keytool,例如
为服务器生成私钥并将其导入密钥库
有没有人可以发布详细说明?
我正在运行unix,所以bash脚本最好.
不确定它是否重要,但代码是在jboss中执行的.
我正在将SSL客户端连接到我的SSL服务器.当客户端由于客户端密钥存储区中不存在根证书而无法验证证书时,我需要选择将该证书添加到代码中的本地密钥存储区并继续.有一些示例总是接受所有证书,但我希望用户验证证书并将其添加到本地密钥库而无需离开应用程序.
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 23467);
try{
sslsocket.startHandshake();
} catch (IOException e) {
//here I want to get the peer's certificate, conditionally add to local key store, then reauthenticate successfully
}
Run Code Online (Sandbox Code Playgroud)
有很多关于自定义SocketFactory,TrustManager,SSLContext等的东西,我真的不明白它们是如何组合在一起的,或者哪条是我目标的最短路径.