【问题标题】:openssl/keytool error: java.lang.Exception: Input not an X.509 certificateopenssl/keytool 错误:java.lang.Exception:输入不是 X.509 证书
【发布时间】:2023-03-21 03:32:01
【问题描述】:

我已经通过 Openssl 创建了证书

Openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

然后使用 OpenSSL 创建了一个 PKCS#12 文件:

openssl pkcs12 -export -in tls.crt -inkey tls.key -out tls.p12

然后使用

将其转换为 JKS
keytool -importkeystore -srckeystore tls.p12  -srcstoretype PKCS12  -destkeystore tls.jks  -deststoretype JKS

现在当像这样通过 keytool 导入这个 jks 文件时

keytool -import -noprompt -trustcacerts -alias "nginxsvc" -file tls.jks -keystore "C:\Program Files\Java\jdk1.8.0_152\jre\lib\security\cacerts"

我来了

keytool 错误:java.lang.Exception:输入不是 X.509 证书

【问题讨论】:

    标签: java ssl https keytool


    【解决方案1】:

    -import 需要证书文件,而不是 JKS。 试试看:

    keytool -import -noprompt -trustcacerts -alias "nginxsvc" -file tls.crt -keystore "C:\Program Files\Java\jdk1.8.0_152\jre\lib\security\cacerts"
    

    【讨论】:

    • 如果我将导入 openssl 生成像这样的证书keytool -import -file C:\Code_Base\Certificates\NGINX_150\tls.crt -storepass changeit -keystore "C:\Program Files\Java\jdk1.8.0_152\jre\lib\security\cacerts" 那么我不需要转换证书。这种方法也可以吗
    • 我做了你提到的事情,但我得到了 16:30:21,046 错误 [org.keycloak.adapters.OAuthRequestAuthenticator] (http-/0.0.0.0:8080-1) 未能将代码转换为令牌: javax.net.ssl.SSLException: 证书中的主机名不匹配: !=
    • 可以,可以直接导入证书。
    • 应为 FQDN(例如:xxx.yyy.com)生成证书,并且您应请求此 FQDN (xxx.yyy.com)。如果需要,您可以使用短名称,例如 nginxsvc,但您必须请求它而不是其 IP 地址。
    猜你喜欢
    • 2014-11-16
    • 2013-01-31
    • 1970-01-01
    • 2014-08-16
    • 2020-12-31
    • 2011-07-09
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多