https协议支持与实现

目 录... 2

第一章 简述... 3

1.1、本文简述... 3

1.2、环境简述... 3

第二章 相关库的编译... 4

2.1、源码及依赖库说明... 4

2.2、准备工作... 4

2.3、编译gmssl 4

2.3.1、编译PC版 gmssl 4

2.3.2、交叉编译 gmssl 5

2.4、编译libevent 5

2.5、交叉编译libcurl 6

第三章 生成证书... 7

3.1 准备工作目录... 7

3.2 生成国际算法证书... 7

3.2.1、生成CA证书... 7

3.2.2、生成服务器证书... 8

3.2.3、生成客户端证书... 8

3.3 生成国密算法证书... 9

3.3.1、生成CA证书... 9

3.3.2、生成服务器证书... 9

3.3.3、生成客户端证书... 10

第四章 测试... 11

4.1、简介... 11

4.2、测试步骤... 11

4.3、测试结果... 12

 

 

 

第一章 简述

1.1、本文简述

本文以libcurl库作为https客户端,客户端在arm板上实现。libevent作为https服务器,服务器在ubuntu上实现。其中,想要实现https功能需要openssl支持,添加openssl库的编译。当使用对称或非对称算法时,需要同时支持国际算法和国密算法,而openssl-1.1.1版本虽然支持国密算法(支持国际算法),但是只提供实现,不提供解密套件。从而我们选用gmssl来代替openssl,它为openssl的分支,兼容openssl,同时支持国密算法。

1.2、环境简述

名称

文件名

下载地址

备注

Libcurl

curl-7.67.0.tar.gz

https://curl.haxx.se/download.html

Libcurl源码

GmSSL

GmSSL-master.zip

http://www.github.com/guanzhi/GmSSL

GmSSL源码

Libevent

libevent.tar.gz

http://libevent.org/

Libevent源码

 

第二章 相关库的编译

2.1、源码及依赖库说明

2.2、准备工作

建立合理清晰的目录结构,非常有利于明确整个移植思路,编译全部使用root用户

1)、建立文件夹https及其子目录(家目录为/home/southgnss)

mkdir -p ~/https                                  

mkdir -p ~/ https /0_source              //存放所有源码文件

mkdir -p ~/ https /1_pc                      //依赖库PC版安装文件夹

mkdir -p ~/ https /2_arm                  //依赖库arm版安装文件夹

2)、有源码文件,都COPY到~/https/0_source目录

2.3、编译gmssl

Libevent与libcurl都需要gmssl的支持,根据“第一章 简述”所知,需要同时编译PC版gmssl和arm版gmssl。

2.3.1、编译PC版 gmssl

1)、进入目录/home/southgnss/https/0_source目录

2)、解压gmssl库

unzip GmSSL-master.zip

3)、进入GmSSL-master源码文件夹进行配置

./config \

 --prefix=/home/southgnss/https/1_pc/gmssl  \

 enable-ssl3  \

 enable-ssl3-method

4)、编译并安装

make

make install

 

2.3.2、交叉编译 gmssl

1)、在目标目录GmSSL-master下

make clean

2)、重新配置

export CC=/usr/local/arm/4.4.3/bin/arm-linux-gcc

export CXX=/usr/local/arm/4.4.3/bin/arm-linux-g++

./Configure \

 --prefix=//home/southgnss/https/2_arm/gmssl  \

 no-asm  \

shared linux-armv4 \

 enable-ssl3 \

 enable-ssl3-method

3)、编译并安装

make

make install

2.4、编译libevent

1)、清除编译环境,使其不再是交叉编译环境

unset CC

unset CXX

2)、进入目录/home/southgnss/https/0_source目录

3)、可以下载源码或者直接使用git获取源码

git clone https://github.com/libevent/libevent.git

tar –xvf libevent.tar.gz

4)、进入libevent配置

export PKG_CONFIG_PATH=/home/southgnss/https/1_pc/gmssl/lib/pkgconfig/

./configure \

--prefix=/home/southgnss/https/1_pc/libevent \

CFLAGS="$(pkg-config --cflags openssl)" \

