代码之家  ›  专栏  ›  技术社区  ›  smeeb

Java keytool不喜欢OpenSSL CSR

  •  0
  • smeeb  · 技术社区  · 7 年前

    我试图使用OpenSSL创建一个自签名SSL证书,然后将该证书添加到JKS文件(Java密钥库),这样我就可以使用基于Jetty的web服务通过HTTPS向HTTP客户端提供该自签名证书。

    我创建了OpenSSL自签名证书:

    openssl req -x509 -newkey rsa:4096 -keyout mykey-dev.pem -out mycsr-dev.pem -days 3650
    

    然后我创建了JKS:

    keytool -alias myorg -keyalg RSA -keystore myapp.jks -keysize 2048
    

    相信 我现在需要导入CSR( mycsr-dev.pem )进入JKS:

    keytool -importcert -trustcacerts -file mycsr-dev.pem -alias myorg -keystore myapp.jks
    

    这会产生以下错误:

    keytool error: java.lang.Exception: Public keys in reply and keystore don't match
    

    知道问题出在哪里吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   President James K. Polk    7 年前

    出现问题的原因是 keytool genkey -alias myorg ... 创建密钥对和 openssl req 命令还创建一个不相关的密钥对。正在尝试从导入证书 openssl请求 命令输入JKS密钥库 myorg 因此,alias会导致两个不同公钥之间发生冲突。如果要将受信任证书导入密钥库,则只需在所需别名下进行导入,无需使用提前创建别名 keytool genkey ... .

        2
  •  1
  •   Shen Yudong    7 年前

    openssl创建PEM格式文件,而keytool将创建jks格式文件。

    以下是如何将证书从pem转换为jks:

    cat cert\u public\u密钥。pem cert\u private\u密钥。pem | openssl pkcs12-导出证书p12

    keytool-importkeystore-srckeystore cert.p12-srcstoretype pkcs12-destkeystore cert.jks