OC网络学习08:RSA和SM2的区别?
PEM 和 DER
- PEM
PEM
文件只是 DER
编码数据的 base64
编码版本,为了区分外部DER编码字符串中的数据类型,数据周围存在页眉和页脚。PEM编码文件的示例是:
1 | -----BEGIN PRIVATE KEY----- |
第一行和最后一行表示内部应该预期的DER格式。里面的数据是DER编码信息的base64编码版本。
RSA
RSA
是 非对称密码算法
,是 国际上
通用的 非对称密码算法
SM2
SM2
是 非对称密码算法
,是 我们国家
自己制定的非对称密码算法标准
GmSSL
- 关于 GmSSL
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项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。
大家都知道 OpenSSL
,主要是 提供国际加密算法库
。但是在最新的OpenSSL 1.1.1以上版本,已经对国密算法提供了支持。
OpenSSL、GmSSL
这俩提供的国密算法库,去看了下代码,代码实现是不一样的,属于条条大路通罗马。
标准的HTTPS
和国密HTTPS
区别?
国密SSL能够做到在同一个端口,自适应支持 HTTPS/国密HTTPS
,完美解决从标准HTTPS到国密HTTPS的平滑过渡
解决与系统OpenSSL冲突的问题
GmSSL
是支持国密算法和标准的OpenSSL分支,也就是说GmSSL是在OpenSSL代码基础上添加的国密算法。
因此为了兼容OpenSSL,GmSSL编译后生成的so文件名称与OpenSSL一致,都是 libcrypto.so
。
可能存在的问题:
Linux上很多软件都依赖于系统中的 OpenSSL
库。若你编译安装的 GmSSL
版本,其基于的OpenSSL分支版本,与系统中的OpenSSL版本不一致,便会产生冲突,很容易导致这些软件不可用。
最简单有效的办法:将GmSSL编译为静态库。
GmSSL
命令行工具,以及我们基于该静态库开发的程序,直接内部就集成了 GmSSL
的二进制码,不需要去查找库了,也就不会与系统中 OpenSSL
产生冲突。
在安装GmSSL时,安装到指定的目录下,如/usr/local/gmssl,与系统中OpenSSL路径保持独立。
这样,即 从文件路径和运行
时,两方面保证了 GmSSL
与 OpenSSL
不会冲突,并保持使用上的相互独立性。这的确是最完美的解决办法。
GmSSL源码准备
下载 GmSSL 源码:https://github.com/guanzhi/GmSSL
编译与安装GmSSL
- 解压并进入目录
解压源码:
1 | unzip GmSSL-master.zip |
进入源码目录
1 | mac@bogon ~ % cd /Users/mac/Desktop/gmssl-master |
- 编译选项
配置安装路径,编译为静态库:
1 | mac@bogon ~ % ./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared |
注:
–prefix 表示安装路径;
–openssldir=/usr/local/gmssl 表示openssl 的 configure 文件路径,与系统中 openssl 的路径保持独立,在路径上避免与系统中 openssl 的冲突
no-shared 表示只生成静态库,在运行上避免与系统中 openssl 的冲突
此条命令若出错,可参考这篇文章 ,修改 Configure、test/build.info文件后,即可解决
如下图:
重新输入上面的命令,成功执行:
- 编译并安装(默认编译
x86_64
架构的环境,即模拟器
环境)
- 编译:
1 | mac@bogon gmssl-master % make |
编译成功如下图:
- 安装
1 | mac@bogon gmssl-master % sudo make install |
输入电脑密码即可
安装成功如下图:
生产模拟器下运行的静态库 .a(libssl.a 和 libcrypto.a)
文件,
- 环境变量
打开 ~/.bashrc
文件
1 | mac@bogon gmssl-master % vim ~/.bashrc |
在文件末尾添加内容:
1 | export PATH=$PATH:/usr/local/gmssl/bin |
修改完成后按 esc -> :wq
保存退出
环境变量生效:
1 | mac@bogon gmssl-master % source ~/.bashrc |
- 验证是否安装成功
- GmSSL
1 | mac@bogon gmssl-master % gmssl version -a |
- OpenSSL
1 | mac@bogon gmssl-master % openssl version -a |
编译ARM64的静态库文件
- 清理
1 | mac@bogon ~ % cd /Users/mac/Desktop/gmssl-master |
- 按顺序终端执行
1 | mac@bogon gmssl-master % export CC=clang |
编译armv7下的静态库文件
1 | mac@bogon gmssl-master % export CC=clang |
其他命令
- 查看所有支持编译的环境:
1 | ./configure |
- 合并静态库文件,使其支持真机和模拟器
1 | lipo -create 模拟器.a文件路径 真机.a文件路径 -output 合成的.a文件路径 |
- 查看静态库文件支持的编辑环境
1 | lipo -info .a文件路径 |
使用
- 将
.a静态库文件
和include头文件
引入到项目中
- Post title:OC网络学习08:RSA和SM2的区别?
- Post author:张建
- Create time:2023-05-19 13:04:42
- Post link:https://redefine.ohevan.com/2023/05/19/OC网络/OC网络学习08:RSA和SM2的区别?/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.