要使Tomcat支持国密SSL证书,核心在于引入一个支持国密标准的第三方Java安全提供者(JCE/JSSE Provider)或特定的SSL实现库。
重要提示:Apache Tomcat官方版本本身不支持国密SSL协议。你正在寻找的“`Connector`配置方式”,本质上是通过额外的组件或自定义JSSE提供者,来覆盖或增强Tomcat原有的SSL功能。
下面,我将以主流的通过添加国密SSL组件(例如从`gmssl.cn`获取)的方案为例,为你梳理其核心配置步骤及`Connector`中的关键参数。
步骤一:核心前置工作(准备环境与证书)
在动手修改`server.xml`之前,需要先完成以下准备工作,这是配置成功的基石。
1. 部署国密组件 (JAR包)
JCE/JSSE提供者:将国密提供者的JAR包(如`gmssl_provider.jar`)放入JDK/JRE的扩展目录,例如:`/usr/lib/jvm/jre/lib/ext/`。
Tomcat集成库:将`gmssl4t.jar`这样的Tomcat专用集成包复制到你Tomcat安装目录的`lib`文件夹中。
2. 获取并处理国密证书
获取证书:国密SSL需要符合《信息安全技术 传输层密码协议》国标规范的服务器端SM2证书。你可以从`gmssl.cn`等平台获取用于测试的免费双证书。
证书格式与类型:通常,你得到的证书文件可能是`.pfx`或`.dcks`格式。
PKCS12格式:国密证书文件一般是`.pfx`格式,此时`keystoreType`通常设为`"PKCS12"`。
自定义格式:如果证书是`.dcks`格式,可能需要使用提供者特定的`keystoreType`,如`DCKS`(DoubleCA KeyStore)。
启用无限制加密策略:为了支持国密算法,你需要检查`JAVA_HOME/jre/lib/security/java.security`文件,确保`crypto.policy`被设置为`unlimited`。
步骤二:配置 server.xml (两种方式)
完成前置准备后,就可以编辑Tomcat的`conf/server.xml`文件了。
方式一:显式指定国密SSL实现 (推荐)
这种方式通过`sslImplementationName`属性,强制Tomcat使用特定的国密SSL库,清晰明了。
xml
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
sslImplementationName="cn.gmssl.tomcat.GMSSLImplementation"
sslProtocol="GMSSLv1.1"
scheme="https" secure="true"
keystoreFile="/path/to/your/keystore.pfx"
keystoreType="PKCS12"
keystorePass="your_password" />
`sslImplementationName`: 这是关键参数,指向了国密SSL实现类。
`sslProtocol`: 协议类型必须是 `"GMSSLv1.1"`。
其余证书相关配置为标准HTTPS设置。
方式二:全局替换加密提供者
通过修改`JAVA_OPTS`环境变量,让JVM全局优先使用你的国密安全提供者。`Connector`的配置与标准HTTPS完全相同。
首先,在启动脚本或环境变量中设置`JAVA_OPTS`:
bash
-Djava.security.properties=/path/to/custom.security
然后,在`server.xml`中进行标准HTTPS配置:
xml
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
scheme="https" secure="true"
sslProtocol="TLS"
keystoreFile="/path/to/your/keystore.pfx"
keystoreType="PKCS12"
keystorePass="your_password" />
注意:采用此方式时,`sslProtocol`仍可设为`"TLS"`,因为国密实现通常同时支持标准的TLS协议和国密标准。
可选配置:指定国密密码套件
你还可以通过`ciphers`属性精确控制使用的密码套件,以提高安全性。
在`Connector`中添加如下属性:
xml
ciphers="GMSSL_ECC_WITH_SM4_CBC_SM3, GMSSL_ECC_SM4_SM3, ..."
一个典型的国密密码套件是`GMSSL_ECC_WITH_SM4_CBC_SM3`。具体的套件名称列表请查阅你所使用的国密提供商文档。
总结:关键参数速查表
参数名 说明 推荐/示例值
`port` HTTPS监听端口 `"443"` (标准) 或 `"8443"` (测试)
`protocol` HTTP协议处理类型 `"HTTP/1.1"`
`SSLEnabled` 必须为`true` `"true"`
`scheme` 设置为`https` `"https"`
`secure` 设置为`true` `"true"`
`sslImplementationName` 核心:指向国密SSL实现类 `"cn.gmssl.tomcat.GMSSLImplementation"`
`sslProtocol` 核心:SSL协议版本 `"GMSSLv1.1"` 或 `"TLS"`
`keystoreFile` 证书库文件路径 `/path/to/server.pfx`
`keystoreType` 证书库类型 `"PKCS12"` 或 `"JKS"` 或 `"DCKS"`(国密特定)
`keystorePass` 证书库密码 `"your_password"
`ciphers` (可选) 指定启用的密码套件列表 `"GMSSL_ECC_WITH_SM4_CBC_SM3, ..."`
最后提醒:具体配置可能因你选择的国密组件、证书格式以及JDK版本而略有差异,建议结合实际使用的提供者官方文档进行验证。