如何将 .cer 证书导入 Java 密钥库?

新手上路,请多包涵

在开发 Java Web 服务客户端的过程中,我遇到了一个问题。 Web 服务的身份验证使用客户端证书、用户名和密码。我从 web 服务背后的公司收到的客户端证书是 .cer 格式。当我使用文本编辑器检查文件时,它包含以下内容:

 -----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----

我可以在 Internet Explorer 中将此文件作为证书导入(无需输入密码!)并使用它来对 Web 服务进行身份验证。

通过首先剥离第一行和最后一行,转换为 unix 换行符并运行 base64 解码,我能够将此证书导入密钥库。生成的文件可以导入密钥库(使用 keytool 命令)。当我列出密钥库中的条目时,此条目的类型为 trustedCertEntry 。由于此条目类型(?),我无法使用此证书对 Web 服务进行身份验证。我开始认为提供的证书是用于身份验证的公共证书…

我发现的解决方法是在 IE 中导入证书并将其导出为 .pfx 文件。该文件可以作为密钥库加载,并可用于通过 Web 服务进行身份验证。但是,我不能期望我的客户每次收到新证书时都执行这些步骤。所以我想将 .cer 文件直接加载到 Java 中。有什么想法吗?

附加信息:网络服务背后的公司告诉我,应该从稍后导入证书的 PC 和用户那里请求证书(使用 IE 和网站)。

原文由 Jan-Pieter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 970
2 个回答
  • 如果您想进行身份验证,则需要私钥 - 没有其他选择。
  • 证书是具有额外属性(如公司名称、国家/地区等)的公钥,由某些证书颁发机构签署,保证附加属性是真实的。
  • .CER 文件是证书,没有私钥。私钥通常随 .PFX keystore 文件一起提供。如果你真的认证是因为你已经导入了私钥。
  • 您通常可以导入 .CER 证书没有任何问题
  keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias"

原文由 lujop 发布,翻译遵循 CC BY-SA 4.0 许可协议

导入 .cer 从浏览器下载的证书文件(打开 url 并挖掘详细信息)到 java_home\jre\lib\security 中的 cacerts 密钥库 --- 对我有用,而不是尝试生成和使用我自己的密钥库。

  1. 转到你的 java_home\jre\lib\security
  2. ( Windows ) 使用 cmdCTRL + SHIFT + ENTER 打开管理命令行
  3. 运行 keytool 导入证书:
    • (分别替换 yourAliasNamepath\to\certificate.cer
  ..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file path\to\certificate.cer

这样您就不必指定任何额外的 JVM 选项,并且证书应该被 JRE 识别。

原文由 jediz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题