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

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

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

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

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

附加信息:支持Web服务的公司告诉我,应该向PC和稍后导入证书的用户请求证书(使用IE和网站).

推荐答案

  • 如果你想进行身份验证,你需要私钥——没有其他 Select .
  • 证书是具有额外属性(如公司名称、国家/地区等)的公钥.这是由保证附加属性为真的某个证书颁发机构签署的.
  • .CER个文件是证书,没有私钥.私钥通常与.PFX keystore文件一起提供.
  • 您通常可以导入.CER个证书,而不会出现任何问题

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

Java相关问答推荐

强制Mockito返回null而不是emtpy list

同时运行JUnit测试和Selenium/Cucumber测试时出现问题

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

Java中后期绑定的替代概念

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

为什么使用JDK21获取锁定锁比使用JDK11慢

如何修复PDF重建过程中的文本定位

try 判断可选参数是否为空时出现空类型安全警告

GetChildren().emoveAll()不会删除 node

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

如何在构建Gradle项目时排除com.google.guava依赖项的一个变体

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

为什么Collectors.toList()不能保证易变性

Java中HashSet的搜索时间与TreeSet的搜索时间

如何处理两个几乎相同的XSD文件?

如何在ApacheHttpClient 5中为单个请求设置代理?

如果c不为null,Arrays.sort(T[]a,Comparator<;?super T>;c)是否会引发ClassCastException?

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API

JAVA 正则表达式识别字符串string或字符串内的字符char