首页 > 其他分享 >利用GmSSL制作SM2国密证书

利用GmSSL制作SM2国密证书

时间:2024-02-26 10:45:57浏览次数:24  
标签:SM2 gmssl pem 国密 GmSSL out


Part 0前言

       GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可用于闭源的商业应用。

       GmSSL项目由北京大学关志副研究员的密码学研究组开发维护,项目源码托管于GitHub。自2014年发布以来,GmSSL已经在多个项目和产品中获得部署与应用,并获得2015年度“一铭杯”中国Linux软件大赛二等奖(年度最高奖项)与开源中国密码类推荐项目。GmSSL项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。

等级保护基本要求GB/T 22239中对密码管理提出以下要求:

a)     应遵循密码相关国家标准和行业标准;

b)    应使用国家密码管理主管部门认证核准的密码技术和产品。

       本文利用GmSSL来制作SM2国密证书,以期代替用RSA算法制作的SSL证书,探索如何满足等保相关技术要求。

实验环境:CentOS 6.X +

Part 1 安装GmSSL

1、下载GmSSL

# wget https://github.com/guanzhi/GmSSL/archive/master.zip

# unzip master.zip

 

2、编译安装GmSSL

# ./config

# make

# make install

# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1

# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

 

3、检查GmSSL版本

# gmssl version -a

 

4、测试GmSSL加密

SM3 digest generation(哈希算法,类似MD5)

# echo -n "abc" | gmssl sm3

(stdin)= 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0

 

SM4 encryptiona and decryption(对称算法,类似AES、3DES)

# gmssl sms4 -in README.md -out README.sms4

# gmssl sms4 -d -in README.sms4

 

SM2 private key generation(非对称算法,类似RSA)

# gmssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2p256v1 -pkeyopt ec_param_enc:named_curve -out skey.pem

 

Derive the public key from the generated SM2 private key:

# gmssl pkey -pubout -in skey.pem -out vkey.pem

 

SM2 signature generation and verification:

# gmssl sm3 -binary README.md | gmssl pkeyutl -sign -pkeyopt ec_scheme:sm2 -inkey skey.pem -out README.md.sig

 

# gmssl sm3 -binary README.md | gmssl pkeyutl -verify -pkeyopt ec_scheme:sm2 -pubin -inkey vkey.pem -sigfile README.md.sig

 

# gmssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2p256v1 -pkeyopt ec_param_enc:named_curve -out dkey.pem

 

# gmssl pkey -pubout -in dkey.pem -out ekey.pem

 

# echo "Top Secret" | gmssl pkeyutl -encrypt -pkeyopt ec_scheme:sm2 -pubin -inkey ekey.pem -out ciphertext.sm2

 

# gmssl pkeyutl -decrypt -pkeyopt ec_scheme:sm2 -inkey dkey.pem -in ciphertext.sm2

 

Self-signed SM2 certificate generation:

 

# gmssl req -new -x509 -key skey.pem -out cert.pem

Part 2 用GmSSL制作国密证书之SM2

1、创建demoCA目录,在demoCA目录下执行:

# mkdir certs crl newcerts private

# touch index.txt

# echo "01" > serial

 

2、将通过以下自签名生成的cacert.pem放到demoCA目录下,

cakey.pem放到demoCA/private

 

3、创建公私钥和证书请求:

# gmssl ecparam -genkey -name sm2p256v1 -out cakey.pem

# gmssl req -new -sm3 -key cakey.pem -out cacsr.pem

 

4、自签名

# gmssl req -x509 -sm3 -days 3650 -key cakey.pem -in cacsr.pem -out cacert.pem

# gmssl x509 -req -days 3650 -sm3 -in cacsr.pem -signkey cakey.pem -out cacert.pem

 

5、把pem转化成cer

# gmssl x509 -inform pem -in cacert.pem -outform der -out cacert.cer

 

6、ca签名(在demoCA的父目录下执行)

# gmssl ca -md sm3 -in client_csr.pem -out client_cert.pem -days 3650

 

7、显示证书信息:

# gmssl x509 -text -noout -in cacert.pem

# gmssl req -in cacsr.pem -noout -text

 

8、证书通信测试命令

SERVER:

# gmssl s_server -key server_key.pem -cert server_cert.pem -CAfile cacert.pem -cipher ECDHE-SM4-SM3 -verify 1

 

CLIENT:

# gmssl s_client -key client_key.pem -cert client_cert.pem -CAfile cacert.pem -cipher ECDHE-SM4-SM3 -verify 1

