Tomcat  国密  SSL证书部署要点有几项:

一、背景概述

Tomcat  本身原生支持标准的  SSL/TLS  协议(如  RSA、ECC  算法),但并不直接支持国密  SSL  协议(SM2/SM3/SM4)。在  Java  环境下部署国密  SSL,需要通过引入第三方国密安全提供者(Security  Provider)和  Tomcat  国密组件来扩充  Java  的密码学能力。目前主流方案有以下几种。

二、环境准备

部署国密  SSL  前,需要确认以下基础环境:

项目      要求  

操作系统      Windows  /  Linux  /  Mac  均可  

  JDK  版本      JDK  7  及以上,推荐  JDK  8  

JDK  策略文件      需切换到无限制的安全策略文件(unlimited  policy)  

Tomcat  版本      Tomcat  7  /  8  /  9  均可  

  浏览器      支持国密的浏览器(360安全浏览器、红莲花国密浏览器、密信国密浏览器等)  

三、方案一:使用  gmssl.cn  国密组件(推荐方案)

该方案由  **gmssl.cn**  提供免费的国密  SSL  组件,Tomcat  无需修改源码、无需重新编译,支持任意版本。

3.1  获取证书

国密  SSL  通常采用**双证书架构**(签名证书  +  加密证书)。可通过以下方式获取测试证书:

