【发布时间】:2014-12-22 14:29:01
【问题描述】:
TL;DR
如何使 Eclipse 的内置 Maven 连接到使用基于证书的身份验证的 HTTPS 存储库?
m2e 似乎能够找到密钥库,但无法连接。命令行 Maven 使用完全相同的密钥库就像一个魅力。 Run as -> Maven build 适用于外部 Maven 而不是嵌入式 Maven。
问题
我有一个带有依赖项的 Maven 项目。除了常规的用户名-密码组合之外,该依赖项在使用基于 SSL 证书的身份验证的存储库中可用。我需要使用内置的 Maven 在 Eclipse Luna 中使其工作。我所能得到的只是handshake_failure。对日志的调查显示,内置的 Maven 无法找到匹配的证书。
当我将Run as -> Maven build 与外部 Maven 或命令行 Maven 一起使用时,它会成功连接到存储库并完全根据需要获取工件。
有趣的是,外部和嵌入式 Maven 具有相同的版本 (3.2.3)。
设置
我通过eclipse.ini传递这些参数:
-Djavax.net.ssl.trustStore=java.cacerts
-Djavax.net.ssl.trustStorePassword=******
-Djavax.net.ssl.keyStore=private.cacerts
-Djavax.net.ssl.keyStorePassword=******
-Djavax.net.debug=ssl,handshake
trustStore 文件包含:
- 我连接到的存储库的整个证书链(链以自签名证书结尾),其中一个存储在别名
repository.location.url下(此处为文字存储库位置,例如 myrepository.com) - maven central 证书
keyStore 文件包含存储库别名下的导入 PKCS 证书。
设置似乎完全没有问题,因为命令行 Maven 可以工作。如果我使用外部 Maven 或命令行之一,它可以工作。如果我切换到嵌入式(总是用于解决依赖关系),handshake error 就会出现。
我做错了什么?我可能遗漏了一些非常明显的东西。任何帮助将不胜感激。
【问题讨论】:
-
我的第一个猜测是 Eclipse 中的代理设置,但即使是那些也应该使用 VM 的密钥库:-/ Odd。 Eclipse、Java 和 m2e 哪个版本?
-
@AaronDigulla Eclipse Luna 4.4.1、m2e 1.5.0(带有 Maven 3.2.1)和 1.6.0 (3.2.3)、Java 1.7 和 1.8(jdk 和 jre)
-
您在
-vmargs行之后添加了-D选项? -
您的问题可能与使用自签名证书从更新站点安装 Eclipse 插件相同:eclipsesource.com/blogs/2013/04/19/… 您上面的方法看起来是正确的。
-
@AaronDigulla 是的,那些
-D的东西出现在-vmargs之后。 Eclipse 使用的 VM 能够找到文件并列出证书(使用-Djavax.net.debug=ssl,handshake),但它无法找到正确的证书。在 Eclipse 的 VM 之外,这些东西可以完美运行。
标签: java eclipse maven ssl-certificate m2e