GmSSL3实战:5分钟搞定SM2证书生成与TLS配置(附完整脚本)

张开发
2026/4/12 3:27:38 15 分钟阅读

分享文章

GmSSL3实战:5分钟搞定SM2证书生成与TLS配置(附完整脚本)
GmSSL3实战5分钟搞定SM2证书生成与TLS配置附完整脚本国密算法在金融、政务等领域的应用越来越广泛而GmSSL作为支持国密算法的开源密码库已经成为开发者必备的工具之一。本文将带你快速掌握GmSSL3的核心用法从SM2证书生成到TLS配置全程只需5分钟即可完成。1. 环境准备与GmSSL安装在开始之前我们需要确保系统环境已经准备好。GmSSL支持Linux、macOS和Windows平台但本文以Ubuntu为例进行演示。首先安装必要的编译工具sudo apt update sudo apt install -y build-essential git cmake接下来从GitHub克隆GmSSL源码并编译安装git clone https://github.com/guanzhi/GmSSL.git cd GmSSL mkdir build cd build cmake .. make sudo make install安装完成后验证GmSSL是否安装成功gmssl version如果看到类似GmSSL 3.x.x的输出说明安装成功。GmSSL提供了丰富的命令行工具可以通过gmssl help查看所有支持的命令。2. SM2证书链快速生成国密SSL环境需要完整的证书链包括根证书、签名证书和加密证书。下面是一个自动化生成脚本保存为generate_certs.sh#!/bin/bash # 清理旧文件 rm -f *.crt *.pem *.key # 生成根证书 gmssl sm2keygen -pass 123456 -out ca.key -pubout ca_pub.key gmssl certgen -C CN -ST Beijing -L Haidian -O MyOrg -OU Dev -CN RootCA \ -days 3650 -key ca.key -key_usage keyCertSign -pass 123456 -out ca.crt # 生成签名证书 gmssl sm2keygen -pass 123456 -out sign.key -pubout sign_pub.key gmssl reqgen -C CN -ST Beijing -L Haidian -O MyOrg -OU Dev -CN ServerSign \ -key sign.key -pass 123456 -out sign_req.pem gmssl reqsign -in sign_req.pem -days 3650 -key_usage digitalSignature \ -cacert ca.crt -key ca.key -pass 123456 -out sign.crt # 生成加密证书 gmssl sm2keygen -pass 123456 -out enc.key -pubout enc_pub.key gmssl reqgen -C CN -ST Beijing -L Haidian -O MyOrg -OU Dev -CN ServerEnc \ -key enc.key -pass 123456 -out enc_req.pem gmssl reqsign -in enc_req.pem -days 3650 -key_usage keyEncipherment \ -cacert ca.crt -key ca.key -pass 123456 -out enc.crt # 合并服务端证书 cat sign.crt enc.crt server.crt给脚本添加执行权限并运行chmod x generate_certs.sh ./generate_certs.sh脚本执行后会生成以下文件ca.crt根证书ca.key根证书私钥sign.crt签名证书sign.key签名证书私钥enc.crt加密证书enc.key加密证书私钥server.crt合并后的服务端证书3. TLS服务端与客户端配置有了证书文件后我们可以配置TLS服务端和客户端进行通信测试。3.1 启动TLCP服务端gmssl tlcp_server -port 4433 -cert server.crt \ -key sign.key -pass 123456 \ -ex_key enc.key -ex_pass 123456服务端启动后会监听4433端口等待客户端连接。3.2 启动TLCP客户端在另一个终端中运行客户端gmssl tlcp_client -host 127.0.0.1 -port 4433连接建立后客户端会显示Connection established!此时可以输入任意内容服务端会将其回显。4. 常见问题与解决方案在实际使用GmSSL过程中可能会遇到一些问题以下是几个常见问题及其解决方法问题1证书验证失败检查证书链是否完整确保证书的有效期和用途正确使用gmssl certverify命令验证证书链问题2私钥密码错误确保在命令行中指定的密码与生成证书时使用的密码一致如果忘记密码需要重新生成证书问题3端口冲突使用netstat -tulnp查看端口占用情况修改-port参数使用其他端口问题4算法不支持确认GmSSL版本是否支持所需算法使用gmssl list -algorithms查看支持的算法列表5. 进阶配置与优化对于生产环境还需要考虑以下配置5.1 密码套件配置GmSSL支持多种密码套件可以通过-cipher参数指定gmssl tlcp_server -port 4433 -cert server.crt \ -key sign.key -pass 123456 \ -ex_key enc.key -ex_pass 123456 \ -cipher ECC-SM2-SM4-CBC-SM35.2 性能优化对于高并发场景可以调整以下参数-naccept设置最大并发连接数-bufsize调整缓冲区大小-timeout设置超时时间5.3 日志与调试启用调试模式可以获取更详细的连接信息gmssl tlcp_server -port 4433 -cert server.crt \ -key sign.key -pass 123456 \ -ex_key enc.key -ex_pass 123456 \ -debug调试信息会显示握手过程、证书验证等细节有助于排查问题。

更多文章