访问  [https://www.gmssl.cn](https://www.gmssl.cn)  免费生成国密双证书(测试用),提交后会生成  PFX  格式证书文件(默认口令  `12345678`)

也可访问  [https://www.gmcrt.cn](https://www.gmcrt.cn)  选择  SM2  证书签发,下载对应  ZIP  包

正式生产环境建议从正规  CA  机构(如沃通  WoTrus、GDCA  等)申请正式国密  SSL  证书

3.2  部署组件  JAR  包

将以下两个  JAR  包分别放置到指定目录:

JAR  包      放置位置      说明  

`gmjce.jar`  和  `gmjsse.jar`      `$JRE_HOME/lib/ext/`      Java  国密安全提供者  

`gmssl4t.jar`      `$TOMCAT_HOME/lib/`      Tomcat  国密连接器实现  

注意:JRE  的加密策略需要先切换到  unlimited  模式,否则可能因加密强度限制导致握手失败。

3.3  配置  server.xml

编辑  `$TOMCAT_HOME/conf/server.xml`,在  `<Service>`  标签内添加以下  Connector  配置:

xml

<Connector  port="443"  

                      protocol="HTTP/1.1"  

                      SSLEnabled="true"

                      sslImplementationName="cn.gmssl.tomcat.GMSSLImplementation"

                      sslProtocol="GMSSLv1.1"

                      keystoreFile="/path/to/your/sm2.both.pfx"

                      keystoreType="PKCS12"

                      keystorePass="your_password">

</Connector>

配置参数说明:

  `sslImplementationName`:指定国密  SSL  实现类,是关键配置项

  `sslProtocol`:指定为国密协议版本  `GMSSLv1.1`

  `keystoreType`:国密证书一般使用  PKCS12  格式

  `keystoreFile`:PFX  格式证书文件的完整路径

  `keystorePass`:证书文件的口令(测试证书默认为  `12345678`)

3.4  启动验证

启动  Tomcat  后,使用支持国密的浏览器访问  `https://your-domain:443`,正常显示页面即表示国密  SSL  配置成功。

、方案二:使用  GMSSL  双栈自适应方案(生产推荐)

国密  SSL证书  部署面临的核心挑战是:多数主流浏览器(Chrome、Safari、Firefox)尚未原生支持国密算法。目前主流的平滑部署方案是  “国密国际双证书双算法”架构,即服务器同时部署国密  SM2  证书和国际  RSA/ECC  证书。

4.1  原理说明

国密证书链:使用  SM2  算法签发,由国密根证书信任

国际证书链:使用  RSA/ECC  算法签发,由国际根证书信任

自适应切换:支持国密的浏览器优先发起国密握手;普通浏览器自动回退至国际标准握手

4.2  证书文件准备

该方案需要准备三证书  PKCS#12  文件:

证书文件      说明  

`sm2_rsa.pfx`      三证书文件,包含  SM2  签名证书/私钥、SM2  加密证书/私钥、RSA  证书/私钥  

相比单纯国密证书(`sm2.pfx`),三证书文件  `sm2_rsa.pfx`  可以实现  RSA  和国密  SSL  的自适应兼容,同时支持国密浏览器和普通浏览器访问。

4.3  配置  server.xml

xml

<Connector  port="443"  

                      protocol="HTTP/1.1"  

                      SSLEnabled="true"

                      sslImplementationName="cn.gmssl.tomcat.GMSSLImplementation"

                      sslProtocol="GMSSLv1.1"

                      keystoreFile="/path/to/tomcat/certs/sm2_rsa.pfx"

                      keystoreType="PKCS12"

                      keystorePass="12345678">

</Connector>

4.4  验证要点

浏览器类型      预期结果  

Chrome  /  Firefox      通过  RSA  SSL  正常访问  

360安全浏览器  /  红莲花  /  密信      通过国密  SSL  正常访问  

五、方案三:使用  BGMProvider  /  毕昇  JDK

对于需要更深入集成的场景(如  JCA  编程、国密算法  SDK  开发),可以考虑使用  BGMProvider(国密算法  Java  安全提供者)。

5.1  核心要点

BGMProvider  的国密算法实现依赖于  BouncyCastle

可通过毕昇  JDK  的  `keytool`  工具集成  BGMProvider  生成国密双证书

支持  GMTLS  国密  TLS  客户端和服务端

5.2  证书合并(重要提示)

国密需要两本证书(加密证书和签名证书),传统的  `keytool`  工具不支持国密证书合并功能。解决方法是在  JDK  中添加  BGMProvider,然后使用支持国密的  keytool  工具将多本证书合并到一个  keystore  中。

六、常见问题与故障排查

6.1  SSLPeerUnverifiedException:  peer  not  authenticated

现象:配置国密  HTTPS  后,访问静态文件出现  500  错误,报错  `SSLPeerUnverifiedException:  peer  not  authenticated`,但一小部分静态文件访问正常。

排查建议:

1.  将  Tomcat  和“国密  SSL”拆开测试:先用普通  SSL  证书测试  Tomcat,确认  Tomcat  本身配置正常

2.  用其他服务器(如  Nginx)配置同一套国密证书,验证证书本身是否有效

3.  该问题通常仅在国密  SSL  场景下出现,自签的  RSA  证书无此问题,说明可能与国密组件兼容性相关

6.2  Tomcat  启动时  JAR  包未生效

现象:使用  `systemctl  start  tomcat`  启动时,国密组件  JAR  包似乎未被加载。

解决:改用  `sh  startup.sh`  直接启动  Tomcat  可解决此问题。

6.3  证书格式注意事项

JKS  是  Java  专用的密钥库格式,适合主要在  Java  环境下使用;PFX/PKCS12  是通用格式,被  Java  及其他平台广泛支持

建议将证书文件存放在安全的外部目录(如  `/etc/ssl/cert`),并设置严格的文件权限,只允许  Tomcat  运行用户读取

七、总结与建议

方案      适用场景      优缺点  

gmssl.cn  组件方案        快速部署、测试验证、等保合规    配置简单,组件免费,无需改源码;生产可用性需验证  

双证书自适应方案        生产环境,需同时兼容国密浏览器和主流浏览器      兼容性最好,是多数行业标配方案  

BGMProvider  方案        深度开发、国密算法  SDK  集成      灵活性高,实现复杂度也更高  

核心建议:

1.  测试环境:使用  gmssl.cn  免费组件快速验证

2.  生产环境:采用“国密国际双证书双算法”方案,确保证书来源正规(从沃通、GDCA  等合规  CA  机构申请)

3.  浏览器支持:务必准备支持国密的浏览器(360安全浏览器、红莲花国密浏览器、密信浏览器等)进行测试

4.  安全合规:部署后确保满足等保  2.0  和密评合规要求