Spring 工具套件 - SunCertPathBuilderException:无法找到请求目标的有效证书路径

Spring tool suite- SunCertPathBuilderException: unable to find valid certification path to requested target

我正在研究 STS,在创建新的 spring-boot 项目时,它显示以下错误:

 SunCertPathBuilderException: unable to find valid certification path to requested target

因为它访问 https://start.spring.io 作为服务 URL。

我在公司网络工作,他们有自己的证书和安全规则。我查看了网络,但找不到任何明确的 STS 解决方案。对于给定 URL,我应该如何在 STS 中添加证书路径。 感谢任何帮助。

最简单的解决方案是将公司证书安装到 JDK 的 cacerts 密钥库中。

<JAVA_HOME>/bin/keytool -import -alias CorpProxy -keystore <JAVA_HOME>/jre/lib/security/cacerts -file your_corp_cert.crt

系统将提示您输入默认为 changeit 的密钥库密码。

在 URL 中尝试 http 而不是 https http://start.spring.io

以下错误将得到解决 “SunCertPathBuilderException:无法找到请求目标的有效证书路径

我遇到了同样的问题并尝试了这个:Window -> 首选项 -> 网络连接将模式更改为手动

现在可以正常使用了。

如果 none 以上工作正常,请尝试以下步骤。它对我来说很好,因为我也在公司网络下工作,有同样的问题。

  1. 如果打开,请关闭 STS 工具。
  2. 找到 STS.ini 文件(主要是您安装了 STS 工具并具有 STS.exe)
  3. 编辑 STS.ini。在底部添加以下两行(使用您的 JDK 位置,下面一行只是示例)

    -Djavax.net.ssl.trustStore=C:\Program Files\Java\jdk1.8.0_20\jre\lib\security\cacerts

    -Djava.net.ssl.trustStorePassword=改变

  4. 保存 STS.ini 并重新启动 STS.exe。

它适用于我的情况。谢谢你。

在下面添加到 eclipse.ini

-Djavax.net.ssl.trustStore=C:\Program Files\Java\jdk1.8.0_20\jre\lib\security\cacerts
-Djava.net.ssl.trustStorePassword=changeit

对我有用。

似乎 http 现在被重定向到 https。所以将 https 更改为 http 可能不起作用。我几乎不熟悉数字证书。但是,我只是简单地列出了我必须做的事情才能让它为我工作。这也许是@Strelok 的建议。

我在 Windows 10 和 JDK 1.8.0_144 64 位。我也支持公司代理。我做了以下让它为我工作。如果您处于类似情况,它可能对您有用。

导出公司证书(可能还有其他更简单的方法)

  1. Chrome,我去了https://start.spring.io
  2. 在地址栏上单击 https 旁边的 'Lock' 符号。
  3. 在随后的弹出窗口中选择 'Certificate(Valid)'。
  4. 在出现的对话框中,单击 'Certificate Path' 选项卡,从证书路径树下 选择根节点 ,然后单击 'View Certificate'
  5. 在出现的对话框中,单击 'Details' 选项卡,然后单击 'Copy to File'
  6. 这会调出 'Export wizard',点击 'Next'。
  7. 将证书格式保留为默认 'DER encoded..',单击 'Next'。
  8. 为证书提供的文件名(.cer 扩展名)。
  9. 点击完成。

上述步骤将证书导出到我导入到信任库 (cacerts) 的文件。

导入

  • 以管理员身份打开 'Command' 提示以导入证书
  • 进入Java安装的bin目录(如果jre/bin在你的路径中则不需要这一步)
  • 运行以下:

    C:\Program Files\Java\jre1.8.0_144\bin>keytool -importcert -alias your-alias -keystore "C:\Program Files\Java\jre1.8.0_144\lib\security\cacerts" -storepass changeit -file C:\certificate-file-location\saved-certificate-file .cer

(根据需要替换您的 java 位置、证书文件位置和证书文件名。'storepass' 应为 'changeit'。)

已重新启动 STS

在这种情况下,最好的办法是在浏览器中打开 https://start.spring.io/,然后

并在 Artifact 字段中填写您的项目名称,在 Group 字段中填写您的项目基础包 点击

生成项目按钮

这会将您的项目-name.zip 文件下载到您的下载文件夹中。现在将此文件解压缩到您的 sts 工作区或任何您喜欢的地方。

