如何将 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 安全文件夹,成功了!
我曾尝试使用 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 安全文件夹,成功了!