如何进行 SSL 证书续订

信息安全 tls 证书 证书颁发机构
2021-08-14 06:31:59

我从 GoDaddy 获得了 SSL 证书,是时候更新了。我最终得到了一个“密钥库”文件,我将其提供给我的网络服务器(Jetty)。这是我生成原始密钥库文件的过程,这让我感到困惑:

首先我生成了我的密钥库文件:

keytool -keystore keystore -alias myalias -genkey -keyalg RSA -keysize 2048

然后我生成了证书签名请求(CSR):

keytool -certreq -alias myalias -keystore keystore -file myrequest.csr

我将 myrequest.csr 文件发送给 GoDaddy。他们回复了两个文件:

example.com.crt
gd_bundle.crt

然后我运行了这一步,这似乎是将 GoDaddy 证书的一部分导入到我的密钥库文件中,但不确定它是如何工作的:

keytool -import -trustcacerts -alias myalias -keystore keystore -file gd_bundle.crt

最后一步,与上述类似,将部分域证书拉入密钥库文件:

keytool -keystore keystore -import -alias myalias -file example.com.crt -trustcacerts

现在我将密钥库文件提供给我的 Jetty 实例,一切正常。

随着续订,我知道我必须向 GoDaddy 发送另一个 CSR。但我是否完全从头开始?还是我应该在第一步中保留原始密钥库文件,然后从那里继续?

我没有保留原始密钥库文件的副本,而是通过上面列出的步骤对其进行了修改。因此,如果我必须使用它进行更新,不确定我是否在这里遇到了麻烦。

这是我在原始密钥库创建期间使用的 Jetty 文档: http ://wiki.eclipse.org/Jetty/Howto/Configure_SSL#Obtaining_a_CSR_from_keytool

2个回答

用于 SSL/TLS 的数字证书具有多个组件。虽然我们可以检查很多细节,但我们真正需要的是一个高级概述,但每一部分对于理解你应该做什么和为什么做都很重要。

当您开始获取证书的过程时,您首先发出命令,

keytool -keystore keystore -alias myalias -genkey -keyalg RSA -keysize 2048

您将其描述为“创建您的密钥库”,这是准确的,但它还做了更重要的事情:它生成了您的私钥/公钥对。在这种情况下,新的密钥库包含使用 RSA 算法和 2048 位熵的密钥对(表示密钥有多强的一种奇特方式,或者相对于其他密钥可能需要多长时间才能破解)。这很重要,因为密钥对是您向证书颁发机构 (CA) 证明您的下一个请求是续订、确实来自您并且是针对同一个证书的方式。

当您生成证书请求时,

keytool -certreq -alias myalias -keystore keystore -file myrequest.csr

您创建了一个文件,其中包含您的网站信息 (foo.com),以及一堆其他内容 - 包括您的公钥。这一切都被编码成一种众所周知的格式并发送到 CA。CA 使用您的公钥和他们的私钥生成了您的证书,这就是一些随机的网络浏览器可以使用它来知道他们在您的网站上以及发送数据是安全的。您的证书由只有您拥有的私钥和 CA 的公钥进行验证,只有当它与签署证书的私钥匹配时才有效。

那么,这一切如何影响您实现更新证书的目标呢?

简短的回答是,你不更新,因为更新并不是真正的更新。

“续订”只是一种奇特的说法,即您正在请求具有新到期日期的新证书,使用与旧证书相同的私钥。如果您使用与以前相同的命令(带有 -certreq 选项),它将使用您现有的密钥对创建一个新的证书请求。将其发送给 GoDaddy(或任何其他 CA),他们应该能够毫无问题地处理您的请求。

当他们将证书发送给您时,发出导入命令,您就可以开始了:

keytool -keystore keystore -import -alias myalias -file example.com.crt -trustcacerts

您应该能够将新证书导入到与旧证书相同的密钥库中,因为它们具有不同的序列号。如果您在导入时遇到问题,请尝试使用新别名。由于别名通常仅供您自己参考,您可以更改别名或进入并从密钥库中删除旧证书。它不会再使用了,所以可以安全地移除,但通常也不会伤害任何东西。

注意:您不必再次运行 CA 根导入,除非 GoDaddy 更新了他们的根证书(确实会发生,但不经常发生)。这是您用来引入根证书的命令:

keytool -import -trustcacerts -alias myalias -keystore keystore -file gd_bundle.crt

由于您提到您正在使用 GoDaddy,因此这里是他们的续订页面的链接。他们拥有的与您正在使用的 Jetty 服务器接近的唯一说明是用于 Tomcat 的说明。虽然这些并不准确,但 Tomcat 页面确实包含一些关于使用 keytool 的说明。 GoDaddy 证书续订支持页面

我在 www.tpsynergy.com 为我们的服务器更新证书时遇到了同样的问题。导入新的服务器证书并重新启动 tomcat 后,我​​们得到的错误是 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。经过大量研究,我使用此链接https://www.sslshopper.com/certificate-key-matcher.html来比较 csr(证书签名请求与实际证书)。他们俩都不匹配。所以我创建了一个新的 csr 并获得了一个新的证书并安装了它。有效。

所以这个过程的完整步骤是

  1. 从将安装证书的同一服务器,创建 CSR

    keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tpsynergy.keystore
    

    (根据需要更改域名)

在创建这个时,它会要求输入名字和姓氏。不要提供您的姓名,而是使用域名。例如,我将其命名为 www.tpsynergy.com

2.keytool -certreq -keyalg RSA -alias tomcat -file csr.csr -keystore tpsynergy.keystore

这将在同一文件夹中创建一个 csr.csr 文件。将此内容复制到 godaddy 站点并创建新证书。

  1. 下载的证书 zip 文件将包含三个文件

    gd_bundle-g2-g1.crt
    gdig2.crt
    youractualcert.crt
    
  2. 您需要从 godaddy 存储库下载根证书 gdroot-g2.crt。

  3. 将所有这些文件复制到您创建 CSR 文件和密钥库文件所在的同一目录中。

  4. 现在一一运行以下命令将证书导入密钥库

    keytool -import -trustcacerts -alias root -file gd_bundle-g2-g1.crt -keystore tpsynergy.keystore
    
    keytool -import -trustcacerts -alias root2 -file gdroot-g2.crt -keystore tpsynergy.keystore
    
    keytool -import -trustcacerts -alias intermediate  -file gdig2.crt -keystore tpsynergy.keystore
    
    keytool -import -trustcacerts -alias tomcat  -file yourdomainfile.crt -keystore tpsynergy.keystore
    
  5. 确保 conf 文件夹中的 server.xml 文件有此条目

       <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the JSSE configuration, when using APR, the
         connector should be using the OpenSSL style configuration
         described in the APR documentation -->
       <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
          maxThreads="150" scheme="https" secure="true"
          clientAuth="false" sslProtocol="TLS"
    
          keystoreFile="/usr/share/tomcat7/webapps/productioncerts/tpsynergy.keystore"
          keystorePass="mypasswordsameas the one used while creating the csr"
       />
    
  6. 重启tomcat