我支持公司代理,我正在努力启动(Clojure构建工具)。我正在通过boot.j4l.ini设置代理,如下所示:
- Dhttp.proxyHost=<proxy-hostname> - Dhttp.proxyPort=8090
- Dhttps.proxyHost=<proxy-hostname> -Dhttps.proxyPort=8090
下载boot.jar时会发生此错误:无法找到有效的证书路径到请求的目标
我认为它是不受信任的代理的SSL证书,而不是连接的最终目的地。我正在尝试使用SSL公钥和来自代理的证书生成密钥库以传递给流程,但是,我如何获得该密钥库?我尝试使用:
java InstallCert <proxy-hostname>:8090
但是当启动SSL握手时,它抱怨它无法做到,可能是因为它得到了纯文本响应。
如何在Java进程中获取代理服务器的SSL密钥以信任它?
答案 0 :(得分:0)
java程序InstallCert
将证书安装到java-home/lib/security/jssecacerts
。根据{{1}} docs,首先TrustManager将查找在系统属性JSSE
中声明的信任库文件。如果未定义此属性,则会查看javax.net.ssl.trustStore
。
在您的情况下,因为即使在将证书安装到jssecacerts
之后,信任管理器也拒绝接受SSL握手,它可能表示它在正常位置找不到jssecacerts
或者系统属性jssecacerts
定义了一个不同的信任库。
如果您确实在javax.net.ssl.trustStore
使用默认系统密钥库并且要将服务器证书导入系统密钥库,请首先备份系统密钥库,然后从{{1}提取证书使用以下命令将其导入java-home/lib/security/cacerts
。
keytool -exportcert -alias [host] -1 -keystore jssecacerts -storepass changeit -file [host] .cer
keytool -importcert -alias [host] -keystore [系统密钥库的路径] -storepass changeit -file [host] .cer