具有基于 ssl 证书的身份验证的 m2e

Posted

技术标签:

【中文标题】具有基于 ssl 证书的身份验证的 m2e【英文标题】:m2e with ssl certificate-based authentication 【发布时间】: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 之外,这些东西可以完美运行。 【参考方案1】:

对我不起作用的选项

将证书安装到 java > jre > lib > security > cacerts 在 java 运行配置 vm 参数中提供 cacerts 将 eclipse 更新到最新版本,如火星或霓虹灯 将 Eclipse 的 maven 插件更新到 1.7.0

为我解决问题的步骤

Download certificate file 并在 Preferences > Remote Systems > SSL > Add 处添加 eclipse 清除 .m2 > 所有现有文件的存储库文件夹 打开 Eclipse,右键单击项目并选择 Maven > 更新项目。选择强制更新快照/版本

于 2017 年 9 月 19 日更新

如果没有其他方法,Installing the certificate to Java 在您的机器上@java > jre > lib > security > cacerts 可以提供帮助

【讨论】:

谢谢。在我按照建议执行 Maven > Update Project 后它起作用了。 m2e 1.14.0 (with eclipse 2019.12) here,它仍然无法正常工作...命令行 maven 可以正常工作。 eclipse 和命令行都运行相同的 JVM 并安装了证书【参考方案2】:

我遇到了完全相同的问题:Eclipse 无法使用嵌入式 maven 安装连接到外部 maven 存储库,以防存储库需要客户端 SSL 证书。

通过升级到最新的 jvm(在我的例子中 - 1.8.0u52)并将 Eclipse m2e 插件升级到版本 1.6.1(使用 Eclipse 版本 4.4.0)解决了这个问题。

【讨论】:

看来m2e更新成功了,1.6.1似乎没有这个问题 m2e 1.13.0 (with eclipse 2019.09) here,它仍然无法正常工作...命令行 maven 可以正常工作【参考方案3】:

在您的运行配置中,选择您的 maven 构建,然后选择对话框顶部的 JRE 选项卡。将您的 SSL 参数放入 VM 参数文本区域。

这就是为我解决的问题。

【讨论】:

问题是关于嵌入式 Maven,即 Eclipse 在内部用于更新项目的那个。外部的,即用于运行配置的,工作得很好。【参考方案4】:

我设法通过在 Eclipse 中设置外部 maven 来修复它。 Eclipse->窗口->首选项->Maven->安装->添加

【讨论】:

以上是关于具有基于 ssl 证书的身份验证的 m2e的主要内容,如果未能解决你的问题,请参考以下文章

SSL证书是什么

ssl证书的作用是什么

OpenSSL 客户端基于证书的身份验证失败

SSL 和 Kerberos 身份验证之间的区别?

基于 Azure AD 证书的身份验证:如何在 Node JS 中指定证书路径?

相互 SSL - 多少身份验证就足够了?