从私钥和证书文件创建SSLContext

9

我有两个文件:

  • mycer.cer
  • mykey.key

我需要使用Java创建一个SslContext对象,以便通过SSL连接到另一台服务器。 我正在试图找出如何直接从这些文件创建SslContext对象。

这篇文章可能会有重复,但我尝试找到一个清晰的解释和一个创建SslContext对象的示例,但没有找到清晰的内容。


你可能正在寻找这个吗?http://stackoverflow.com/questions/32433832/configuring-sslcontext-using-existing-ssl-key-certificate-pair-in-java-jsse-api?answertab=active#tab-top - marpme
@Kyon 提出的答案是有效的。如果要将 CER/KEY 转换为 JKS(Java KeyStore),我可以推荐使用 Portecle——一个独立的 GUI 工具:http://portecle.sourceforge.net/ 它可以导入基本上所有格式的证书。 - Philip Helger
这些文件的内容是什么?它们是哪种格式和编码方式? - Gustave
我假设mycer.cer应该包含您自己的证书,而mykey.key则是相应的私钥。默认情况下,Java使用“JKS”(Java密钥库格式)。如果您想坚持使用它,您可能需要相应地转换您的材料。有很多(部分未经适当指定的)文件格式。 - Gustave
2个回答

2

这个问题已经在这里得到了回答:在Java中,使用PEM文件创建SSLContext的最简单方法是什么?

我为此创建了一个库,以简化配置。它在底层使用了Bouncy Castle。请参阅以下用法:

X509ExtendedKeyManager keyManager = PemUtils.loadIdentityMaterial("certificate-chain.cer", "mykey.key");
X509ExtendedTrustManager trustManager = PemUtils.loadTrustMaterial("mycer.cer");

SSLFactory sslFactory = SSLFactory.builder()
          .withIdentityMaterial(keyManager)
          .withTrustMaterial(trustManager)
          .build();

SSLContext sslContext = sslFactory.getSslContext();

要使用上述设置,您可以使用这个库:
<dependency>
    <groupId>io.github.hakky54</groupId>
    <artifactId>sslcontext-kickstart-for-pem</artifactId>
    <version>8.0.0</version>
</dependency>

1

获取一个p12格式的证书,据我所知,你不能使用cert文件,有一些工具可以做到这一点(比如openssl),或者你生成并下载证书的源头可以给你一个p12格式。

openssl pkcs12 -export -in mycer.crt -inkey mykey.key -out mycer.p12 -name "mycer"

请检查下面的网址,它应该包含您想要的信息。

Java HTTPS客户端证书身份验证

希望这有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接