国密ssl证书部署核心在于支持国密算法的底层环境、双证书兼容策略与精确配置;需用gmssl等国密库编译nginx/apache,同时加载sm2与rsa双证书,配置ecdhe-sm2-sm4-cbc-sha256等套件,实现客户端自动协商。

一、先确认是否真需要国密证书
国密证书主要面向金融、政务、国企等强合规场景,满足《密码法》《等保2.0》要求。如果项目无明确国密强制要求,用 Let’s Encrypt 或商业 RSA/ECC 证书更省事。确认必要性后再投入编译和配置成本。
二、选对证书并完成申请
在阿里云、腾讯云或沃通等支持国密的 CA 平台购买时,务必选择“国密标准(SM2)”类型,品牌建议选沃通(Wotrus)或 DNSPod,它们已通过国密局型号认证。申请过程中:
- 若选“系统生成 CSR”,CA 会直接提供 SM2 私钥和证书,无需自己生成;
- 若选“手动提交 CSR”,需用国密版 OpenSSL(如 gmssl)生成 SM2 密钥和请求,不能用普通 openssl;
- 下载证书包后,你会拿到:SM2 证书(.crt)、SM2 私钥(.key)、RSA 证书(.crt)、RSA 私钥(.key)、以及两套对应的中间证书。
三、搭建支持国密的 Web 服务器
Nginx 和 Apache 原生不支持 SM2,必须重新编译,指定国密版 OpenSSL 路径:
针对Linux系统,phpStudy团队推出全网首家linux docker容器面板,只要一个命令,快速安装面板,在面板里可以自行选择软件版本,可以方便的进行安全配置,就算没有Linux基础也可以快速搭建和管理PHP服务器环境!
- 下载 gmssl(官网 gmssl.cn 提供 Linux/Windows 版本),解压到 /usr/local/gmssl;
- Nginx 编译时加参数:
--with-openssl=/usr/local/gmssl --with-cc-opt="-I/usr/local/gmssl/include" --with-ld-opt="-lm"; - Apache 编译时,在 configure 中指定
--with-ssl=/usr/local/gmssl,并修改 build/config_vars.mk,将动态库链接改为静态链接 libssl.a 和 libcrypto.a; - Tomcat 则需引入
gmssl-tomcat扩展包,并在 server.xml 的 Connector 中设置sslImplementationName="cn.gmssl.tomcat.GMSSLImplementation"和sslProtocol="GMSSLv1.1"。
四、配置双证书并启用 TLS 协商
以 Nginx 为例,关键不是只配一套证书,而是同时加载两套,并启用国密密码套件:
- 把 SM2 证书+私钥、RSA 证书+私钥分别放入 /etc/nginx/ssl/,命名清晰(如
sm2.crt、sm2.key、rsa.crt、rsa.key); - server 块中写两组 ssl_certificate 指令(Nginx 1.19.4+ 支持多证书):
ssl_certificate /etc/nginx/ssl/sm2.crt;<br>ssl_certificate_key /etc/nginx/ssl/sm2.key;<br>ssl_certificate /etc/nginx/ssl/rsa.crt;<br>ssl_certificate_key /etc/nginx/ssl/rsa.key;
- 指定国密优先的 cipher suites:
ssl_ciphers ECDHE-SM2-SM4-CBC-SHA256:ECDHE-RSA-AES256-GCM-SHA384; - 开启 TLSv1.2 和 GM/T 0024-2014 协议支持(依赖编译时的 gmssl 版本)。
五、验证与常见问题
部署后别急着上线,用工具交叉验证:
- 用支持国密的浏览器(如红莲花、360 安全浏览器)访问,检查地址栏锁图标是否显示“SM2”;
- 用 Chrome 访问,应正常走 RSA 握手,不报错;
- 用
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com查看协商出的 cipher; - 常见失败点:443 端口未放行、安全组未开放、证书域名不匹配、gmssl 路径写错、Nginx 编译漏掉
--with-http_ssl_module。










