Java Keytool-使用现有私钥生成X.509格式的公钥

Java Keytool-使用现有私钥生成X.509格式的公钥,java,rsa,saml,keytool,Java,Rsa,Saml,Keytool,我正在尝试生成一个X.509格式的私钥/公钥对以及一个我需要用于SAML应用程序的自签名证书 以下是我所做的: 从生成自签名证书和私钥并保存 它们是.pem格式的 使用私钥并生成公钥 使用命令openssl rsa-in-key.pem-pubout-out-pubkey.pem 当我将这些密钥提供给SAML应用程序时,它在步骤2生成的公钥上出错,并显示以下消息: java.io.IOException:短读顺序长度 我做错了什么 问题: 我正在尝试生成X.509格式的私钥/公钥对以及我需要用于

我正在尝试生成一个
X.509
格式的私钥/公钥对以及一个我需要用于SAML应用程序的自签名证书

以下是我所做的:

  • 从生成自签名证书和私钥并保存 它们是
    .pem
    格式的
  • 使用私钥并生成公钥 使用命令
    openssl rsa-in-key.pem-pubout-out-pubkey.pem
  • 当我将这些密钥提供给SAML应用程序时,它在步骤2生成的公钥上出错,并显示以下消息:

    java.io.IOException:短读顺序长度


    我做错了什么

    问题

    我正在尝试生成X.509格式的私钥/公钥对以及我需要用于SAML应用程序的自签名证书

    回答

    (1) 在Ubuntu 16.04上,我运行以下原生openssl命令,为Shibboleth SAML SP应用程序成功生成X.509格式的私钥/公钥对

    openssl genrsa -out key.pem 2048 -days 365
    openssl req -new -key key.pem -out certreq.csr
    openssl x509 -req -in certreq.csr -signkey key.pem -out cert.pem
    
    (2) 我将生成的Shibboleth SAML SP应用程序的公共证书/密钥(即cert.pem)上载到Shibboleth SAML IdP

    (3) 通过Shibboleth SAML IdP和OpenLDAP提供的身份验证,我成功登录到Shibboleth SAML SP应用程序

    备注


    (一) 请确保IdP或SP数据库为用于存储公共证书/密钥或私钥的类型定义了足够的长度,例如varchar(2500)


    (二) 如果您在Windows环境下运行openssl命令,请检查我对另一个StackOverflow问题的回答,以从私钥和公钥的末尾删除“过早EOF”

    (三) 在GitHub repository中,提供有关如何构建和运行Shibboleth SAML IdP和SAML SP测试床以测试SAML SP应用程序的说明


    独立的Shibboleth SAML IdP测试床允许您检查日志以调试证书颁发。

    您只需通过keytool或openssl生成密钥对,而不需要SAML工具。公钥附在证书中,它或多或少是由颁发方的私钥签署的公钥。谢谢提示,使用上面的命令,我生成了密钥/cert,这一次它在私钥中显示错误:
    java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:Detect premature EOF
    。不过,这一次,公钥可以正常工作。如果您在Windows环境下运行openssl命令,请检查我的回答,了解另一个StackOverflow问题,以删除“过早EOF”请确保IdP或SP数据库为用于存储公钥/密钥或私钥的类型定义了足够的长度,例如varchar(2500)。我已经更新了我的答案,包括两个可能的“早熟EOF”解决方案。我已经更新了openssl命令,以解决新问题“这一次它在私钥中出现错误,说:java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:Detect premature EOF”。新的openssl命令删除密码短语,这样SAML SP就不需要配置密码短语来解密私钥。