首页 文章

使用关键工具制作CSR,如何为tomcat ssl制作证书?

提问于
浏览
0

我的目标是使用keytool创建证书签名请求(CSR),然后获取该CSR并将实际证书添加到密钥库,添加它,以便SSL(HTTPS // my.site.com)可以工作 . 这是出于测试目的 .

到目前为止,我已经完成了以下步骤:

  • 为我的CSR生成密钥库:

keytool -genkey -dname“CN = test.com,OU = TEST,O = Test,L = TestCity,ST = Florida,C = US”-alias tomcat -keyalg RSA -keysize 2048 -keystore test.keystore -storepass changeit

  • 生成CSR:

keytool -certreq -alias tomcat -file request.csr -keystore test.keystore -storepass changeit

  • 生成用于openSSL的服务器密钥以创建签名证书 . 这需要一个密码“changeit”,然后转换为删除server.key的密码:

openssl genrsa -des3 -out server.key 2048

cp server.key server.key.org

openssl rsa -in server.key.org -out server.key

  • 使用CSR生成我签名的证书:

openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt

  • 最后,将证书导入我的密钥库 .

keytool -import -trustcacerts -file server.crt -keystore test.keystore -alias tomcat -storepass changeit

结果是以下错误:

keytool error:java.lang.Exception:回复和密钥库中的公钥不匹配

3 回答

  • 0

    我不确定以下是否正确,但似乎有效 . 从各种网站拼凑一些步骤,执行这些命令生成一个密钥库,通过tomcat为SSL连接工作 . 它做了一些部分,让我测试我的系统的每一部分 .

    • 生成密钥库

    keytool -genkey -dname“CN = test.com,OU = TEST,O = Test,L = TestCity,ST = Florida,C = US”-alias tomcat -keyalg RSA -keysize 2048 -keystore test.keystore -storepass changeit

    • 生成CSR

    keytool -certreq -alias tomcat -file request.csr -keystore test.keystore -storepass changeit

    • 从我的密钥库导出私钥以用于创建签名证书

    keytool -v -importkeystore -srckeystore test.keystore -ssccalias tomcat -destkeystore myp12file.p12 -deststoretype PKCS12 openssl pkcs12 -in myp12file.p12 -out server.key

    • 从CSR创建签名证书

    openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt

    • 最后将其导入密钥库,但成功

    keytool -import -trustcacerts -file server.crt -keystore test.keystore -alias tomcat -storepass changeit

  • 0

    keytool -genkey -dname“CN = test.com,OU = TEST,O = Test,L = TestCity,ST = Florida,C = US”-alias tomcat

    这不仅仅生成一个密钥对,它还会生成一个带有此DN的自签名证书,然后将其用作生成带有 -certreq 的CSR的基础(它可能听起来很奇怪,但是自签名证书和PKCS# 10 CSR实际上非常相似:CSR或多或少是一个没有有效时间戳的自签名证书 .

    这是在documentation

    -genkeypair [...]生成密钥对(公钥和关联的私钥) . 将公钥包装到X.509 v3自签名证书中,该证书存储为单元素证书链 . 此证书链和私钥存储在由别名标识的新密钥库条目中 . [...]此命令在早期版本中被命名为-genkey .

    将CSR提交给CA时通常会将CA颁发的证书重新导入相同的别名(私钥所在的位置),从而覆盖该临时自签名证书 .

    您可以跳过 keytool -certreqopenssl 的步骤:只需使用 keytool 导出证书,并在必要时将其重新导入单独的信任库以与Java客户端一起使用 .


    如果要模拟CA, openssl x509 不是您应该使用的命令:

    openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt

    正如documentation for openssl x509 -signkey所述:

    -signkey filename此选项使输入文件使用提供的私钥进行自签名 . 如果输入文件是证书,则将发行者名称设置为主题名称(即使其自签名)将公钥更改为提供的值并更改开始日期和结束日期 . 开始日期设置为当前时间,结束日期设置为-days选项确定的值 . 除非提供了-clrext选项,否则将保留任何证书扩展名 . 如果输入是证书请求,则自签名使用提供的私钥使用请求中的主题名称创建证书 .

    因此,基本上,公钥材料也来自此私钥 . 因此,它与您提供的CSR中的公钥不匹配 . 在这种情况下,CSR仅用于提供证书身份信息和属性 .

    实际上,将CSR转变为证书可以有许多参数 . 虽然 keytool 从您提供的参数生成合理的默认自签名证书,但OpenSSL通常需要更多配置 . 对于你想要做的事情,openssl ca肯定会更相关,虽然我建议使用CA.pl包装器以方便(它会跟踪你发出的证书,序列号等) .

    由于这似乎主要用于测试,可能偶尔进行测试,您可能还会发现其他工具如xca更方便执行该步骤 .

  • 0

    以下过程描述了创建与JBoss 5.0应用程序服务器完美配合的JKS密钥库 . Tomcat可能使用相同类型的密钥库 .

    创建私钥和证书签名请求

    您可以在openssl实用程序的帮助下在Linux OS中创建私钥 .

    将umask设置为077,以便创建的文件只能由当前用户读取:

    $ OLD_UMASK =umask(umask在反引号字符内)
    $ umask 077

    创建一个长度为2048位的私钥并将其存储在文件_1407510中:

    $ openssl genrsa 2048> private_key.pem

    恢复文件创建掩码:

    $ umask $ OLD_MASK

    您可以使用以下命令创建证书签名请求(CSR):

    $ openssl req -new -key private_key.pem -nodes

    接下来,您将不得不回答各种问题 . 请特别注意必须与服务器的完全限定域名匹配的Common Name字段 . 该命令生成包含CSR的以下文本:

    -----开始证书申请----- MIIBZYnPGQZK06tI6EKLGp7qmaFAIAe ...... .... -----结束证书申请-----

    生成链证书

    该过程假定您在文件 private_key.pem 中有(a)私钥,(b)您从文件 certificate.pem 中的证书颁发机构(CA)收到的数字证书,以及(c)证明文件中的CA的链证书 ca_chain_cert.pem .

    如果您的CA通过最终由根CA CA_ROOT(CA - > CA1 - > CA_ROOT)认证的另一个机构CA1认证,并且各个文件分别在单个文件 ca_cert.pemca1_cert.pemca_root.pem 中可用,则可以创建 ca_chain_cert.pem 通过命令:

    $ cat ca_cert.pem ca1_cert.pem ca_root.pem> ca_chain_cert.pem

    通过将 certificate.pemca_chain_cert.pem 组合生成链证书:

    $ cat certificate.pem ca_chain_cert.pem> chain.pem

    这个概念是您必须拥有一个包含订单所有证书的文件:

    • 主机证书

    • CA证书

    • CA1证书

    • 根CA证书

    生成JKS密钥库

    此步骤假定文件 chain.pem 包含证书链, private_key.pem 私钥和 certificate.pem 您从CA(链的第一部分)收到的服务器证书 .

    使用以下命令从证书链和私钥创建文件 keystore.p12 中的PKCS12密钥库:

    $ openssl pkcs12 -export -name server_cert -in chain.pem -inkey private_key.pem -certfile certificate.pem -out keystore.p12

    记下导出密码,因为它将在以下所有步骤中用于访问密钥库 .

    从PKCS12密钥库在文件 server.keystore 中创建JKS密钥库:

    $ keytool -importkeystore -destkeystore server.keystore -srckeystore keystore.p12 -srcstoretype pkcs12 -alias server_cert

    您可以使用以下命令列出证书:

    $ keytool -list -v -keystore server.keystore

    验证命令输出是否表明证书链的正确大小 . 对于CA,CA1和CA_ROOT,大小必须为4 .

相关问题