如何将 SSL 证书 .pem 文件导入 Mac 上的 JRE cacerts 文件?

How do I import SSL certifcate .pem file into JRE cacerts file on Mac?

我曾尝试使用 keytool -importcert -alias (my cert alias) -file (cert file path.pem) -keystore (jre keystore path),但我收到一条错误消息,提示我的 .pem 文件不是 x509 证书。我认为这是因为我的 .pem 文件格式不正确或者因为它同时包含私钥和证书。有什么建议么?我的 .pem 文件如下所示:

Bag Attributes
    Microsoft Local Key set: <No Values>
    localKeyID: 
    friendlyName: 
    Microsoft CSP Name: 
    X509v3 Key Usage: 10 
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG...
-----END PRIVATE KEY-----
Bag Attributes
   ...
-----BEGIN CERTIFICATE-----
MIIHQzCCBiugAwIBAgIQDEtIx...
-----END CERTIFICATE-----

查看 this page on the PEM file format 由于您的文件包含对 Microsoft 的引用,我建议确保文件使用 Unix 行结尾 (\n) 而不是 Windows 行结尾 (\r\n)

不幸的是,我无法将证书导入到我的 cacerts 文件中,但是我能够配置我的 CloseableHttpClient,以便它使用没有 "valid" 证书的 HTTPS URLS。我只是在实现我的客户端时使用了以下代码:

SSLContext sslContext = new SSLContextBuilder()
    .loadTrustMaterial(null, ((certificate, authType) -> true)).build();
CloseableHttpClient client = HttpClients.custom().setSSLContext(sslContext)
    .setSSLHostnameVerifier(new NoopHostnameVerifier()).build();

我知道这不是处理这种情况的正确方法,但我不关心在这个特定实例中验证来自与我通信的服务器的证书。

我终于能够将证书导入到我的 JRE cacerts 文件中。首先,我必须创建一个只有证书的新 .pem 文件:

-----BEGIN CERTIFICATE-----
MIIHQzCCBiugAwIBAgIQDEtIx...
-----END CERTIFICATE-----

然后我不得不将 cacerts 文件复制到一个新位置,然后 运行 下面的代码将其导入:

keytool -import -v -trustcacerts -alias serveralias -file /Applications/certificate.pem -keystore /cacerts

导入证书后,我将新的 cacerts 文件复制回 JRE 安全文件夹,成功了!