现在将 STS 中的项目导入为现有的 maven 项目

你完成了

我通过两个步骤解决了这个问题。

  1. 首先,我将 https://start.spring.io 上的证书导入 jdk cacerts。
  2. 最后我在 SpringToolSuite4.ini 文件中添加了 TrustStore 的路径和 trustStore 密码。

    -Djavax.net.ssl.trustStore=C:\Program Files\Java\jdk1.8.0_201\jre\lib\security\cacerts

    -Djava.net.ssl.trustStorePassword=改变

这个问题发生在我的一位同事身上,他无法在他的浏览器上打开 https://start.spring.io,也无法在 STS 上创建新项目。我们尝试使用上述所有解决方案,但 none 有效。

我们尝试的最后一招是通过以下方式清除您日常使用的浏览器的浏览器设置:

  1. Ctrl + Shift + Del
  2. 清除/删除所有设置,主要是 Cookie 和其他站点数据以及缓存图像和文件 (浏览历史和密码可以免除)
  3. 重新打开浏览器。 [关闭并打开浏览器]
  4. 转到 https://start.spring.io & 您将能够打开 Spring 初始化程序站点以及从 STS 创建一个新的 Spring Starter 项目。 (不知道是不是IntelliJ的问题,但是你可以按照所有步骤试一试)

我通过将 SSL 证书导入 CACERTS 文件解决了这个问题。

但是应该注意,Eclipse/STS 默认使用它自己的 JRE(在它的插件文件夹中),例如 ::

(STS--RELEASE)\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_16.0.2.v20210721-1149\jre\lib\security\cacerts

在公司网络中,您可能没有导入到 cacerts 文件的管理员权限。以下步骤有助于在没有管理员权限的情况下在公司网络中使用 STS

  1. 了解您的 %userprofile% 目录

    • 开始 -> 运行
    • 输入%userprofile%并回车
    • 这将打开一个您可能具有写入权限的文件夹。注意路径
  2. 导出企业代理证书

    • 在 Chrome 上,转到 https://start.spring.io
    • 在地址栏上单击 https 旁边的 'Lock' 符号。
    • Select 'Certificate(Valid)' 上pop-up.
    • 在出现的对话框中,单击证书路径树 select 根节点下的 'Certificate Path' 选项卡,然后单击 'View Certificate'
    • 在出现的对话框中,单击 'Details' 选项卡,然后单击 'Copy to File'
    • 这会调出 'Export wizard',点击 'Next'。
    • 将证书格式保留为默认 'DER encoded..',单击 'Next'。
    • 提供 CorpRootCA.cer 作为证书的文件名并保存在 %userprofile%/cacerts 文件夹中。您可能需要在 %userprofile%
    • 中创建 cacerts 文件夹
    • 点击完成
  3. 识别STS使用的JRE路径

    • 打开STS
    • 单击 Window -> 首选项
    • 单击 Java -> 安装的 JRE
    • 复制STS使用的位置
  4. 复制 cacerts 文件

    • 从资源管理器中已安装的 JRE 转到 jre 位置
    • 转到 lib/security 并复制 cacerts 文件
    • 转到 %userprofile%/cacerts 并将其粘贴到 director
  5. 正在使用密钥工具添加企业代理证书

    • 从资源管理器中已安装的 JRE 转到 jre 位置
    • 在 url 栏中键入 cmd 以在该位置打开命令提示符
    • ./bin/keytool -import -alias CorpProxy -keystore %userprofile%/cacerts/cacerts -file %userprofile%/cacerts/CorpRootCA.cer -storepass changeit

    'storepass' 应该是 'changeit' 这是默认密码。如果更改,请使用正确的 storepass

  6. 使 STS 指向新的证书库

    • 打开包含 SpringToolSuite 可执行文件的文件夹
    • 将有一个与可执行文件相同的配置文件。在我的例子中是 SpringToolSuite4.ini。打开文件
    • 更改 %userprofile 以匹配用户目录后添加以下行。根据需要更新 trustStorePasswordchangeit为默认值
-Djavax.net.ssl.trustStore=%userprofile%\cacerts\cacerts
-Djava.net.ssl.trustStorePassword=changeit
  1. 重新启动 STS,它应该不会再抛出

SunCertPathBuilderException: unable to find valid certification path to requested target