注:

1、通过测试的GmSSL版本为95c0dba,下载地址https://github.com/guanzhi/GmSSL.git

2、以上制作的证书均为:Signature Algorithm: sm2sign-with-sm3

3、当前浏览器如IE、Firefox、Chrome等暂不支持SM2国密证书。需要下载专门的国密浏览器才支持SM2国密证书。

图片

      因IE浏览器不兼容国密算法,故字段“签名算法”仅显示国密证书的OID:1.2.156.10197.1.501

图片

【全文结束】

标签:SM2,gmssl,pem,国密,GmSSL,out
From: https://www.cnblogs.com/exmyth/p/18033812

相关文章

  • Java SM2 工具类,依赖bcprov-jdk15on
    老版本bcprov-jdk15on和新版本的有点不一样,新版本的签名后需要DER格式和r|s格式转换,可以和老版本一样<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version></dependency>import......
  • rdf-file:SM2加解密
    一:SM2简介SM2是中国密码学算法标准中的一种非对称加密算法(包括公钥和私钥)。SM2主要用于数字签名、密钥交换和加密解密等密码学。生成秘钥:用于生成一对公钥和私钥。公钥:用于加密数据和验证数字签名。私钥:用于解密数据和生成数字签名。数字签名:用于生成和验证数字签名,可以独立使用。......
  • nginx国密ssl测试
    文章目录文件准备编译部署nginx申请国密数字证书配置证书并测试文件准备下载文件并上传到服务器,这里使用centos7.8本文涉及的程序文件已打包可以直接下载。点击下载下载国密版opensslhttps://www.gmssl.cn/gmssl/index.jsp下载稳定版nginxhttp://nginx.org/en/download.html编......
  • 国密算法SM4的GCM模式加密解密实现
    importorg.bouncycastle.util.encoders.Hex;importjava.util.Arrays;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassSM4Utils{/***默认SECRET_KEY*secretKey必须为16位,可包含字母、数字、标点*/ privatestat......
  • 国密
    国密是指中国的密码学算法标准,全称为“商用密码产业发展与标准化工作组”。国密算法由中国密码技术发展中心(第三研究所)和中国国家商用密码管理办公室组织开发和标准化。国密算法包括对称密码算法、非对称密码算法和密码hash算法。对称密码算法包括SM1、SM2、SM3和SM4;非对称......
  • PHP 国密SM2 私钥公钥计算公式
      在线测试地址1.私钥可查询出公钥;公钥无法计算私钥,注意保护私钥安全;2.分割字符串:PHP函数substr($str,36|76);3.HEX转base64:PHP函数base64_encode(hex2bin());4.base64转HEX:PHP函数bin2hex(base64_decode());5.公钥HEX转PEM证书:字符串'3059301306072a8648ce3d02......
  • 基于Wireshark插件的国密标准检测工具的设计与实现——任务理解与分工
    任务分工:应用和数据部分不可否认性的实现对任务的理解以下是我对任务的理解:任务背景:任务涉及到对用户进行身份验证和签名验证,以确保用户的关键操作行为是合法和安全的。用户1的操作:步骤23:正确给出√×*,这似乎是用户1的关键操作行为的一部分,需要验证其签名的合法性。步骤24......
  • 基于wireshark插件的国密标准检测工具的设计与实现前期安排
    任务理解:  整体任务:写.lua插件,其中创建的协议实现解析抓包数据并完成相关密评标准阶段安排:第一周:理解任务要求,学习相关知识,配置编程环境,分配工作学习笔记https://www.cnblogs.com/dkyzhouyikai/p/17841223.html  第二周:着手实现与检验  第三周:验收成员分工:......
  • 基于wireshark插件的国密标准检测工具的设计与实现
    基于lua语言的wireshark插件开发lua运算符--createanewdissectorlocalNAME="Doip"localPORT=13400localDoip=Proto(NAME,"DoipProtocol")--dissectpacketfunctionDoip.dissector(tvb,pinfo,tree)end--registerthisdissectorDissec......
  • 关于 Angular 构建之后生成的 dist 目录和 esm2020, fesm2015 等等
    在Angular应用中,dist目录是构建应用后的输出目录,其中包含了已编译、打包和优化的应用文件。assets文件夹通常用于存放应用所需的静态资源,如图片、字体、配置文件等。esm2020、fesm2015和fesm2020是Angular构建过程中生成的文件夹,它们主要与Angular的模块加载系统和代码优化有关。......