在Windows下安装GmSSL
本文屬于《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://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表明安裝成功。
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源碼準備
下載GmSSL源碼:https://github.com/guanzhi/GmSSL
四、編譯與安裝GmSSL
以管理員權限,打開VS Tools中“適用于VS 2017 的x64 本機工具命令提示”。
1、進入GmSSL源碼目錄
cd /d D:\GmSSL-master\GmSSL-master2、配置編譯生成64位的庫
若需生成32位,則“perl Configure VC-WIN32”。
perl Configure VC-WIN64A3、編譯
nmake若報錯,參考第五節解決編譯報錯。
直到編譯成功后繼續。
4、安裝
nmake install若前面不是以管理員權限運行,“適用于VS 2017 的x64 本機工具命令提示”,則此處會報錯。
GmSSL默認安裝路徑為C:\Program Files\GmSSL
5、配置環境變量
將GmSSL命令行工具路徑C:\Program Files\GmSSL\bin,添加到環境變量中。
在cmd中,輸入命令查看GmSSL版本。
gmssl version至此,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”原因:
EVP_get_ciphernames、EVP_get_digestnames這2個函數位于GmSSL-master\include\openssl\evp.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)首先將上述4個函數,追加至names2.c文件末尾。
(2)然后執行一下清除
(3)再執行編譯
nmake就可以發現,已經可以編譯通過了。
思考:
在win下編譯報這2個函數未實現,但是后來在Linux下編譯,在沒有改代碼的前提下,居然可以直接編譯通過,看來這個與平臺還有關系。
若對你有幫助,歡迎點贊、收藏、評論,你的支持就是我的最大動力!!!
同時,阿超為大家準備了豐富的學習資料,歡迎關注公眾號“超哥學編程”,即可領取。
總結
以上是生活随笔為你收集整理的在Windows下安装GmSSL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为2015年实习生招聘考试试题
- 下一篇: knx智能照明控制系统电路图_can总线