山东大学软件工程应用与实践——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、 使用合适的编译器
山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略_第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:

山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略_第2张图片

每次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以及中华人民共和国密码行业标准,在以后的编程过程中更加规范化的要求自己。

你可能感兴趣的:(2021SC@SDUSC,windows,密码学,openssl)