我有一个现有的应用程序,该应用程序将密钥库和证书数据保存在自己的数据库中,并使用数据库数据之外的密钥库和信任库创建一个SSLContext
。
我想编写一个使用提供的SSLContext
创建SSL连接的单元测试,但是在尝试时确实得到了InvalidAlgorithmParameterException
。到目前为止,我发现的所有与该错误有关的信息都会导致替换或声明jdk cacerts
文件的路径。据我了解,由于我的证书,密钥库和信任库是从数据库中加载后的内存,因此存储此类信息的文件不会成为我的问题的原因。
引发此异常时,是否存在一些常见的根本问题?到目前为止,我只知道某个地方出了点问题,这不是一个好的开始。
我的代码如下:
SSLContext ctx = ...
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
URL url = new URL("https://target-address");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy-address", 8080)));
con.getInputStream();
在最后一行抛出异常:
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
到目前为止,我的设置是否正确?知道我必须在创建SSLContext时发现问题对我来说已经是一个胜利。对于使用SSL /证书创建连接的整个主题,我真的是一个新手。