编译使用win64版 TASSL1.1.1k

编译使用win64版 TASSL1.1.1k

下载链接:TASSL-1.1.1k,然后解压。

在这里插入图片描述

OpenSSL是一套件开放源代码的安全套接字密码学基础库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL/TLS协议,并提供丰富的API,以供应用程序开发、测试或其它目的使用。它广泛地集成在各种类型的操作系统中,作为其基础组件之一,深爱广大IT爱好者的喜爱。即使用某些操作系统没有将其集成为组件,通过源代码下载,也是十分轻松地构建OpenSSL的开发及应用环境。

尽管OpenSSL的功能十分强大且丰富,然而对于中国商用密码体系的算法及相关应用来说,它距离我们还是十分遥远,因为它仅仅包含的国际通用的密码算法、认证体系及相关协议,却没有将中国商用密码体系中的公开算法SM2、SM3、SM4及祖冲之流密码算法纳入其中,也不支持双证书体系的应用及相关协议。这对于推广及研究中国商用密码体系的广大密码爱好者来说,却是十分无奈的事情。 国内也存在着不少密码界同仁,尝试着将OpenSSL国密化,但其大多都局限于公司内部交流使用,这对于国密SSL的推广不利。针对这种现状,北京江南天安公司经过长时间的研究分析,于2017年上半年推出天安版国密OpenSSL,也就是TASSL,解决了中国商用密码体系无法构建基于OpenSSL应用的实际问题。现以源码的形式提供出来,供大家参考使用,为促进国密的推广和应用贡献自己的一份力量。

解决方案:使用win下的MSYS2 MINGW64

