如何创建用于 Tomcat 的自签名 SSL 证书?

Posted

技术标签:

【中文标题】如何创建用于 Tomcat 的自签名 SSL 证书?【英文标题】:How to create a self signed SSL certificate for use with Tomcat? 【发布时间】:2017-07-21 08:22:03 【问题描述】:

我想生成一个自签名 SSL 证书,并将其与 Tomcat 一起使用。

我该怎么做?

【问题讨论】:

【参考方案1】:

如果您想为开发目的生成 SSL 证书以与 tomcat 一起使用,您可以使用这一行(需要您的机器上的 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

这会使用keyAliastomcat 生成一个密码为changemekeystore.jks 文件,localhost 的有效期为 9999 天

在您的tomcat/conf/server.xml 中,您需要像在您的<Connector> 中那样指定它

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

自 Tomcat 8 起

根据the documentation:

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

这意味着上面的值现在应该用这些名称作为连接器/SSLHostConfig/Certificate 的属性:

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

【讨论】:

【参考方案2】:

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

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

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

    其中,365 表示证书的有效期。

    以上命令导出证书,别名为tomcat

    selfsigned.jks 是密钥存储文件。

    输入密钥库的密码。请记下此密码,因为您需要此密码来配置服务器。

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

    当提示输入名字和姓氏时,输入服务器的域名。例如,myserver 或 myserver.mycompany.com

    输入其他详细信息,例如组织单位、组织、城市、州和国家/地区。

    确认输入的信息正确。

    当提示输入 tomcat 的“Enter key”密码时,按 Enter 以使用与密钥库密码相同的密码。

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

    keytool -list -v -keystore selfsigned.jks

    密钥工具实用程序的 -list 选项列出指定密钥存储文件的内容。

    -v 选项告诉密钥工具实用程序以人类可读的形式显示证书指纹。

    出现提示时,输入步骤 2 中记下的密钥库密码。显示生成证书的基本信息。

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

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

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

    password是keystore密码,输入步骤2中记下的keystore密码。

    Key Tool 实用程序响应以下输出

    证书存储在文件 selfsigned.cer 中

    验证证书文件的内容。

    您可以仔细检查证书文件的内容以确保它包含正确的证书。

    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 -noprompt -trustcacerts -alias tomcat -file selfsigned.cer -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit

    Key Tool 实用程序响应以下输出:

    证书已添加到密钥库

证书现已完成,可供 Apache Tomcat 服务器使用。

    在 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 中点击 ipaddress:443 时,它说该站点无法建立安全连接。非常感谢您对此的任何帮助。谢谢。 @Kiran 已经解决了这个问题还是仍然悬而未决?您可以通过转到设置在 chrome 中添加证书。不过我没试过。 @Kiren:对于测试,您也可以简单地单击 chrome 浏览器窗口上的任意位置并键入“thisisunsafe”,如this *** 答案中所述。【参考方案3】:

如果 Tomcat 是服务器,则不应编辑 trustore 仅适用于密钥库

【讨论】:

以上是关于如何创建用于 Tomcat 的自签名 SSL 证书?的主要内容,如果未能解决你的问题,请参考以下文章

为localhost创建受信任的自签名SSL证书(用于Express / Node)

Ubuntu apache创建有效的自签名证书ssl https(删除连接不安全)[重复]

为啥我无法获得与 Wamp 2.4.4 一起使用的自签名证书 (ssl)?

如何创建一个自签名的SSL证书

Android使用SSL自签名证书

Android使用SSL自签名证书