一、问题背景
nginx证书配置完毕之后,提示信息如下:
error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak)
报错为:SSL 证书(zhdj.crt)的签名算法太弱。
[root@host-192-168-66-18 ~]# nginx -t
nginx: [emerg] SSL_CTX_use_certificate("/data/nginx/ssl/zhdj.pem") failed (SSL: error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak)
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
二、问题排查
1、排查openSSL版本
[root@host-192-168-66-18 ~]# openssl
OpenSSL> version
OpenSSL 1.1.1f 31 Mar 2020
OpenSSL> quit
2、查看加密签名算法【Nginx默认不支持国密算法】
Signature Algorithm: 1.2.156.10197.1.501
Digital Signature, Non Repudiation
证书的签名算法是 1.2.156.10197.1.501
。这是一个国密算法,标识为 SM2。
这个签名算法是基于椭圆曲线密码学的,与传统的 RSA 或 DSA 不同。在使用 SM2 签名算法的证书中,可能会遇到某些软件和库不支持的问题。
在 Nginx 中使用这个证书,并且遇到了 "ca md too weak" 的问题,可能是因为某些系统或软件版本的 OpenSSL 不支持这个特定的 SM2 签名算法。
三、问题处理【Nginx适配国密SM2算法】
参考:https://www.gmssl.cn/gmssl/index.jsp
不支持商用,商用需要单独收费。
四、东方通THS适配国密SM2证书
东方通TongHttpServer安装,略。
东方通常用命令:
cd /root/ths/bin
./start.sh
./startHA.sh
./startConsole.sh
admin
ths#123.com
vim /root/ths/conf/httpserver.conf
东方通THS证书配置:
国密证书包含四个文件:
conf/httpserver.conf文件配置:
ssl_protocols GMTLSv1.1;
ssl_certificate crt/SS.cer;
ssl_certificate_key crt/SS.key.pem;
ssl_certificate crt/SE.cer;
ssl_certificate_key crt/SE.key.pem;
四、Nginx迁移东方通THS报错信息
1、报错信息: httpserver: [emerg] named location "arouter" can be on the server level only in/root/ths/conf/httpserver.conf:115
解决:将该内容写在server头上,写在末尾则无法正常识别。
location @router {
rewrite ^.*$ /index.html last;
}