首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

在Windows下安装GmSSL

  • 23-09-19 13:43
  • 4309
  • 5882
blog.csdn.net

本文属于《GmSSL国密加密算法库使用系列教程》之一,欢迎查看其它文章。

在Windows下安装GmSSL

  • 一、关于GmSSL
  • 二、编译工具准备
    • 1、安装VS2017
    • 2、安装ActivePerl
    • 3、安装NASM
  • 三、GmSSL源码准备
  • 四、编译与安装GmSSL
    • 1、进入GmSSL源码目录
    • 2、配置编译生成64位的库
    • 3、编译
    • 4、安装
    • 5、配置环境变量
  • 五、解决编译报错

一、关于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项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。

以上内容摘抄自GmSSL官网:http://iyenn.com/index/link?url=http://gmssl.org/

大家都知道OpenSSL,主要是提供国际加密算法库。但是在最新的OpenSSL 1.1.1以上版本,已经对国密算法提供了支持。

OpenSSL、GmSSL这俩提供的国密算法库,去看了下代码,代码实现是不一样的,属于条条大路通罗马。

二、编译工具准备

1、安装VS2017

按照此文进行安装,《Visual Studio Community 2017安装步骤(只装C++)》。

主要使用它的编译器,若已安装,则跳过。

2、安装ActivePerl

64位ActivePerl-5.26下载地址:https://www.jb51.net/softs/27286.html#downintro2

进行安装,安装类型选择“Typical”,其他默认,最后一步安装时间较长。

在这里插入图片描述

在cmd中,输入命令查看perl版本号。

perl -v
  • 1

在这里插入图片描述

表明安装成功。

3、安装NASM

nasm-2.15.05下载地址:http://iyenn.com/index/link?url=https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/

在这里插入图片描述

以管理员身份运行nasm-2.15.05-installer-x64.exe,进行默认安装即可。

并将NASM安装目录添加至Windows系统环境变量Path中。

在这里插入图片描述

三、GmSSL源码准备

下载GmSSL源码:http://iyenn.com/index/link?url=https://github.com/guanzhi/GmSSL

在这里插入图片描述

四、编译与安装GmSSL

以管理员权限,打开VS Tools中“适用于VS 2017 的x64 本机工具命令提示”。

在这里插入图片描述

1、进入GmSSL源码目录

cd /d D:GmSSL-masterGmSSL-master
  • 1

2、配置编译生成64位的库

若需生成32位,则“perl Configure VC-WIN32”。

perl Configure VC-WIN64A
  • 1

3、编译

nmake
  • 1

若报错,参考第五节解决编译报错。
直到编译成功后继续。

4、安装

nmake install
  • 1

若前面不是以管理员权限运行,“适用于VS 2017 的x64 本机工具命令提示”,则此处会报错。

GmSSL默认安装路径为C:Program FilesGmSSL

在这里插入图片描述

5、配置环境变量

将GmSSL命令行工具路径C:Program FilesGmSSLin,添加到环境变量中。

在这里插入图片描述

在cmd中,输入命令查看GmSSL版本。

gmssl version
  • 1

在这里插入图片描述

至此,GmSSL安装完毕。

五、解决编译报错

报错如下:

libcrypto-1_1-x64.def : error LNK2001: 无法解析的外部符号 EVP_get_ciphernames
libcrypto-1_1-x64.def : error LNK2001: 无法解析的外部符号 EVP_get_digestnames
libcrypto.lib : fatal error LNK1120: 2 个无法解析的外部命令
NMAKE : fatal error U1077: “link”: 返回代码“0x1”
  • 1
  • 2
  • 3
  • 4

原因:

EVP_get_ciphernames、EVP_get_digestnames这2个函数位于GmSSL-masterincludeopensslevp.h,似乎是没找到这2个函数的实现。

解决办法:

在GmSSL的github仓库中,在GmSSL-master/crypto/evp/names2.c文件中,历史版本有这2个函数的实现,新版本不知道什么原因,这2个函数实现被删除了。

所以,我们只需要从names2.c文件的历史版本中,将函数实现拷贝出来,追加到新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";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

(1)首先将上述4个函数,追加至names2.c文件末尾。
(2)然后执行一下清除

nmake clean
  • 1

(3)再执行编译

nmake
  • 1

就可以发现,已经可以编译通过了。

思考:

在win下编译报这2个函数未实现,但是后来在Linux下编译,在没有改代码的前提下,居然可以直接编译通过,看来这个与平台还有关系。



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

注:本文转载自blog.csdn.net的百里杨的文章"https://blog.csdn.net/zyhse/article/details/112325129"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top