1. 编译`TASSL1.1.1k源码

  1. 下载MSYS2

  2. 打开MSYS MINGW64

在这里插入图片描述

  1. 进入到TASSL目录下,执行指令 no-shared生成静态库,shared生成动态库 ,不指定同时生成动态库和静态库

    ./config --prefix=/usr/local/out [no-shared或者shared]
    

    注意:prefix一定要填写绝对路径
    在这里插入图片描述

  2. 找到生成的Makefile文件,先执行make clean,再运行make命令
    在这里插入图片描述

  3. 如果发现make命令不存在,执行语句pacman -S make安装make-4.3-3-x86_64
    在这里插入图片描述

  4. 如果发现gcc不存在,安装Mingw-w64 GCC编译工具链,按照默认安装,直接回车,如果报错,多执行几次

    pacman -S --needed base-devel mingw-w64-x86_64-toolchain
    

在这里插入图片描述

  1. 安装好gcc后,执行gcc -v可以查看安装的版本

在这里插入图片描述

  1. 此时,继续执行make,等待make完毕,大概持续两分钟

在这里插入图片描述

  1. 执行make install指令,注意,这一步需要在MSYS2系统目录创建一些文件夹,如果你的MSYS2安装在系统盘,需要重新使用管理员打开MSYS2 MINGW64 ,等待两分钟安装完毕,会安装到第三步指定的/usr/local/out内,得到五个文件夹

在这里插入图片描述

  1. 查看bin目录下正确生成了openssl.exe可执行文件

在这里插入图片描述

  1. 路径对应关系:MSYS2的安装路径是MSYS2 MINGW64虚拟linux的根目录。通过MSYS2找到TASSL的安装目录,注意这里MYSYS2的安装目录是C:\msys64,则/usr/local/out对应到win10的绝对路径为:C:\msys64\usr\local\out

在这里插入图片描述

  1. 查看安装完成的win10下文件夹,

在这里插入图片描述

- bin 文件夹下包含了openssl可执行文件,如果生成了动态库会包含libcrypto-1_1-x64.dlllibssl-1_1-x64.dll。如果仅仅生成了静态库,则只有openssl.exe
在这里插入图片描述

  • include 文件夹包含了生成的头文件
    在这里插入图片描述

  • lib文件夹包含了生成的动态库/静态库。如果生成静态库会生成[libssl.a、libcrypto.a],如果生成动态库会生成[libssl.dll.a、libcrypto.dll.a],这里需要注意的是,不要被后缀迷惑了,libssl.a等价于libssl.lib
    在这里插入图片描述

  • 简单说一下动态库和静态库的区别。

    • 如果使用静态库,只需要用到include文件夹,以及[libssl.a、libcrypto.a],使用的时候,包含目录添加include文件夹路径,附加库目录为[libssl.a、libcrypto.a]的目录,然后附加依赖项添加[libssl.a、libcrypto.a]这里两个名字。在生成可执行文件后,就会链接静态库,可以直接使用。
    • 如果使用动态库,需要用到include文件夹,以及[libssl.dll.a、libcrypto.dll.a、libcrypto-1_1-x64.dlllibssl-1_1-x64.dll],使用的时候,包含目录添加include文件夹路径,附加库目录为[libssl.a、libcrypto.a]的目录,然后附加依赖项添加[libssl.dll.a、libcrypto.dll.a]这里两个名字。在生成可执行文件后,必须要在运行目录下添加[libcrypto-1_1-x64.dlllibssl-1_1-x64.dll]这两个动态库才能正常使用。

2.使用OPENSSL生成CA证书

使用管理员打开命令提示符,进入bin目录,运行openssl生成CA证书。

在这里插入图片描述

  • Step1:制作ca.key 私钥(SM2算法加密)

    openssl ecparam -genkey -name SM2 -out ./myCert/ca/ca.key
    
    • -genkey——生成密钥
    • -name——指定生成密钥算法名称
    • -out——输出文件的路径
  • Step2:制作生成CA证书请求

    openssl req -new -key ./myCert/ca/ca.key -out ./myCert/ca/ca.csr -subj "/C=CN/ST=Hubei/L=Wuhan/O=HUST NCC/OU=NCLINK/CN=nclink.com/"
    
    • req——执行证书签发命令
    • -new——新证书签发请求
    • -key——指定私钥路径
    • -out——输出的csr文件的路径
    • -subj——证书相关的用户信息(subject的缩写)
    • 检查证书请求命令openssl req -text -in ./myCert/ca.csr -noout
  • Step3:自签名得到根证书,注意这里也可以生成ca.crt文件。

    openssl x509 -req -days 3650 -sm3 -extfile C:/msys64/usr/ssl/openssl.cnf -extensions v3_ca -signkey ./myCert/ca/ca.key -in ./myCert/ca/ca.csr -out ./myCert/ca/ca.crt
    Signature ok
    subject=C = CN, ST = Hubei, L = Wuhan, O = HUST NCC, OU = NCLINK, CN = nclink.com
    Getting Private key
    

3.使用OPENSSL生成服务器证书

在上一步生成的CA根证书的基础上,为服务器nclink.com签名并颁发证书

注意:根证书的 Common Name(CN)不要和生成的证书CN一样,证书校验会出错

./myCert目录下创建文件夹server存放服务器的证书

1. 生成服务器的签名证书
  • Step1:生成签名证书的私钥SS_nclink.com.key

    openssl ecparam -genkey -name SM2 -out ./myCert/server/SS_nclink.com.key
    
  • Step2:生成签名证书的证书请求文件SS_nclin.com.csr

    openssl req -new -key ./myCert/server/SS_nclink.com.key -out ./myCert/server/SS_nclink.com.csr -subj "/C=CN/ST=Hubei/L=Wuhan/O=HUST NCC/OU=NCLINK/CN=nclink.com/"
    
  • Step3:使用根CA证书签发nclink.com的签名证书SS_nclink.com.crt

    openssl x509 -req -days 3650 -sm3 -extfile C:/msys64/usr/ssl/openssl.cnf -extensions v3_req -CA ./myCert/ca/ca.crt -CAkey ./myCert/ca/ca.key -CAserial ./myCert/ca.srl -CAcreateserial -in ./myCert/server/SS_nclink.com.csr -out ./myCert/server/SS_nclink.com.crt
    
  • Step4:校验证书

    openssl verify -CAfile ./myCert/ca/ca.crt ./myCert/server/SS_nclink.com.crt
    

    在这里插入图片描述

  • 命令解释

    • -CA——指定CA证书的路径

    • -CAkey——指定CA证书的私钥路径

    • -CAserial——指定证书序列号文件的路径

    • -CAcreateserial——表示创建证书序列号文件(即上方提到的serial文件),创建的序列号文件默认名称为-CA,指定的证书名称后加上.srl后缀,第一次创建证书需要使用该参数创建,此后不需要该参数

      在x509指令中,有多重方式可以指定一个将要生成证书的序列号,可以使用set_serial选项来直接指定证书的序列号,也可以使用-CAserial选项来指定一个包含序列号的文件。所谓的序列号是一个包含一个十六进制正整数的文件,在默认情况下,该文件的名称为输入的证书名称加上.srl后缀,比如输入的证书文件为ca.cer,那么指令会试图从ca.srl文件中获取序列号,可以自己创建一个ca.srl文件,也可以通过-CAcreateserial选项来生成一个序列号文件。
      

      注意:这里指定的-extensions的值为v3_req,在OpenSSL的配置中,v3_req配置的basicConstraints的值为CA:FALSE;而前面生成根证书时,使用的-extensions值为v3_ca,v3_ca中指定的basicConstraints的值为CA:TRUE,表示该证书是颁发给CA机构的证书。可以查看文件/opt/local/ssl/openssl.cnf

      [ v3_req ]
      # Extensions to add to a certificate request
      basicConstraints = CA:FALSE
      keyUsage = nonRepudiation, digitalSignature
      
      [ v3enc_req ]
      # Extensions to add to a certificate request
      basicConstraints = CA:FALSE
      keyUsage = keyAgreement, keyEncipherment, dataEncipherment
      
      [ v3_ca ]
      # Extensions for a typical CA
      # PKIX recommendation.
      subjectKeyIdentifier=hash
      authorityKeyIdentifier=keyid:always,issuer
      basicConstraints = critical,CA:true
      
    • 在server文件夹下得到三个文件

      • SS_nclink.com.key 服务器签名证书的SM2私钥文件

      • SS_nclink.com.csr 服务器签名证书的 请求文件

      • SS_nclink.com.crt 服务器的签名证书(经过CA私钥签名认证)

2. 生成服务器的加密证书
  • Step1:生成加密证书的私钥SE_nclink.com.key

  • Step2:生成加密证书的证书请求文件SE_nclink.com.csr

  • Step3:使用根证书CA签发服务器的加密证书SE_nclink.com.crt注意这里的-extensions参数使用的是v3enc_req

    openssl ecparam -genkey -name SM2 -out ./myCert/server/SE_nclink.com.key
    
    openssl req -new -key ./myCert/server/SE_nclink.com.key -out ./myCert/server/SE_nclink.com.csr -subj "/C=CN/ST=Hubei/L=Wuhan/O=HUST NCC/OU=NCLINK/CN=nclink.com/"
    
    openssl x509 -req -days 3650 -sm3 -extfile ./openssl.cnf -extensions v3enc_req -CA ./myCert/ca/ca.crt -CAkey ./myCert/ca/ca.key -CAserial ./myCert/ca.srl -in ./myCert/server/SE_nclink.com.csr -out ./myCert/server/SE_nclink.com.crt
    
  • 在server文件夹下增加了三个文件

    • SE_nclink.com.key 服务器签名证书的SM2私钥文件
    • SE_nclink.com.csr 服务器签名证书的 请求文件
    • SE_nclink.com.crt 服务器的签名证书(经过CA私钥签名认证)
3. 使用根证书校验服务器证书
  • 验证证书出错

    在这里插入图片描述

  • 解决办法

    我们在生成ca根证书时,Common Name 最好是有效根域名(如 openssl.com ), 并且不能和后来服务器证书签署请求文件中填写的 Common Name 完全一样,否则会导致证书生成的时候出现 上图错误。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值