使用密钥工具创建CSR,如何为tomcat ssl创建证书?

使用密钥工具创建CSR,如何为tomcat ssl创建证书?,tomcat,ssl,exception,certificate,keytool,Tomcat,Ssl,Exception,Certificate,Keytool,我的目标是使用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”-别名tomcat-keyalg RSA-keysize 2048-keystor

我的目标是使用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”-别名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”,然后进行转换以删除服务器的密码。密钥:

    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错误:java.lang.Exception:应答中的公钥和密钥库不匹配

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

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

    这是在:

    -genkeypair

    [……]

    生成密钥对(公钥和关联的 私钥)。将公钥包装到X.509 v3自签名 证书,它存储为单个元素证书链。 此证书链和私钥存储在新的 由别名标识的密钥存储条目

    […]此命令在早期版本中命名为-genkey

    向CA提交CSR时,通常会将CA颁发的证书重新导入到同一别名(私钥所在的别名)中,从而覆盖临时自签名证书

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


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

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

    作为缔约国:

    -签名密钥文件名

    此选项使输入文件使用提供的私钥进行自签名

    如果输入文件是一个证书,它将颁发者名称设置为使用者名称(即使其自签名),将公钥更改为 提供的值并更改开始和结束日期。开始日期是 设置为当前时间,结束日期设置为确定的值 按-天选项。任何证书扩展都将保留,除非 提供了-clext选项

    如果输入是证书请求,则使用提供的私钥使用 请求中的主题名称。

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

    事实上,将CSR转换为证书可以有很多参数。虽然
    keytool
    根据您提供的参数生成合理的默认自签名证书,但OpenSSL通常需要更多的配置。对于您正在尝试做的事情,肯定会更相关,不过我建议使用包装器以方便起见(它将跟踪您颁发的证书、序列号等等)


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

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

  • 生成密钥库
  • keytool-genkey-dname“CN=test.com,OU=test,O=test,L=TestCity,ST=Florida,C=US”-别名tomcat-keyalg RSA-keysize 2048-keystore-test.keystore-storepass changeit

  • 产生企业社会责任
  • keytool-certreq-alias tomcat-file request.csr-keystore test.keystore-storepass changeit

  • 从我的密钥库导出私钥以用于创建签名证书
  • keytool-v-importkeystore-srckeystore test.keystore-srcalas tomcat-destkeystore myp12file.p12-deststoretype PKCS12

    openssl pkcs12-在myp12file.p12中-在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


    下面的过程描述了JKS密钥库的创建,该密钥库与JBoss 5.0应用服务器完美配合。Tomcat可能使用相同类型的
    $ OLD_UMASK=`umask`   (umask is inside backtick characters)
    $ umask 077
    
    $ openssl genrsa 2048 > private_key.pem
    
    $ umask $OLD_MASK
    
    $ openssl req -new -key private_key.pem -nodes
    
    $ cat ca_cert.pem ca1_cert.pem ca_root.pem > ca_chain_cert.pem
    
    $ cat certificate.pem ca_chain_cert.pem > chain.pem