国密证书生成实践
实验环境:
1 2 | Linux ubuntu/Centos 64 x86_64 x86_64 x86_64 GNU/Linux |
1、根据官网说明安装gmssl
1 2 3 4 5 | $ unzip GmSSL-master.zip $ cd GmSSL-master $ . /config no-saf no-sdf no-skf no-sof no-zuc no-shared #不去编译动态库,编译出来的gmssl不再依赖libssl.so $ make $ sudo make install |
2、修改/usr/local/ssl/openssl.cnf配置
1 | $ vi /usr/local/sslopenssl .cnf |
1 2 3 4 | [ ca ] default_ca = CA_default # The default ca section [ CA_default ] #dir = ./demoCA # Where everything is kept dir = /home/myapp/demoCA #此处修改 |
3、初始化CA目录
1)创建根目录
1 2 | $ mkdir -p /home/myapp/demoCA $ cd /home/myapp/demoCA |
2)创建其他目录
在此路径下要创建好/usr/local/ssl/openssl.cnf中需要的certs, crl ,new_certs_dir和private_key的子目录,默认是newcerts和private
1 | $ mkdir certs crl newcerts private |
3)创建好database文件index.txt
1 | touch index.txt |
4)创建好serial文件,并写入初始序号,如01
1 | echo "01" > serial |
4、生成国密证书步骤
(1)生成根证书
1)生成私钥key
1 | $ gmssl ecparam -genkey -name sm2p256v1 -text -out Root.key -config /usr/local/ssl/openssl .cnf |
2)生成证书签名请求
1 2 | $ gmssl req -new -key Root.key -out Root.req -subj /C =CN /ST =Guang\ Zhou /L =GZ /O =Root /OU =Root\ Sign /CN =RootCA /emailAddress =Root@gmail.com -config /usr/local/ssl/openssl .cnf |
3)生成根证书
1 2 | $ gmssl x509 -req -days 3650 -sm3 - in Root.req -signkey Root.key -out RootCA.crt $ cp RootCA.crt demoCA/ $ cp Root.key demoCA /private/ |
类似于 apache/ssl/ca.crt和apache/ssl/ca.key
(2)生成中间证书(即客户端证书)
1)生成私钥
1 | $ gmssl ecparam -genkey -name sm2p256v1 -text -out Medium.key -config /usr/local/ssl/openssl .cnf |
2)生成客户证书请求
1 | $ gmssl req -new -key Medium.key -out Medium.req -subj /C =CN /ST =Guang\ Zhou /L =GZ /O =Medium /OU =Medium\ Sign /CN =MediumCA /emailAddress =Medium@gmail.com -config /usr/local/ssl/openssl .cnf |
3)签发证书
1 | $ gmssl x509 -req -sm3 -days 3650 -CA RootCA.crt -CAkey demoCA /private/Root .key -CAcreateserial - in Medium.req -out MediumCA.crt |
4)证书验证
1 | $ gmssl verify -CAfile RootCA.crt MediumCA.crt |
1 2 | $ cp MediumCA.crt demoCA/ $ cp Medium.key demoCA /private/ |
5)证书转换成浏览器认识的格式 pfx
1 | $ gmssl pkcs12 - export -inkey Medium.key - in MediumCA.crt -out test .pfx -passin pass:xxx -passout pass:xxx |
6) 查看证书信息
1 2 3 4 5 6 7 8 9 10 11 | PKCS转换为PEM gmssl pkcs12 - in test .pfx -out cert.pem -nodes 转换后可查看证书信息 打印出证书的内容: gmssl x509 - in cert.pem -noout -text 打印出证书的系列号 gmssl x509 - in cert.pem -noout -s erial 打印出证书的拥有者名字 gmssl x509 - in cert.pem -noout -subject 打印出证书的MD5特征参数 gmssl x509 - in cert.pem -noout -fingerprint |
(3)生成服务器证书
1) 生成私钥
1 | $ gmssl ecparam -genkey -name sm2p256v1 -text -out Server.key -config /usr/local/ssl/openssl .cnf |
2) 证书请求
1 | $ gmssl req -new -key Server.key -out Server.csr -subj /C =CN /ST =Guang\ Zhou /L =GZ /O =Server /OU =Server\ Sign /CN =ServerCA /emailAddress =Server@gmail.com -config /usr/local/ssl/openssl .cnf |
3) 签发证书
1 | $ gmssl x509 -req -sm3 -days 3650 -CA RootCA.crt -CAkey demoCA /private/Root .key -CAcreateserial - in Server.csr -out ServerCA.crt |
4)证书验证
1 | $ gmssl verify -CAfile RootCA.crt ServerCA.crt |
如果你觉得不错的话,右下角,随手点个推荐,鼓励支持hhh^_^
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?