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

2022-08-31 05:17:15

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

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

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

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

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

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


答案 1
  • 如果要进行身份验证,则需要私钥 - 没有其他选择。
  • 证书是具有额外属性(如公司名称、国家/地区,...)的公钥,由某些证书颁发机构签名,保证附加的属性为真。
  • .CER文件是证书,没有私钥。私钥通常随文件一起提供。如果您确实进行身份验证是因为您已经导入了私钥。.PFX keystore
  • 您通常可以导入证书,而不会出现任何问题.CER

    keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias" 
    

答案 2

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

  1. 转到您的java_home\jre\lib\security
  2. (视窗)使用和打开管理员命令行cmdCTRL+SHIFT+ENTER
  3. 运行密钥工具导入证书:
    • (分别替换 和)yourAliasNamepath\to\certificate.cer

 ..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file path\to\certificate.cer

这样,您就不必指定任何其他 JVM 选项,并且证书应由 JRE 识别。


推荐