OpenSSL和GmSSL在Windows下编译过程
perl Configure -DDEBUG -D_DEBUG -DOPENSSL_DEBUG_KEYGEN -DSSL_DEBUG -DALG_DEBUG -DCIPHER_DEBUG -DTLS_DEBUG -DKSSL_DEBUG debug-VC-WIN64A no-asm
--prefix=C:\MyProgramFiles\OpenSSLv1.0.2h --openssldir=C:\MyProgramFiles\OpenSSLv1.0.2h\SSL
7,执行nmake
Windows 10 x64 专业版 编译与测试【调试】Openssl【OpenSSL_1_0_2h】之 TLS
自建证书:https://blog.csdn.net/ljttianqin/article/details/73016014
查看程序或动态库所依赖的动态库 dumpbin /dependents abc.exe 查看动态库的输出函数 dumpbin /exports abc.dll 另一款查看动态库依赖的小工具depends,官网http://www.dependencywalker.com/
#下载第三方的最新的PEM(privacy-enhanced mail)格式的可信证书库
[root@localhost ~]# wget --no-check-certificate https://curl.haxx.se/ca/cacert.pem
gmssl s_client -CAfile cacert.pem -connect sm2test.ovssl.cn:443 -debug -showcerts -msg
openssl s_client -CAfile /root/cacert.pem -connect www.baidu.com:443 -msg
返回响应后,输入:
GET / HTTP/1.1
支持协议测试: openssl s_client -CAfile /root/cacert.pem -connect www.baidu.com:443 -tls1_2 openssl s_client -CAfile /root/cacert.pem -connect www.baidu.com:443 -tls1_1 查看协议 openssl ciphers -v openssl s_client -CAfile /root/cacert.pem -connect www.baidu.com:443 -cipher ECDHE-ECDSA-AES128-SHA256 测试会话复用: openssl s_client -CAfile /root/cacert.pem -connect www.baidu.com:443 -reconnect 2>/dev/null |grep -i 'new\|reused' 如果支持复用,第二次链接就不是 New, 而是 reused 。不支持的复用的话,每次再连接都是 New。 测试OCSP stapling [root@localhost ~]# openssl s_client -CAfile /root/cacert.pem -connect www.baidu.com:443 -status
服务端自测:
证书产生 ~/mykey
gmssl ecparam -genkey -name sm2p256v1 -text -out zhibin.key gmssl req -new -key zhibin.key -out zhibin.req gmssl x509 -req -days 36500 -in zhibin.req -signkey zhibin.key -out zhibin_cert.pem -extfile certext.ext gmssl x509 -text -in zhibin_cert.pem gmssl s_server -key zhibin.key -cert zhibin_cert.pem -accept 443 -www
ECDHE-SM4-SM3 套件,top1.1协议 下的双向验证测试方法。 ./openssl s_client -connect 127.0.0.1:443 -cert cert/sm2/sm21.cer -key cert/sm2/sm21.key -CAfile cert/sm2/sm2root.cer -dcert cert/sm2/sm22.cer -dkey cert/sm2/sm22.key -cipher ECDHE-SM4-SM3 -top1.1 ./openssl s_server -cert cert/sm2/sm22.cer -key cert/sm2/sm22.key -dcert cert/sm2/sm21.cer -dkey cert/sm2/sm21.key -Verify 1 -CAfile cert/sm2/sm2root.cer -port 443 -cipher ECDHE-SM4-SM3 -top1.1
本次实现的系统为 Linux环境,在Windows下的 gmssl 安装应该也差不多,所以环境影响不大。
(openssl.cnf默认配置在C:\Program Files\Common Files\SSL/openssl.cnf,设置ca库的主目录:dir = ./ # Where everything is kept。这个当前目录指运行gmssl的目录。
下面的执行都在 demoCA目录下。
用参数 -config ../ssl/openssl.cnf 重新指定配置位置。
创建过程中需要进行交互式填写信息:()
1). 国家:CN 两位国家代码(可以在openssl.cnf设置默认值)
2). 省份:beijing
3). 市: beijing
4). 公司:Client.Co
5). 部门:RD
6). 名字:www.client.com #非常重要,一定要有一致。
7). 联系:[email protected] #测试使用
8). 密码:#将申请文件加密
#################################################################### [ ca ] default_ca = CA_default /*The default ca section*/ #################################################################### [ CA_default ] dir = /home/lt/demoCA /* Where everything is kept */ /* #### 这是第一个openssl目录结构中的目录 */ certs = $dir/certs /* Where the issued certs are kept(已颁发的证书路径,即CA或自签的) */ /* #### 这是第二个openssl目录结构中的目录,但非必须 */ crl_dir = $dir/crl /* Where the issued crl are kept(已颁发的crl存放目录) */ /* #### 这是第三个openssl目录结构中的目录*/ database = $dir/index.txt /* database index file */ #unique_subject = no /* 设置为yes则database文件中的subject列不能出现重复值 */ /* 即不能为subject相同的证书或证书请求签名*/ /* 建议设置为no,但为了保持老版本的兼容性默认是yes */ new_certs_dir = $dir/newcerts /* default place for new certs(将来颁发的证书存放路径) */ /* #### 这是第四个openssl目录结构中的目录 */ certificate = $dir/cacert.pem /* The A certificate(CA自己的证书文件) */ serial = $dir/serial /* The current serial number(提供序列号的文件)*/ crlnumber = $dir/crlnumber /* the current crl number(当前crl序列号) */ crl = $dir/crl.pem /* The current CRL(当前CRL) */ private_key = $dir/private/cakey.pem /* The private key(签名时需要的私钥,即CA自己的私钥) */ RANDFILE = $dir/private/.rand /* private random number file(提供随机数种子的文件) */ x509_extensions = usr_cert /* The extentions to add to the cert(添加到证书中的扩展项) */ /* 以下两行是关于证书展示格式的,虽非必须项,但推荐设置。一般就如下格式不用修改 */ name_opt = ca_default /* Subject Name options*/ cert_opt = ca_default /* Certificate field options */ /* 以下是copy_extensions扩展项,需谨慎使用 */ # copy_extensions = copy /* 生成证书时扩展项的copy行为,可设置为none/copy/copyall */ /* 不设置该name时默认为none */ /* 建议简单使用时设置为none或不设置,且强烈建议不要设置为copyall */ # crl_extensions = crl_ext default_days = 365 /* how long to certify for(默认的证书有效期) */ default_crl_days= 30 /* how long before next CRL(CRL的有效期) */ default_md = default /* use public key default MD(默认摘要算法) */ preserve = no /* keep passed DN ordering(Distinguished Name顺序,一般设置为no */ /* 设置为yes仅为了和老版本的IE兼容)*/ policy = policy_match /* 证书匹配策略,此处表示引用[ policy_match ]的策略 */ /* 证书匹配策略定义了证书请求的DN字段(field)被CA签署时和CA证书的匹配规则 */ /* 对于CA证书请求,这些匹配规则必须要和父CA完全相同 */ [ policy_match ] countryName = match /* match表示请求中填写的该字段信息要和CA证书中的匹配 */ stateOrProvinceName = match organizationName = match organizationalUnitName = optional /* optional表示该字段信息可提供可不提供 */ commonName = supplied /* supplied表示该字段信息必须提供 */ emailAddress = optional /* For the 'anything' policy*/ /* At this point in time, you must list all acceptable 'object' types. */ /* 以下是没被引用的策略扩展,只要是没被引用的都是被忽略的 */ [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional /* 以下是添加的扩展项usr_cert的内容*/ [ usr_cert ] basicConstraints=CA:FALSE /* 基本约束,CA:FALSE表示该证书不能作为CA证书,即不能给其他人颁发证书*/ /* keyUsage = critical,keyCertSign,cRLSign # 指定证书的目的,也就是限制证书的用法*/ /* 除了上面两个扩展项可能会修改下,其余的扩展项别管了,如下面的 */ nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer ####################################################################
)
1.根CA的生成
系统建立CA时,需要先在离线状态下建立一个根CA。根CA所需要的文件夹有certs(证书文件夹)、crl(吊销数据文件夹)、newcerts(新生成的证书文件夹)、private(私有数据文件夹)。同时还需要在本地生成数据记录文件index.txt, index.txt.attr,用以记录对证书的操作,需要初始化设定序列号。
执行的初始化操作如下:
mkdir certs clr newcerts private
touch index.txt
touch index.txt.attr
echo “01” > serial
随后,便可以生成根 CA 的 sm2 公私钥对,使用命令如下,生成的密钥文件为 root-cakey.pem
gmssl ecparam -genkey -name sm2p256v1 -text -out private/root-cakey.pem -config ../ssl/openssl.cnf #生成私钥
然后,生成根 CA 的证书请求。使用的算法为 sm3 签名算法,生成的证书请求为 root-cacsr.pem.
gmssl req -new -sm3 -key private/root-cakey.pem -out root-cacsr.pem #生成证书请求 cert sign request。
最后让根 CA 对自己的证书请求进行自签名生成证书文件,生成的证书有效期为365天,证书文件名称为 root-cacert.pem。
gmssl req -x509 -sm3 -days 365 -key private/root-cakey.pem -out root-cacert.pem #生成自签名证书文件。
生成的根CA证书信息如下,我们可以看到该证书的公私钥为SM2算法生成,对证书的签名算法采用SM3。证书的发布者和证书主体信息一致,说明该证书是由自签名生成。
gmssl x509 -text -noout -in root-cacert.pem
到此,根CA建立完成,可为二级CA的证书进行签发。
2. 二级 CA 的生成
二级CA生成SM2公私钥的命令为,使用的算法为sm2。生成的密钥文件为sub-cakey.pem。
gmssl ecparam -genkey -name sm2p256v1 -out private/sub-cakey.pem
生成证书请求的命令为,使用的签名算法为sm3。生成的证书请求为sub-cacsr.pem。
gmssl req -new -sm3 -key private/sub-cakey.pem -out sub-cacsr.pem (-batch 会按照openssl.cnf的隐含值填入。小心和自己输入的不一致。)
根CA生成二级CA证书命令如下,使用sm3算法。生成的二级CA证书名称为sub-cacert.pem。
gmssl ca -md sm3 -extensions v3_ca -in sub-cacsr.pem -out newcerts/sub-cacert.pem -days 365 -cert root-cacert.pem -keyfile ./private/root-cakey.pem #生成由root ca签名的二级证书。
生成的二级CA证书如下图所示,可以看到证书的发布者信息与根CA信息一致,说明该证书由根CA签发。同时该证书主体信息与我们管理界面输入的信息一致。
自此,一个二级CA的初始化已经完成。
3.用户证书的签发
用户私钥对生成:
gmssl ecparam -genkey -name sm2p256v1 -out thirdkey.pem
用户证书请求生成:
gmssl req -new -sm3 -key thirdkey.pem -out thirdcsr.pem
随后二级CA签发用户证书请求:
gmssl ca -md sm3 -extensions v3_ca -in thirdcsr.pem -out thirdcert.pem -days 365 -cert newcerts/sub-cacert.pem -keyfile private/sub-cakey.pem
生成的用户证书如下:
4. 证书吊销
吊销用户证书如下,所示:
openssl ca -keyfile ./private/sub-cakey.pem -cert ./sub-cacert.pem -revoke thirdcert.pem
吊销之后的index.txt的内容变化如下图所示,可以看到证书的状态从已经验证状态“V”转换到已经吊销状态“R”。
5,验证:
openssl verify -CAfile ca.crt server.crt
1.https://github.com/guanzhi/GmSSL下载源码,解压后到源码目录下执行以下命令: ./config make make install //必须安装,否则后续执行gmssl会因为打开openssl.cnf出错。gmssl内部处理问题 2.证书生成准备: cd apps/demoCA/ mkdir certs crl newcerts private touch index.txt echo "01" > serial 3.生成根证书: gmssl ecparam -genkey -name sm2p256v1 -text -out Root.key #生成私钥 gmssl req -new -key Root.key -out Root.req #证书请求 gmssl x509 -req -days 3650 -sm3 -in Root.req -signkey Root.key -out RootCA.crt #生成根证书 4.生成服务端证书 gmssl ecparam -genkey -name sm2p256v1 -text -out Server.key #生成私钥 gmssl req -new -key Server.key -out Server.req #证书请求 gmssl x509 -req -sm3 -days 3650 -CA RootCA.crt -CAkey Root.key -CAcreateserial -in Server.req -out ServerCA.crt #签发证书 mssl verify -CAfile RootCA.crt ServerCA.crt #证书验证 gmssl x509 -in ServerCA.crt -text -noout #查看证书 5.生成客户端证书 gmssl ecparam -genkey -name sm2p256v1 -text -out Client.key #生成私钥 gmssl req -new -key Client.key -out Client.req #证书请求 gmssl x509 -req -sm3 -days 3650 -CA RootCA.crt -CAkey Root.key -CAcreateserial -in Client.req -out ClientCA.crt #签发证书 gmssl verify -CAfile RootCA.crt ClientCA.crt #证书验证 gmssl x509 -in ClientCA.crt -text -noout #查看证书 6.客户端/服务端通信验证 gmssl s_server -accept *:443 -key Server.key -cert ServerCA.crt -dkey Server.key -dcert ServerCA.crt -CAfile RootCA.crt -msg -debug -gmtls #服务端
-servername 双证书:这个其实是有漏洞的,必须先设置签名证书。。然后才是加密证书
gmssl s_client -connect localhost:443 -key Client.key -cert ClientCA.crt -CAfile RootCA.crt -msg -debug -gmtls#客户端
测试不通。参见:https://blog.csdn.net/tmaccs/article/details/103293957
1. error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:ssl/statem/statem_srvr.c:1502: 2. 140616840058688:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1385:SSL alert number 40 --- no peer certificate available --- No client certificate CA names sent ———————————————— 版权声明:本文为CSDN博主「敬致知」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/tmaccs/article/details/103293957
下面是官方示例成功,socket通信:
gmssl s_server -port 443 -cipher SM2 -key Server.key -cert ServerCA.crt -www (ECDHE-SM2-WITH-SMS4-GCM-SM3)
gmssl s_client -connect localhost:443 -CAfile ClientCA.crt
注:由于使用gmtls时,gmssl内部要求服务指定双证书(签名证书和加密证书),此处使用同一个证书ServerCA.crt
————————————————
gmssl对国标支持
gmssl ciphers -V |grep GMTLS
0xE0,0x17 - SM9-WITH-SMS4-SM3 GMTLSv1.1 Kx=SM9 Au=SM9 Enc=SMS4(128) Mac=SM3
0xE0,0x15 - SM9DHE-WITH-SMS4-SM3 GMTLSv1.1 Kx=SM9DHE Au=SM9 Enc=SMS4(128) Mac=SM3
0xE0,0x13 - SM2-WITH-SMS4-SM3 GMTLSv1.1 Kx=SM2 Au=SM2 Enc=SMS4(128) Mac=SM3
0xE0,0x11 - SM2DHE-WITH-SMS4-SM3 GMTLSv1.1 Kx=SM2DHE Au=SM2 Enc=SMS4(128) Mac=SM3
0xE0,0x1A - RSA-WITH-SMS4-SHA1 GMTLSv1.1 Kx=RSA Au=RSA Enc=SMS4(128) Mac=SHA1
0xE0,0x19 - RSA-WITH-SMS4-SM3 GMTLSv1.1 Kx=RSA Au=RSA Enc=SMS4(128) Mac=SM3
OpenSSL命令---s_client
用途:
s_client为一个SSL/TLS客户端程序,与s_server对应,它不仅能与s_server进行通信,也能与任何使用ssl协议的其他服务程序进行通信。
用法:
openssl s_client [-host host] [-port port] [-connect host:port] [-verify depth] [-cert filename]
[-certform DER|PEM] [-key filename] [-keyform DER|PEM] [-pass arg] [-CApath directory] [-CAfile filename]
[-reconnect][-pause] [-showcerts] [-debug] [-msg] [-state] [-nbio_test] [-nbio][-crlf] [-ign_eof] [-no_ign_eof]
[-quiet] [-ssl2] [-ssl3] [-tls1_1] [-tls1_2] [-tls1] [-dtls1] [-no_ssl2][-no_ssl3] [-no_tls1] [-no_tls1_1]
[-no_tls1_2] [-bugs] [-cipher cipherlist] [-starttls protocol] [-engine id] [-tlsextdebug] [-no_ticket]
[-sess_out filename] [-sess_in filename] [-rand file(s)]
选项说明:
-host host:设置服务地址。
-port port:设置服务端口,默认为4433。
-connect host:port:设置服务器地址和端口号。如果没有设置,则默认为本地主机以及端口号4433。
-verify depth:设置证书的验证深度。记得CA也是分层次的吧?如果对方的证书的签名CA不是Root CA,那么你可以再去验证给该CA的证书签名的CA,一直到Root CA. 目前的验证操作即使这条CA链上的某一个证书验证有问题也不会影响对更深层的CA的身份的验证。所以整个CA链上的问题都可以检查出来。当然CA的验证出问题并不会直接造成连接马上断开,好的应用程序可以让你根据验证结果决定下一步怎么走。
-cert filename:使用的证书文件。如果server不要求要证书,这个可以省略。
-certform DER|PEM:证书的格式,一般为DER和PEM。默认为PEM格式。
-key filename:使用的证书私钥文件。
-keyform DER|PEM:证书私钥文件的格式,一般为DER和PEM。默认为PEM格式。
-pass arg:私钥保护口令来源,比如:-pass file:pwd.txt,将私钥保护口令存放在一个文件中,通过此选项来指定,不需要用户来输入口令。
-CApath directory:设置信任CA文件所在路径,此路径中的ca文件名采用特殊的形式:xxx.0,其中xxx为CA证书持有者的哈希值,它通过x509 -hash命令获得。
-CAfile filename:某文件,里面是所有你信任的CA的证书的内容。当你要建立client的证书链的时候也需要用到这个文件。
-reconnect:使用同样的session-id连接同一个server五次,用来测试server的session缓冲功能是否有问题。
-pause:每当读写数据时,sleep 1秒。
-showcerts:显示整条server的证书的CA的证书链。否则只显示server的证书。
-debug:打印所有的调试信息。
-msg:用16进制显示所有的协议数据。
-state:打印SSL session的状态, ssl也是一个协议,当然有状态。
-nbio_test:检查非阻塞socket的I/O运行情况。
-nbio:使用非阻塞socket。
-crlf:把在终端输入的换行回车转化成/r/n送出去。
-ign_eof:当输入文件到达文件尾的时候并不断开连接。
-no_ign_eof:当输入文件到达文件尾的时候断开连接。
-quiet:不打印出session和证书的信息。同时会打开-ign_eof这个选项。
-ssl2、-ssl3、-tls1_1、-tls1_2、-tls1、-dtls1、-no_ssl2、-no_ssl3、-no_tls1、-no_tls1_1、-no_tls1_2:使用的协议状态值。
-bugs:兼容老版本服务端的中的bug。
-cipher cipherlist:由我们自己来决定选用什么加密算法,尽管是由server来决定使用什么算法列表,但它一般都会采用我们送过去的cipher列表里的第一个cipher。
-starttls protocol:protocol可以为smtp或pop3,用于邮件安全传输。
-engine id:硬件引擎。
-tlsextdebug:打印TLS协议中服务器端接收到的额外信息值。
-no_ticket:不支持RFC4507bis会话类型。
-sess_out filename:输出SSL会话信息值到filename中。
-sess_in filename:从filename中获取SSL Session值。
-rand file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS用“,“,其他系统用“:”。
连接选项:
如果一个确认的连接到SSL服务器,并显示了从服务器端接收到了的数据,任何操作都被发送到服务器。当交互(这意味着没有给出B<-quiet> 、B<-ign_eof>这两个选项)的时候,如果命令行B或到达了文件的结尾,连接将会被断开。
注意:
S_client可用于调试SSL服务器端。为了连接一个SSL HTTP服务器,命令如下:
openssl s_client -connect servername:443
一旦和某个SSL server建立连接之后,所有从server得到的数据都会被打印出来,所有你在终端上输入的东西也会被送给server. 这是人机交互式的。这时候不能设置-quiet和 -ign_eof这俩个选项。如果输入的某行开头字母是R,那么在这里session会重启, 如果输入的某行开头是Q,那么连接会被断开。你完成整个输入之后连接也会被断开。
如果连接成功,你可以用HTTP的指令,比如"GET /"什么的去获得网页了。
如果握手失败,原因可能有以下几种:
1. server需要验证你的证书,但你没有证书。
2. 如果肯定不是原因1,那么就慢慢一个一个set以下几个选项:-bugs, -ssl2, -ssl3, -tls1,-no_ssl2,-no_ssl3, -no_dtls。
3. 这可能是因为对方的server处理SSL有bug。
有的时候,client会报错:没有证书可以使用,或者供选择的证书列表是空的。这一般是因为Server没有把给你签名的CA的名字列进它自己认为可以信任的CA列表,你可以用检查一下server的信任CA列表。有的http server只在 client给出了一个URL之后才验证client的证书,这中情况下要设置 -prexit这个选项,并且送给server一个页面请求。
即使使用-cert指明使用的证书,如果server不要求验证client的证书,那么该证书也不会被验证。所以不要以为在命令行里加了-cert 的参数又连接成功就代表你的证书没有问题。
如果验证server的证书有问题,就可以设置-showcerts来看看server的证书的CA链了。
自从SSLv23客户端hello不能够包含压缩方法或扩展仅仅会被支持。
BUGs:
因为该项目有很多选项,好多用的是老的技术,c代码的s_client很难去读取为什么会被关闭。一个典型的SSL客户端项目将会更加简单的。
如果服务器验证失败,B<-verify>将会退出。
B<-prexit>选项是一个很小的空间。当一个session重启后,我们必须报告。
————————————————
版权声明:本文为CSDN博主「卢队长」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/as3luyuan123/article/details/16812071
OpenSSL 1.1.1 国密SM2 SM3 SM4 SM9 ZUC EEA3 EIA3 SM2 +SM3签名 源码 Demo 下载 OpenSSL iOS端库下载
最近因为需要研究国密,所以寻找加密库,demo就很重要了,这里记录下。
直接进入正文,附上OpenSSL GitHub官网的下载地址,最新的已经支持国密了。
https://github.com/openssl/openssl
进入GitHub 下载OpenSSL demo,你会发现移动端 安卓,iOS的库呢?What F ?
网上找了很多,最新的基本没有。基本需要自己编译OpenSSL,这个过程很痛苦,你可以试试!
最后我用了一个大神的脚本,胜利解决打包成libcrypto.a libssl.a 文件,支持armv7,arm64,armv7s,i386,x86_64,附上大神GitHub链接
https://github.com/x2on/OpenSSL-for-iPhone
这里还有个插曲,以前用过支付宝里的OpenSSL,来进行RSA签名,验证签名,加解密。最近下了SDK发现最新的阿里支付SDK没找到SM2文件。于是又断了一条路。(其实OpenSSL提供一些编译指令,可以摒弃一些无用的算法,比如no sm2.这样减少libssl,libcrypto包大小)
库有了,查看SM2,SM3,SM4 加密OpenSSL的代码,发现很好很强大
/*
SM2 signature generation. Assumes input is an SM3 digest
*/
int SM2_sign(int type, const unsigned char *dgst, int dgstlen,
unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
/*
*SM2 signature verification. Assumes input is an SM3 digest
*/
int SM2_verify(int type, const unsigned char *dgst, int dgstlen,
const unsigned char *sig, int siglen, EC_KEY *eckey);
int SM2_encrypt(const EC_KEY *key,
const EVP_MD *digest,
const uint8_t *msg,
size_t msg_len,
uint8_t *ciphertext_buf, size_t *ciphertext_len);
int SM2_decrypt(const EC_KEY *key,
const EVP_MD *digest,
const uint8_t *ciphertext,
size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len);
每个参数没有备注,就问你怕不怕。API的话,你可以去
https://www.feistyduck.com/library/openssl-cookbook/
没账号的话,需要注册登录。注册腾讯邮箱可以,新浪邮箱半天都没收到确认链接。然后可以下载,或者在线查看相关英文Api。然后呢发现没有SM2 Api的(可能我方法有误,你可以找找,目前还在摸着石头过河中)。
OpenSS库,说完了。说说SM2,SM3,SM4 加解密。网上代码层出不穷,可是能用的没有几个。好不容易能用了,然后各种加密解密不成功,或者签名,验证签名失败。只能自己慢慢摸索了,好不容易搞通了加解密,签名和验证签名。这里附上demo的链接。
iOS demo SM2,SM4 加密算法,SM2+SM3签名
https://download.csdn.net/download/asia_zhangqq/10835061
OpenSSl 支持国密 1.1.1版本 iOS打包最新版本,支持armv7,arm64,armv7s,i386,x86_64
https://download.csdn.net/download/asia_zhangqq/10835116
最后奉上最新研究国密大招,包含SM2加解密,SM2+SM3 签名,验证签名,SM4加解密,ZUC包括EEA3 EIA3加密。同时兼容armv7,arm64,armv7s,i386,x86_64架构。以下链接是demo地址。
https://download.csdn.net/download/asia_zhangqq/10922992
奉上最新的SM9算法。代码是基于GMSSL的国密SM9算法。包括签名,密钥交换,加密,解密。demo直接运行就可以,有相关测试数据。
https://download.csdn.net/download/asia_zhangqq/10925337
看到这里你可能纳闷,OpenSSL的SM9国密算法呢,不好意思还没有。所以采用GMSSL的SM9来代替。但是这个库编译armv7,arm64,armv7s,i386,x86_64架构也有一序列问题。
这里是官网http://gmssl.org。一直维护更新在。
然后issue的话你可以看GMSSL的git官网问题,目前遇到卡住问题就在issue里的。
https://github.com/guanzhi/GmSSL这是GMSSL的github链接
————————————————
版权声明:本文为CSDN博主「Asia_ZhangQQ」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Asia_ZhangQQ/article/details/84876111
Yes, I mean a .gn file. Which .gn file depends on what you're adding and who needs to call it.