我想要生成一个自签名的SSL证书,并在Tomcat中使用它。
我该如何操作?
如果您想为与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
,使用keyAlias
为tomcat
的密钥库,有效期为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"
运行以下命令生成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键以使用与密钥库密码相同的密码。
运行此命令以验证密钥库的内容。
keytool -list -v -keystore selfsigned.jks
Key Tool实用程序的-list选项列出指定密钥库文件的内容。
-v选项告诉Key Tool实用程序以人类可读形式显示证书指纹。
在提示时,输入步骤2中记下的密钥库密码。将显示已生成证书的基本信息。
验证证书的指纹。 (验证“所有者”和“颁发者”是否相同。另外,您应该看到在步骤3和4中提供的信息)除非指纹匹配,否则不要接受证书并将其安装在应用程序的信任库中。
使用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
验证证书文件的内容。
keytool -printcert -v -file selfsigned.cer
从JAVA信任库中删除SSL证书并将其删除。
keytool -delete -noprompt -trustcacerts -alias tomcat -file selfsigned.cer -keystore "$JAVA_HOME/jre/lib/security/cacerts"
keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts" | grep tomcat
rm -f selfsigned.cer
从密钥库中删除SSL证书并将其删除。
keytool -delete -noprompt -trustcacerts -alias tomcat -keystore selfsigned.jks
输入密钥库口令:
keytool -list -keystore keytool -list -keystore selfsigned.jks | grep tomcat
输入密钥库口令:
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服务器。
在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"/>