如何创建用于 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
这会使用keyAlias
的tomcat
生成一个密码为changeme
的keystore.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(删除连接不安全)[重复]