【问题标题】:How to install GoDaddy SSL certificates in Tomcat without CSR?如何在没有 CSR 的情况下在 Tomcat 中安装 GoDaddy SSL 证书?
【发布时间】:2019-04-25 15:28:07
【问题描述】:

我们的一位客户购买了通配符 SSL 证书 (*.example.com) 来自 GoDaddy,他只是下载而没有提供 CSR 数据。我们在那个 zip 文件中有 3 个文件。它们是fce4f111a61ea3f4.crtgd_bundle-g2-g1.crtgdig2.crt.pem

我搜索了很多关于此的文章,但每个人都说首先从您的服务器获取 CSR 数据并将其传递到 GoDaddy 以获取 SSL 证书。

在我的例子中,我们没有向 GoDaddy 提供 CSR 数据,这意味着我没有密钥库文件。

现在,我尝试将没有密钥库的证书安装到我的服务器。为此,我使用了以下命令但没有成功:

keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file fce4f111a61ea3f4.crt

keytool -import -alias interm -keystore tomcat.keystore -trustcacerts -file gd_bundle-g2-g1.crt

keytool -import -alias tomcat -keystore tomcat.keystore -trustcacerts -file gdig2.crt.pem

【问题讨论】:

  • 看起来不错。您的 Tomcat 不需要任何证书签名请求 (CSR)。在这种情况下,这是向您的证书颁发机构 (CA) 即 GoDaddy 请求签名所必需的。您不想向他们(或任何人)发送您的秘密私钥,因此您发送一个包含您的公钥的 CSR 并仅请求元数据并取回新制作的证书和中间证书链包。你的实际问题是什么?
  • 我在其他提供商处安装了很多次 SSL 证书,我从未将 CSR 数据发送给第三方,但它对我有用。这次使用 goDaddy 证书不起作用我不知道为什么?
  • 如果没有完整的异常堆栈跟踪,甚至不知道证书的用途,很难猜测“不工作”是什么意思。

标签: java ssl tomcat keytool


【解决方案1】:

我假设您已经按照上面的陈述维护了密钥库。首先备份您的密钥库以避免任何意外。

除了您拥有的文件之外,您还应该拥有生成的证书的私钥

现在按照命令进行操作。

  1. 首先从密钥库文件中删除所有现有条目。
keytool -delete -alias tomcat -keystore domain.jks

您也可以通过keytool -list -keystore domain.jks 来查看任何其他现有条目也可以删除它们。

  1. 现在将证书和私钥导出到 PKCS12 文件中
openssl pkcs12 -export -in fce4f111a61ea3f4.crt -inkey private.key -out cert_and_key.p12 -name tomcat -CAfile gd_bundle-g2-g1.crt -caname root

如果您收到类似以下错误

unable to load private key
139995851216720:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: ANY PRIVATE KEY

这意味着您的private.key 格式不正确,您需要将编码更改为ASCII text 运行以下命令来转换您的私钥

# You can do a dry run before manipulating the actual file
tail -c +4 private.key | file -

# Change encoding
tail -c +4 private.key > private.key
  1. 将 PKCS12 文件导入 JKS 密钥库:
keytool -importkeystore -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -alias tomcat -keystore domain.jks
  1. 现在将根证书导入 JKS 密钥库(使用根别名)
keytool -import -trustcacerts -alias root -file $certdir/gd_bundle-g2-g1.crt -noprompt -keystore domain.jks
  1. server.xml中添加关注
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150"
    SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
    keystoreFile="/path/to/keysore/domain.jks" keystorePass="xxxxxx"
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
    TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,
    TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA" />

不要忘记将 xxxxxx 替换为您的 JKS 密钥库密码和 keystoreFile 参数

  1. 完成。现在重新启动您的 Tomcat 服务器 并收听您的日志文件
sudo service tomcat7 restart
sudo tail -f /var/log/tomcat7/catalina.out

注意:domain.jks 替换为您的实际密钥库文件。

【讨论】:

  • 感谢您提供此解决方案。这个对我有用。我已经使用不同服务器的 csr 生成了证书,并且我有一台服务器,其中 tomcat 已经使用密钥库运行。所以当我的证书过期时,我会得到新的证书,所以我想添加那个新的。为此,它可以帮助我
  • 我试过这个,它奏效了......有点。 Web 浏览器接受证书,但 Android 不接受。似乎缺少中间证书或根证书。 “证书未由受信任的机构签署(检查 Mozilla 的根存储)。如果您从受信任的机构购买证书,您可能只需要安装一个或多个中间证书。请联系您的证书提供商以获得帮助服务器平台。”
  • 第 2 步应指定-chain(将修复@James 问题)。不需要第 3 步; Java 8u60 以上(自 2015 年起)可以直接读取 PKCS12(如果您指定 keystoreType,甚至在此之前)。根本不需要第 4 步。在第 5 步中,不必覆盖密码套件的默认值,但如果这样做,则应包括 AEAD(可用时 GCM 和 ChaCha)并且绝对不应包括 RC4。
【解决方案2】:

按照此处和其他地方的信息,这在 Windows 上的 TC9 上对我有用:

  1. 确保路径有一个 Java Home:

    设置 PATH=%PATH%;C:\Program Files\Java\jre1.8.0_281\bin

  2. 创建密钥库:

    keytool -genkey -alias server -keyalg RSA -keysize 2048 -keystore mydomain.jks

  3. 提取.csr:

    keytool -certreq -alias server -file C:\pathtoit\csr.txt -keystore mydomain.jks

  4. 将csr.txt交给godaddy并获取证书

  5. 导入包和 .crt 文件:

    keytool -import -trustcacerts -alias middle -file gd_bundle-g2-g1.crt -keystore mydomain.jks

    keytool -import -alias server -keystore mydomain.jks -trustcacerts -file 24234234.crt

注意:如果您想查看发生了什么,请使用 Keystore Explorer。

然后在server.xml中:

<Connector port="443" maxHttpHeaderSize="8192" maxThreads="100"
  minSpareThreads="25" maxSpareThreads="75"
  enableLookups="false" disableUploadTimeout="true"
  acceptCount="100" scheme="https" secure="true"
  SSLEnabled="true" clientAuth="false"
  sslProtocol="TLS" keyAlias="server"
  keystoreFile="C:\pathtoit\mydomain.jks" keystorePass="xxxx"  />

【讨论】:

  • 这仅适用于您生成密钥和 CSR 的情况,而本问题并非如此。注意 - 使用捆绑文件导入实际上只导入中间 CA 证书“gdig2”而不是交叉和根证书,但这没关系,因为现在实际上 GoDaddy G2 根是已知的,因此您不需要交叉(并且在 SSL /TLS 服务器,您实际上不需要根)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 2020-07-28
  • 2016-03-10
  • 2023-03-23
  • 2015-09-30
  • 2018-09-07
相关资源
最近更新 更多