如何使用PEM文件在Java中创建SSL套接字?

时间:2009-04-06 21:46:05

标签: java ssl certificate pem jks

See related question.

我有一个PEM文件提供给我,并被告知需要建立一个连接到c ++服务器以进行某些API调用的SSL套接字。有谁知道如何在PEM文件中读取并连接?我也被给了parapharse密码。

2 个答案:

答案 0 :(得分:10)

听起来PEM文件是您用来登录服务器的客户端证书。如果它是客户端证书,并且听起来像是这样,那么您可能还需要一个ca证书文件来用于验证服务器证书以建立连接。

CA证书需要进入信任库,您的客户端证书需要进入密钥库。在Java中,这两者都是JKS(尽管它对PKCS12的支持有限。)JRE和每个用户都有默认的密钥库/信任库位置。您还可以在代码中为这些文件指定外部位置,如下面的示例所示。 commons-ssl库似乎能够直接支持PEM,而不需要JKS,但我还没有使用它。

Java中这些密钥库的默认密码短语是“changeit”,没有引号。

This page表示您必须将PEM读入您的密钥库/信任库。这是another example

正确设置信任库和密钥库后,需要将以下JSSE system properties传递给JVM:

javax.net.ssl.keyStore
javax.net.ssl.keyStoreType
javax.net.ssl.keyStorePassword
javax.net.ssl.trustStore
javax.net.ssl.trustStoreType
javax.net.ssl.trustStorePassword

您可以将它们指定为JRE的-D参数,或者如下面的示例中那样以编程方式指定。

完成后,继续创建套接字commons-ssl example。另外,还有SSLSocket的Java api。还有一个example,它不使用任何apache公共。

答案 1 :(得分:0)

您需要一个处理SSL的库。正如John Ellinwood所指出的,一些框架(例如Java 2 SE)提供了这些内置功能,对于其他框架,您需要使用第三方库。

C开发人员经常直接使用openssl,但不能说它很容易,而且当使用C ++时,有几个很容易陷入其中的“问题”。

我建议您使用支持SSL的C ++网络库,例如QT的网络库或Poco NetSSL。有关API文档的一些教程文档here,请参阅and here - 您可能需要查看直接获取PEM文件的initializeClient