如何为Tomcat创建自签名SSL证书?

17

我想要生成一个自签名的SSL证书,并在Tomcat中使用它。

我该如何操作?

2个回答

29

如果您想为与Tomcat一起使用的开发目的生成SSL证书,则可以使用此一行命令(需要在您的计算机上安装JDK,因此不使用openssl)。

 keytool -genkey -keyalg RSA -noprompt -alias tomcat -dname "CN=localhost, OU=NA, O=NA, L=NA, S=NA, C=NA" -keystore keystore.jks -validity 9999 -storepass changeme -keypass changeme

这将生成一个文件名为keystore.jks,密码为changeme,使用keyAliastomcat的密钥库,有效期为9999天,适用于localhost

在您的tomcat/conf/server.xml中,在<Connector>标签中指定它。

    keyAlias="tomcat"
    keystoreFile="/path/to/my/keystore.jks"
    keystorePass="changeme"

自从Tomcat 8版本开始

根据文档

NIO和NIO2 SSL配置属性已经被弃用,取而代之的是默认的SSLHostConfig。

这意味着上述值现在应该作为connector/SSLHostConfig/Certificate的属性放置,并使用这些名称:

    certificateKeyAlias="tomcat"
    certificateKeystoreFile="/path/to/my/keystore.jks"
    certificateKeystorePassword="changeme"

26

生成自签名SSL证书并添加到JAVA信任库以在Tomcat中使用

  1. 运行以下命令生成SSL证书。

    keytool -genkey -keyalg RSA -alias tomcat -keystore selfsigned.jks -validity 365 -keysize 2048

    • 其中365表示证书有效期的天数。

    • 上述命令导出别名为tomcat的证书。

    • selfsigned.jks是密钥库文件。

  2. 为密钥库输入密码。请注意此密码,因为您需要用它来配置服务器。

默认情况下,密钥库密码设置为changeit;您可以使用Key Tool实用程序的-storepasswd选项将其更改为更安全的内容。

  1. 在要求输入名字时,输入服务器的域名。例如,myserver或myserver.mycompany.com

  2. 输入其他详细信息,如组织单位、组织、城市、州和国家。

  3. 确认输入的信息准确无误。

  4. 在要求输入tomcat的“输入密钥”密码时,按Enter键以使用与密钥库密码相同的密码。

  5. 运行此命令以验证密钥库的内容。

    keytool -list -v -keystore selfsigned.jks

    • Key Tool实用程序的-list选项列出指定密钥库文件的内容。

    • -v选项告诉Key Tool实用程序以人类可读形式显示证书指纹。

  6. 在提示时,输入步骤2中记下的密钥库密码。将显示已生成证书的基本信息。

  7. 验证证书的指纹。 (验证“所有者”和“颁发者”是否相同。另外,您应该看到在步骤3和4中提供的信息)除非指纹匹配,否则不要接受证书并将其安装在应用程序的信任库中。

  8. 使用Key Tool实用程序的-export选项将证书从密钥库导出到单独的证书文件,然后再将其导入到应用程序的信任库中。 例如,以下命令将上面显示的别名为tomcat的证书从密钥库(selfsigned.jks)导出到名为selfsigned.cer的证书文件:

    keytool -export -keystore selfsigned.jks -storepass <password> -alias tomcat -file selfsigned.cer

    • password是密钥库密码,请输入步骤2中记下的密钥库密码。

    • Key Tool实用程序将回复以下输出:

      Certificate stored in file selfsigned.cer

  9. 验证证书文件的内容。

  • 检查证书文件的内容,确保它包含正确的证书。
  • Key Tool工具的-printcert选项列出了指定证书文件的内容。例如,以下命令列出了在前面步骤中创建的证书文件selfsigned.cer:
  • keytool -printcert -v -file selfsigned.cer

  • 再次使用-v选项告诉Key Tool工具以人类可读形式显示证书摘要。
  • 检查keytool -printcert命令的输出,确保证书是正确的。
  • 如果应用程序的信任存储中存在过期的证书,则必须按照以下步骤删除它,否则直接跳到第13步导入证书。

从JAVA信任库中删除SSL证书并将其删除。

  • 运行以下命令从JAVA信任库中删除证书。
  • keytool -delete -noprompt -trustcacerts -alias tomcat -file selfsigned.cer -keystore "$JAVA_HOME/jre/lib/security/cacerts"

  • 提示时输入密码(默认密码为changeit
  • 运行以下命令确认证书是否已从JAVA信任库中删除。
  • keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts" | grep tomcat

  • 提示时输入密码(默认密码为changeit
  • 运行以下命令从系统中删除证书文件。
  • rm -f selfsigned.cer

    从密钥库中删除SSL证书并将其删除。

  • 运行以下命令从密钥库中删除证书。
  • keytool -delete -noprompt -trustcacerts -alias tomcat -keystore selfsigned.jks

  • Key Tool工具会提示您输入密钥库文件的密码:
  • 输入密钥库口令:

  • 运行以下命令确认证书是否已从密钥库中删除。
  • keytool -list -keystore keytool -list -keystore selfsigned.jks | grep tomcat

  • Key Tool工具会提示您输入密钥库文件的密码:
  • 输入密钥库口令:

  • 运行以下命令从系统中删除密钥库文件。
  • rm -f selfsigned.jks


  • 将证书导入到应用程序的信任存储中。 Key Tool工具的-import选项在指定的信任存储中从证书文件安装证书。

    • 例如,如果客户端应用程序的信任存储保存在文件$JAVA_HOME/jre/lib/security/cacerts中,则以下命令将安装上面创建的selfsigned.cer文件中的证书:

    • keytool -import -trustcacerts -file selfsigned.cer -alias tomcat -keystore "$JAVA_HOME/jre/lib/security/cacerts"

  • keytool -import -noprompt -trustcacerts -alias tomcat -file selfsigned.cer -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit

  • 运行上述命令后,Key Tool工具会响应以下输出:

    证书已添加到密钥库中

  • 证书现在已经完成,可用于Apache Tomcat服务器。

    1. 在tomcat server.xml文件中查找Connector标签,并添加密钥库文件路径及其密码。请参考以下配置:

      <Connector port="8080" protocol="HTTP/1.1"
                 redirectPort="443"
                 disableUploadTimeout="false"/>
      <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
                maxThreads="150" scheme="https" secure="true"
                keystoreFile="selfsigned.jks" keystorePass="<password>"
                clientAuth="false" acceptCount="100"/>
      

    我按照所有步骤操作,但在Chrome中输入https://ipaddress:443时,它显示无法建立安全连接。如果有任何帮助,将不胜感激。谢谢。 - Kiran
    @Kiran已经解决了这个问题还是还在等待中?您可以通过进入设置来在Chrome中添加证书。不过我还没有尝试过。 - Syed Hassan
    1
    @Kiren:对于测试,您也可以在Chrome浏览器窗口的任何位置单击并输入“thisisunsafe”,如 StackOverflow答案所述。 - L.Lauenburg

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接