LDFLAGS="$(pkg-config --libs openssl)"

5)、编译并安装

make

make install

2.5、交叉编译libcurl

1)、进入目录/home/southgnss/https/0_source目录

2)、解压libcurl源码并进入目录

tar –xvf curl-7.67.0.tar.gz

cd curl-7.67.0

3)、清除环境并配置

unset PKG_CONFIG_PATH

./configure \

--host=arm-linux \

--enable-shared \

--enable-static \

--prefix=/home/southgnss/https/2_arm/gmssl_curl \

--with-ssl=/home/southgnss/https/2_arm/gmssl \

CC=/usr/local/arm/4.4.3/bin/arm-linux-gcc \

CXX=/usr/local/arm/4.4.3/bin/arm-linux-g++

4)、编译并安装

make

make install

 

第三章 生成证书

同时支持国际算法和国密算法,本章讲解生成两种算法的证书。因为libcurl只支持pem格式证书,所以生成的证书格式全为pem格式。

3.1 准备工作目录

创建证书环境,进入准备工作。openssl_key为国际证书目录,gmssl_key为国密证书目录

mkdir /home/southgnss/https/openssl_key

mkdir /home/southgnss/https/openssl_key/CA

mkdir /home/southgnss/https/openssl_key/server

mkdir /home/southgnss/https/openssl_key/client

mkdir /home/southgnss/https/gmssl_key

mkdir /home/southgnss/https/ gmssl _key/CA

mkdir /home/southgnss/https/ gmssl _key/server

mkdir /home/southgnss/https/ gmssl _key/client

3.2 生成国际算法证书

测试证书请参考“2_参考证书->国际证书”

3.2.1、生成CA证书

1)、生成根证书私钥(pem文件)

cd /home/southgnss/https/openssl_key/CA

gmssl genrsa -out cakey.pem 2048

       2)、生成根证书签发申请文件(csr文件)

gmssl  \

req \

-new \

-key  cakey.pem \

-out ca.csr \

-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=southgnss/OU=system2/CN=myCA"

3)、自签发根证书(pem文件)

gmssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey cakey.pem -in ca.csr -out  cacert.pem

 

3.2.2、生成服务器证书

1)、生成服务端私钥

cd /home/southgnss/https/openssl_key/server

gmssl genrsa -out serverkey.pem 2048

2)、生成证书请求文件

gmssl  \

req \

-new \

-key  serverkey.pem \

-out server.csr \

-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=southgnss/OU=system2/CN=myServer"

 

3)、使用根证书签发服务端证书

gmssl x509 -req -days 3650 -sha1 -extensions v3_req -CA ../CA/cacert.pem -CAkey ../CA/cakey.pem -CAserial ca.srl -CAcreateserial -in server.csr -out servercert.pem

4)、使用CA证书验证server端证书,显示“OK”则成功

gmssl verify -CAfile ../CA/cacert.pem  servercert.pem

 

3.2.3、生成客户端证书

1)、生成客户端私钥

cd /home/southgnss/https/openssl_key/client

gmssl genrsa  -out clientkey.pem 2048

2)、生成证书请求文件

gmssl  \

req \

-new \

-key  clientkey.pem \

-out client.csr \

-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=southgnss/OU=system2/CN=myClient"

3)、使用根证书签发客户端证书

gmssl x509 -req -days 3650 -sha1 -extensions v3_req -CA  ../CA/cacert.pem -CAkey ../CA/cakey.pem  -CAserial ../server/ca.srl -in client.csr -out clientcert.pem

4)、使用CA证书验证客户端证书,显示“OK”则成功

gmssl verify -CAfile ../CA/cacert.pem clientcert.pem

3.3 生成国密算法证书

测试证书请参考“2_参考证书->国密证书”

3.3.1、生成CA证书

1)、生成根证书私钥(pem文件)

cd /home/southgnss/https/gmssl_key/CA

gmssl ecparam -genkey -name sm2p256v1 -text -out cakey.pem

       2)、生成根证书签发申请文件(csr文件)

gmssl  \

req \

-new \

-key  cakey.pem \

