# 生成密钥库
keytool -genkeypair \
-alias tomcat \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-keystore /path/to/keystore.jks \
-storepass changeit \
-keypass changeit \
-dname "CN=localhost, OU=IT, O=Company, L=City, ST=State, C=CN"
从证书提供商获取:
转换为JKS格式:
# 将PEM格式合并为PKCS12
openssl pkcs12 -export \
-in domain.crt \
-inkey domain.key \
-chain \
-CAfile ca-bundle.crt \
-name "tomcat" \
-out tomcat.p12 \
-password pass:changeit
转换为JKS格式
keytool -importkeystore \ -deststorepass changeit \ -destkeypass changeit \ -destkeystore keystore.jks \ -srckeystore tomcat.p12 \ -srcstoretype PKCS12 \ -srcstorepass changeit \ -alias tomcat
## 2. 配置Tomcat server.xml
编辑 `$CATALINA_HOME/conf/server.xml`:
### 方案A:HTTP/1.1 Connector
```xml
<!-- 取消注释或添加以下配置 -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
scheme="https" secure="true"
keystoreFile="/path/to/keystore.jks"
keystorePass="changeit"
keyAlias="tomcat"
clientAuth="false"
sslProtocol="TLS"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384"
>
</Connector>
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
scheme="https" secure="true">
<SSLHostConfig
certificateVerification="false"
protocols="TLSv1.2,TLSv1.3">
<Certificate
certificateKeystoreFile="/path/to/keystore.jks"
certificateKeystorePassword="changeit"
certificateKeystoreType="JKS"
type="RSA" />
</SSLHostConfig>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
在 $CATALINA_HOME/webapps/ROOT/WEB-INF/web.xml 中添加:
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Content</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
# 启动Tomcat
$CATALINA_HOME/bin/startup.sh
# 验证HTTPS
curl -k https://localhost:8443/
# 或使用浏览器访问 https://your-domain:8443
<Connector port="8443" ...>
<SSLHostConfig>
<Certificate
certificateKeystoreFile="/path/to/domain1.jks"
certificateKeystorePassword="pass1"
hostName="domain1.com"/>
<Certificate
certificateKeystoreFile="/path/to/domain2.jks"
certificateKeystorePassword="pass2"
hostName="domain2.com"/>
</SSLHostConfig>
</Connector>
<SSLHostConfig>
<Certificate
certificateFile="/path/to/certificate.pem"
certificateKeyFile="/path/to/privatekey.pem"
certificateChainFile="/path/to/ca-bundle.pem"
type="RSA"/>
</SSLHostConfig>
# 检查端口占用
netstat -tlnp | grep 8443
# 或修改server.xml中的端口号
# 检查JKS文件
keytool -list -keystore keystore.jks -storepass changeit
# 确保Tomcat用户有读取权限
chmod 640 /path/to/keystore.jks
chown tomcat:tomcat /path/to/keystore.jks
使用以下工具验证:
# 测试SSL连接
openssl s_client -connect localhost:8443 -servername your-domain.com
# 检查证书链
keytool -printcert -sslserver your-domain.com:8443
这样配置后,您的Tomcat 11就支持HTTPS访问了。