山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略
2021SC@SDUSC
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项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。
来源:http://gmssl.org
GMSSL开源代码:https://github.com/guanzhi/GmSSL
准备工作
1、 新版本visual studio,我这里使用的是vs2019
2、 安装ActivePerl
64位ActivePerl-5.26下载地址:https://www.jb51.net/softs/27286.html#downintro2 进行安装,安装类型选择“Typical”,其他默认,最后一步安装时间较长。
安装完成后在cmd中输入perl -v来查看版本号,以确认安装成功。
3、安装NASM
nasm-2.15.05下载地址:https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/
以管理员身份运行nasm-2.15.05-installer-x64.exe,进行默认安装即可。
并将NASM安装目录添加至Windows系统环境变量Path中。
开始进行编译工作
可参考GMSSL官网安装方式:http://gmssl.org/docs/install.html
由于版本问题,老版GmSSL-master\crypto\evp文件夹中的names2.c文件中的函数声明被删掉了,需要在文件末尾补充上。
static void cipher_name_len(const EVP_CIPHER *cipher, const char *from,const char *to, void *x)
{*((int *)x) += strlen(EVP_CIPHER_name(cipher));
}static void cipher_name(const EVP_CIPHER *cipher, const char *from,const char *to, void *x)
{strcat((char *)x, EVP_CIPHER_name(cipher));
}char *EVP_get_ciphernames(int aliases)
{char *ret = NULL;int len = 0;EVP_CIPHER_do_all_sorted(cipher_name_len, &len);ret = OPENSSL_zalloc(len);if (!ret) {return NULL;}EVP_CIPHER_do_all_sorted(cipher_name, ret);return ret;
}char *EVP_get_digestnames(int aliases)
{return "sm3:sha1:sha256";
}
这个是任何平台Windows/ linux都需要增加的一段代码,无脑添加即可,否则编译的时候会出现下面的错误。
若不慎忘记添加代码出现了这个错误,一定要记得执行 nmake clean命令清楚之前编译过的文件。
1、 使用合适的编译器
在开始菜单找到已经安装好的vs2019的文件夹,找到图示的几个编译器。
官网使用的是Developer,csdn上使用的是x64 Native,就很懵,不知道用哪个也不知道有什么不一样。我一开始用的是x64,后面讨论我出现的问题。
2、用管理员模式打开x64,命令行:
cd/d +GMSSL-master文件夹的位置
例:cd/d D:\网安\密码\gmssl\GmSSL-master
进入GMSSL源码目录
3、若想编译32位,perl Configure VC-WIN32;若想编译64位,则输入perl Configure VC-WIN64A
perl Configure VC-WIN32
perl Configure VC-WIN64A
(注意这里该大写的一定要大写,之前就因为不注意输入了vc-win64a一直报错……)
4、 nmake生成Makefile文件,该过程会持续一段时间。
nmake
5、 nmake test进行编译检测。
nmake test
6、 nmake install进行安装。
nmake install
默认安装到C:\Program Files (x86)\GmSSL,把文件中的bin文件夹添加至系统环境变量中去,就可以使用gmssl命令了。
最后如果安装成功,打开cmd输入gmssl version来查看当前版本。
报错
虐我千万遍的fatal error:
每次perl configure之后进行nmake的时候,总是出现这个fatal error,在网上百度谷歌之后,类似的fatal error U1077倒是见过了不少,就是没有我遇到的情况。我重新安装了以上所有软件,甚至把源码删掉重新在GitHub上面又下载了一遍之后都没有改善,依旧是fatal error。
问过老师之后知道GMssl在Windows系统上编译过程中非常可能在汇编的环节出现问题,fatal error所显示的问题确实也在所下载的NASM汇编软件上面。经过百度perl configure的具体作用之后,因为之前一直使用的是perl Configure VC-WIN64A,故想到是不是格式出现了错误,然后就nmake clean之后重新perl Configure VC-WIN32了一遍,nmake之后果然顺畅的编译中。但不一会儿就又出现了新的错误:
fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突。(或者x86、x64反过来)
虽然库的位数与电脑不匹配,但是至少消除了之前的fatal error U1077。我准备使用最笨的方法,上面画出的三种VC的编译器,在每一个编译器上面都执行一遍perl Configure VC-WIN64A和perl Configure VC-WIN32(每次执行失败之后都要记得nmake clean一次)。果然在官网所使用的Developer command中成功编译了Gmssl库。
中间也多多少少遇到了一些小问题,都可以通过百度解决,其他常见的报错可参见其他csdn或其他论坛上的讨论。
至此GMSSL的编译工作就算完成了。
如有错误,欢迎批评指正!
下一步工作
通过指导老师的讲解与相关资料的搜索,国密算法中的sm2和sm9算法是GMSSL的最核心的算法之二。小组分工过后,接下来我主要以针对基于身份验证的sm9算法为核心进行详细分析,同时包括对openssl不支持的一些国密算法以及新型的密码算法进行代码分析,学习SSL/TLS等相关密码协议,在分析代码的过程中体会开发者的GMSSL coding style以及中华人民共和国密码行业标准,在以后的编程过程中更加规范化的要求自己。
山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略相关推荐
- 山东大学软件工程应用与实践——GMSSL开源库(四)——SM9数字签名算法及验证的源代码分析
2021SC@SDUSC 目录 一.引言 二.密钥的生成数字签名与签名验证相关代码 1.判定函数 2.签名的初始化函数 3.签名执行函数 4.真正的签名函数 5.签名验证初始化函数 6.签名验证执行函 ...
- 山东大学软件工程应用与实践——Pig代码综述
2021SC@SDUSC 目录 一.Pig是什么? 二.Pig的特点 三.Pig安装部署 四.组内分工 一.Pig是什么? Pig 是Apache平台下的一个免费开源项目,是MapReduce的一个抽 ...
- 软件测试保姆级攻略(第一期 软件的结构组成和网络基础)
目录 前言 一.软件的组成结构 1.1 软件的定义 1.2常见软件的表达形式(可执行程序,app,网页) 1.3应用程序的架构模式(C/S,B/S) 1.4 软件的组成 1.4.1前后端的交互模式(以 ...
- 山东大学软件工程应用与实践——GMSSL开源库(九)——SM9密钥封装与公钥加密的源代码分析
2021SC@SDUSC 文章目录 int SM9_wrap_key(密钥的封装) int SM9_unwrap_key(密钥的解封) int SM9_encrypt(公钥加密算法) int SM9_ ...
- 山东大学软件工程应用与实践——GMSSL开源库(十)——重要的大整数
2021SC@SDUSC 文章标题 BIGNUM的结构 大整数的加减法(绝对值加减) 绝对值加减 带符号加减 大整数的乘法 经典乘法 递归和comba乘法 小结 无论是SM2.SM9等国密算法还是以R ...
- 山东大学软件工程应用与实践——GMSSL开源库(二)——浅尝SM9
2021SC@SDUSC 概述 为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家.RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Crypt ...
- <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)
2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...
- <2021SC@SDUSC>博客(9)山东大学软件工程应用与实践Jpress代码分析(8)
2021SC@SDUSC Lucene和ElasticSearch 在上一篇博客中提到的Elasticsearch是一个基于Lucene搜索引擎为核心构建的开源,分布式,RESTful搜索服务器.这里 ...
- 山东大学软件工程应用与实践——WeaselTSF(一)
2021SC@SDUSC 文章目录 简单介绍 WeaselTSF.h 从本篇博客开始分析WeaselTFS这个包中的代码. 简单介绍 WeaselTSF.vcproj This is the main ...
最新文章
- 量子计算时代更近了,未来可解决大规模计算的科学难题
- 浅谈对腾讯云微信小程序解决方案服务端的理解(主要针对信道服务)
- 为了释放AI在边缘计算的力量 英特尔又出手了
- 华为 招聘 状态 查看_英特尔放弃5G芯片研发:三星受益;爱立信2019年Q1净利润约2.51亿美元;华为也将要与高通和解;天津首个5G电话成功打通...
- ajax解析json中的对象数组对象,在JQuery中检索json数组后获取json对象Ajax
- InfoPath: Passing Command Line parameters to a new form
- 杂志社的电子邮件地址
- [和秋叶一起学ppt]四步教你变身高富帅ppt(笔记)
- django慢学日常
- 202104-2 邻域均值
- 什么是客户关系管理CRM?
- 需求分析和数据分析那些事。
- 【uniapp】 读取手机通讯录权限
- Zuul网关的快速使用
- 酒仙网将上市:营销促营收增长,深陷纠纷案,部分股权被法院冻结
- openstreetmap-tile-server-ubuntu-16-04
- 全国 41611 个景点,用 Python 告诉你哪些地方最值得一游!
- CMake Error at D:/opencv/opencv-3.4.6/sources/cmake/OpenCVModule.cmake:36,,,OpenCV has already loade
- 如何引流购物粉?如何引流网购粉?怎么吸购物粉?
- 高德地图API——信息窗体InfoWindow