Java 如何获取代理的SSL密钥?

Java 如何获取代理的SSL密钥?,java,ssl,Java,Ssl,我支持一个公司代理,我正试图让boot(Clojure构建工具)正常工作。我通过boot.j4l.ini设置代理,如下所示: - Dhttp.proxyHost=<proxy-hostname> - Dhttp.proxyPort=8090 - Dhttps.proxyHost=<proxy-hostname> -Dhttps.proxyPort=8090 -Dhttp.proxyHost=-Dhttp.proxyPort=8090 -Dhttps.proxyHost=

我支持一个公司代理,我正试图让boot(Clojure构建工具)正常工作。我通过boot.j4l.ini设置代理,如下所示:

- Dhttp.proxyHost=<proxy-hostname> - Dhttp.proxyPort=8090
- Dhttps.proxyHost=<proxy-hostname> -Dhttps.proxyPort=8090
-Dhttp.proxyHost=-Dhttp.proxyPort=8090
-Dhttps.proxyHost=-Dhttps.proxyPort=8090
这导致在下载boot.jar时发生此错误:无法找到请求目标的有效认证路径

我假设代理的SSL证书不受信任,并且不是连接的最终目的地。我试图生成一个密钥库,用SSL公钥和来自代理的证书传递给进程,但是,我如何获得它呢?我尝试使用:

java InstallCert <proxy-hostname>:8090
java安装证书:8090
但是,当启动SSL握手时,它抱怨说它做不到,可能是因为它得到了纯文本响应


如何获取代理服务器的SSL密钥以在Java引导过程中信任它

java程序
InstallCert
将证书安装到
java home/lib/security/jssecacerts
。根据
JSSE
,TrustManager首先将查找在系统属性
javax.net.ssl.trustStore
中声明的信任存储文件。如果未定义此属性,它将查看
jssecacerts

在您的情况下,因为即使在将证书安装到
jssecacerts
之后,信任管理器仍拒绝接受SSL握手,这可能表明它没有在通常的位置找到
jssecacerts
,或者系统属性
javax.net.SSL.trustStore
定义了不同的信任存储

如果您确实在
java home/lib/security/cacerts
上使用默认系统密钥库,并且希望将服务器证书导入系统密钥库,请首先备份系统密钥库,然后使用以下命令从
jssecacerts
提取证书,并将其导入
cacerts

从创建的jssecacerts密钥库中提取证书 keytool-exportcert-alias[host]-1-keystore jssecacerts-storepass changeit-file[host].cer

将证书导入系统密钥库
keytool-importcert-alias[host]-keystore[path to system keystore]-storepass changeit-file[host].cer

您需要证书,而不仅仅是公钥。已修复。InstallCert同时下载