【问题标题】:How to install X509 certificate chain without the private key如何在没有私钥的情况下安装 X509 证书链
【发布时间】:2023-03-23 02:00:01
【问题描述】:

我的客户给了我三个证书:

DigiCert Global Root CA.cer - (Root certificate) GeoTrust RSA CA 2018.cer - (Intermediate certificate) krapiuat_sharekhan_com.cer - (SSL certificate for my domain)

我应该在我的 Spring Boot 服务器上安装所有三个证书以启用 SSL。

我在我的 Spring 应用程序中将它与嵌入式 Tomcat 服务器一起使用,并且由于错误而无法启动启用 SSL 的服务。

我的尝试如下:

尝试 1

我尝试将所有三个 .cer 文件合并为一个文件并将其添加到密钥库中

`cat krapiuat_sharekhan_com.cer  GeoTrust\ RSA\ CA\ 2018.cer  DigiCert\ Global\ Root\ CA.cer> combined_cert.cer

keytool -importcert -keystore krKeyStore.jks -file combined_cert.cer -alias krRiskRatingUAT -trustcacerts`

注意:最终的 jks 文件仅显示一个条目为trustedCertEntry

然后我在我的 Spring 应用程序的 /resource 文件夹中添加了文件 krKeyStore.jks 并在我的 application.properties 文件中添加了以下行:

`server.port=8443
server.ssl.key-store-type=JKS
server.ssl.key-store=classpath:krKeyStore.jks
server.ssl.key-store-password=mypassword
server.ssl.key-alias=krRiskRatingUAT`

服务启动失败,出现异常 java.io.IOException: jsse.alias_no_key_entry


尝试 2

我尝试将这三个证书分别添加到我的密钥库中

`keytool -import -trustcacerts -alias root -file DigiCert\ Global\ Root\ CA.cer -keystore krKeyStore20.jks
keytool -import -trustcacerts -alias intermediate -file GeoTrust\ RSA\ CA\ 2018.cer -keystore krKeyStore20.jks
keytool -import -trustcacerts -alias krRiskRatingUAT20 -file krapiuat_sharekhan_com.cer -keystore krKeyStore20.jks`

注意:最终的 jks 文件现在将三个条目都显示为trustedCertEntry

然后我在我的 Spring 应用程序的 /resource 文件夹中添加了文件 krKeyStore20.jks 并在我的 application.properties 文件中添加了以下行:

`server.port=8443
server.ssl.key-store-type=JKS
server.ssl.key-store=classpath:krKeyStore20.jks
server.ssl.key-store-password=mypassword
server.ssl.key-alias=krRiskRatingUAT20`

但错误仍然存​​在 - java.io.IOException: jsse.alias_no_key_entry

是否总是必须拥有密钥?我的客户还没有准备好给我私钥,并希望我在没有密钥的情况下安装证书。任何帮助将不胜感激。

【问题讨论】:

    标签: spring spring-boot ssl ssl-certificate x509


    【解决方案1】:

    如果没有服务器证书的私钥,您根本无法创建 SSL 服务器。需要私钥向客户端证明您是证书的所有者,否则任何可以访问证书的人(即连接到服务器的每个客户端)都可以声称是证书的所有者,即每个人都可以声称是 google.com 或类似网站。

    【讨论】:

    • 谢谢!!感谢您对我的启发。我是否正在执行正确添加证书链的其余步骤?那么,异常的原因仅仅是缺少密钥,对吧?
    • @AneriSheth:错误消息清楚地表明问题是缺少密钥。如果其他一切都是正确的,我不知道,但这也不是原始问题的一部分。只要你没有钥匙,这并不重要。
    • 如果没有服务器证书的私钥,您根本无法创建 SSL 服务器。 是的,您可以。但是您必须使用匿名密码套件,该套件无法防止中间人攻击。在这种情况下根本不使用任何证书。见the OpenSSL Diffie-Hellman wiki:“Anonymous Diffie-Hellman 使用 Diffie-Hellman,但没有身份验证。由于交换中使用的密钥未经身份验证,该协议容易受到中间人攻击...”
    • (cont) 如果您使用的是 OpenSSL,那么您可能必须编译自己的 OpenSSL 实现才能使用这样的密码套件,因为我很确定匿名密码套件不仅默认情况下未启用,它们甚至未编译,因此未在“正常”OpenSSL 安装中实现。
    • @AndrewHenle:我认为应该很清楚 OP 想要使用证书的问题。如果您想使用证书(如果您想在浏览器中与 HTTPS 交互,则需要该证书),那么您还需要该证书的私钥。如果您不使用证书(您可以使用匿名 DH、PSK、SRP ...),那么您当然也不需要用于不存在的证书的私钥。
    猜你喜欢
    • 2016-10-10
    • 2017-05-01
    • 2019-12-06
    • 2017-03-20
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多