MQTT——国密SSL加密

MQTT——国密SSL加密

1.客户端支持gmssl

客户端首先编译gmssl

./Configure no-asm no-async shared --cross-compile-prefix=mips-openwrt-linux- --prefix=$STAGING_DIR/usr --openssldir=/usr/ssl linux-mips32

–openssldir参数表示实际使用的时候,链接的配置路径
no-async表示关闭异步,但是实际编译会有问题,注意由于这个导致的问题,基本都可以通过修改注释让其编译通过,实际使用不会有问题
然后编译paho-mqtt,注意要链接gmssl生成的libssl和libcrypto

2.服务器支持gmssl

服务器我用的centos,首先也是编译gmssl,

./Configure shared linux-x86_64 --prefix=/usr/local/gmssl

注意以后多个地方会引用这个路径,千万不要装到系统目录下。否则很麻烦。
编译之后gmssl和系统原带的openssl,会因为引用lib的路径产生冲突……
目前解决办法就是,使用gmssl的时候,就调用一句
export LD_LIBRARY_PATH=/usr/local/gmssl/lib/:$LD_LIBRARY_PATH,意思就是让系统把gmssl的库暴露出来,一般简易在一个脚本中使用,脚本工作结束后,就无效了。
这样就不会导致系统原带openssl出现问题,要知道系统原带的openssl,关系各个部分,出现问题会导致系统瘫痪。

然后编译mosquitto,
可能需要安装一些软件
yum install gcc-c++
yum install make
yum install gcc
yum install c-ares-devel
yum -y install docbook-style-xsl( find / -name docbook.xsl,然后修改man/manpage.xsl那行)

编译过程要指定一下gmssl的头文件路径和lib路径
修改mosquitto下面的config.mk,大概124行

UNAME:=$(shell uname -s)

ifeq ($(UNAME),SunOS)
	ifeq ($(CC),cc)
		CFLAGS?=-O -I/usr/local/gmssl/include
	else
		CFLAGS?=-Wall -ggdb -O2 -I/usr/local/gmssl/include
	endif
else
	CFLAGS?=-Wall -ggdb -O2 -I/usr/local/gmssl/include
endif

LDFLAGS=-L/usr/local/gmssl/lib/

然后编译,此时需要指明ssllib的路径。我写了一个脚本放在mosquitto目录下

#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/gmssl/lib/:$LD_LIBRARY_PATH
make clean
make 
make install

3.证书制作

#!/usr/bin/env bash
# When OpenSSL prompts you for the Common Name for each certificate, use different names.
export LD_LIBRARY_PATH=/usr/local/gmssl/lib/:$LD_LIBRARY_PATH

# CA key
##openssl genrsa -out ca.key 2048
/usr/local/gmssl/bin/gmssl ecparam -genkey -name sm2p256v1 -out ca.key
# CA csr
##openssl req -new -subj "/CN=ca" -key ca.key -out ca.csr
/usr/local/gmssl/bin/gmssl req -new -subj "/CN=ca" -key ca.key -out ca.csr
# CA crt
##openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -days 3650
/usr/local/gmssl/bin/gmssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -days 3650

# server key
##openssl genrsa -out server.key 2048
/usr/local/gmssl/bin/gmssl ecparam -genkey -name sm2p256v1 -out server.key
# server.csr
##openssl req -new -subj "/CN=server" -key server.key -out server.csr
/usr/local/gmssl/bin/gmssl req -new -subj "/CN=server" -key server.key -out server.csr
# server.crt
##openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
/usr/local/gmssl/bin/gmssl x509 -req -in server.csr -out server.crt  -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
# server.crt verify
##openssl verify -CAfile ca.crt  server.crt
/usr/local/gmssl/bin/gmssl verify -CAfile ca.crt  server.crt

# client key
##openssl genrsa -out client.key 2048
/usr/local/gmssl/bin/gmssl ecparam -genkey -name sm2p256v1 -out client.key
# client.csr
##openssl req -new -subj "/CN=client" -key client.key -out client.csr
/usr/local/gmssl/bin/gmssl req -new -subj "/CN=client" -key client.key -out client.csr
# client.crt
##openssl x509 -req -in client.csr -out client.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
/usr/local/gmssl/bin/gmssl x509 -req -in client.csr -out client.crt  -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
# client.crt verify
##openssl verify -CAfile ca.crt  client.crt
/usr/local/gmssl/bin/gmssl verify -CAfile ca.crt  client.crt

4.证书配置

客户端证书配置,我的代码为c语言版本pahomqtt,支持证书配置,双向校验的话需要配置ca的证书
在这里插入图片描述

服务端证书配置(双向认证)
在这里插入图片描述

5.测试结果

抓包测试结果,
在这里插入图片描述
在这里插入图片描述

这些unknown的都是国密算法的套件
在这里插入图片描述

服务端选用的0xe107

/usr/local/gmssl/bin/gmssl ciphers -V查看套件
在这里插入图片描述
证明选择的是国密算法。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值