-out ca.csr \

-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=southgnss/OU=system2/CN=myCA"

3)、自签发根证书(pem文件)

gmssl x509 -req -days 3650 -sm3 -in ca.csr -signkey cakey.pem -out cacert.pem

 

3.3.2、生成服务器证书

1)、生成服务端私钥

cd /home/southgnss/https/ gmssl _key/server

gmssl ecparam -genkey -name sm2p256v1 -text -out serverkey.pem

2)、生成证书请求文件

gmssl  \

req \

-new \

-key  serverkey.pem \

-out server.csr \

-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=southgnss/OU=system2/CN=myServer"

3)、使用根证书签发服务端证书

gmssl x509 -req -sm3 -days 3650 -CA ../CA/cacert.pem -CAkey ../CA/private/cakey.pem -CAcreateserial -in server.csr -out servercert.pem

4)、使用CA证书验证server端证书,显示“OK”则成功

gmssl verify -CAfile ../CA/cacert.pem servercert.pem

 

3.3.3、生成客户端证书

1)、生成客户端私钥

cd /home/southgnss/https/ gmssl _key/client

gmssl ecparam -genkey -name sm2p256v1 -text -out clientkey.pem

2)、生成证书请求文件

gmssl  \

req \

-new \

-key  clientkey.pem \

-out client.csr \

-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=southgnss/OU=system2/CN=myClient"

3)、使用根证书签发客户端证书

gmssl x509 -req -sm3 -days 3650 -CA ../CA/cacert.pem -CAkey ../CA/private/cakey.pem -CAcreateserial -in client.csr -out clientcert.pem

4)、使用CA证书验证客户端证书,显示“OK”则成功

gmssl verify -CAfile ../CA/cacert.pem clientcert.pem

 

 

第四章 测试

4.1、简介

4.2、测试步骤

       1)、使用七星usb口线连接电脑和板子,虚拟机中导入该usb网卡设备,引入成功后会出现新的网卡

       2)、ifconfig配置PC端网卡地址为192.168.155.x/24(测试配置的为192.168.155.213),保证与板子(192.168.155.155)可以互ping通。

       3)、设置服务器运行环境(一般的ubuntu系统都有openssl库,防止冲突)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/southgnss/https/1_pc/libevent/lib:\

/home/southgnss/https/1_pc/gmssl/lib

       4)、修改server目录中Makefile,替换成自己libevent和gmssl PC版本所在的位置

 

       图1  修改Makefile

       5)、make后,将server所需证书(如下的三个)放在可执行文件同目录的openssl_key(国际证书)和gmssl_key(国密证书)目录下,目录没有则创建

 

              图2  两种证书

       6)、修改client目录下Makefile,与步骤4一样,注意库路径(选择ARM版本的gmssl)

       7)、开发板可执行程序同目录下创建openssl_key(国际证书)和gmssl_key(国密证书)目录,放入两种类型的证书,与5步骤一样。三个证书为:clientkey.pem clientcert.pem cacert.pem

       8)、ubuntu上先运行server,板上在运行client

       9)、客户端如出现“== Info: SSL certificate problem: certificate is not yet valid”的错误,请用date命令检查板子平台时间,将时间设为当前准确时间和时区,与ubuntu一样。

注:修改代码改变证书类型(国际或国密),请修改如下代码中的路径,若为单向认证,只需要修改第一张图上内容并且客户端不需要证书。若为双向认证,客户端和服务器都需要如下所示的三个证书。

代码默认为双向认证,采用国密证书!!!

 

 

图3 服务器更改证书类型

 

图4 客户端更改证书类型

 

4.3、测试结果

如果运行成功,客户端最后打印如下:

      

图5 客户端成功打印信息

服务器打印如下:

 

图6 服务器成功打印信息

如果使用的是国际算法证书的话会打印如下,红色框内为国际算法套件:

 

图7 解密国际算法证书打印消息

 

如果使用的是国密算法证书的话会打印如下,红色框内为国密算法套件:

 

图7 解密国密算法证书打印消息

源码见:https://download.csdn.net/download/qq_35141454/12107129

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值