如何获取代理的SSL密钥?

时间:2017-02-16 15:40:18

标签: java ssl

我支持公司代理,我正在努力启动(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密钥以信任它?

1 个答案:

答案 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

从创建的jssecacerts密钥库

中提取证书

keytool -exportcert -alias [host] -1 -keystore jssecacerts -storepass changeit -file [host] .cer

将证书导入系统密钥库

keytool -importcert -alias [host] -keystore [系统密钥库的路径] -storepass changeit -file [host] .cer