EMQX启用OPENSSL自制SSL证书,进行双向连接

参考资料EMQX官网博客:

启用SSL单向验证

购买证书
如果有购买证书的话,就不需要自签名证书。
为方便 EMQ X 配置,请将购买的证书文件重命名为 emqx.crt,证书密钥重命名为 emqx.key

启用SSL双向验证

1. centos 7 安装openssl

1.1 方式一

$ yum install openssl

1.2 方式二

官网地址 选择版本进行下载
当前最新版本为OpenSSL_1_1_1k.tar.gz

  1. 选择一个服务器文件夹地址,放入压缩包,并解压
 tar -zxvf OpenSSL_1_1_1k.tar.gz
  1. 新建安装目录
 mkdir /usr/local/openssl
  1. 进入解压后的文件目录
 cd OpenSSL_1_1_1k
  1. 生成编译文件
  ./config --prefix=/usr/local/openssl
  1. make安装
make && make install
  1. 验证安装
 cd /usr/local
 ldd /usr/local/openssl/bin/openssl
 #能出现版本号则成功
 openssl version

如果出现gcc、make等command not found,需要安装gcc

yum -y install gcc

2. openssl生成证书

crt证书可参考:https://www.cnblogs.com/xiaohanlin/p/10213966.html

2.1 方式一(已验证成功)

来源 简单的证书制作

 openssl genrsa -out ca.key 2048

 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -subj "/CN=www.emqx.io" -out ca.pem
 
 openssl genrsa -out server.key 2048

 openssl req -new -key ./server.key -out server.csr -subj "/CN=127.0.0.1"

 openssl x509 -req -in ./server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -days 3650 -sha256

 openssl genrsa -out client.key 2048

 openssl req -new -key ./client.key -out client.csr -subj "/CN=127.0.0.1"

 openssl x509 -req -in ./client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem -days 3650 -sha256

2.2 方式二 使用配置文件

先新建openssl.cnf文件。
将证书需要的国家、机构等信息填入,方便生成证书。
如果不使用此配置,可在每次生成证书的时候,根据提示填入国家、机构等信息,将下面bash命令中的 ==-config ./openssl.cnf ==省略即可。

2.2.1 使用openssl自带配置文件(没有验证)

cp /etc/pki/tls/openssl.cnf ./
rm -rf /etc/pki/CA/*.old
## 生成证书索引库数据库文件
touch /etc/pki/CA/index.txt
## 指定第一个颁发证书的序列号
echo 01 > /etc/pki/CA/serial

使用默认的配置,可在生成证书命令后增加 -subj “/C=CN/ST=hangzhou/O=EMQ/CN=RootCA” 修改配置。
参考emqx自签二级证书

2.2.2 自制配置文件(验证时返回18)

[req]
default_bits  = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
countryName = CN
stateOrProvinceName = Jiangsu
localityName = NanJing
organizationName = EMQX
commonName = EH
[req_ext]
subjectAltName = @alt_names
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = kb.example.com
DNS.2 = helpdesk.example.org
DNS.3 = systems.example.net
IP.1 = 192.168.1.1
IP.2 = 192.168.69.14

SubjectAltName 可以包含email 地址,ip地址,正则匹配DNS主机名,等等。
其中:
commonName_default: 证书的主域名
organizationName_default: 企业/单位名称
organizationalUnitName_default:企业部门
localityName_default: 城市
stateOrProvinceName_default: 省份
countryName_default: 国家代码,一般都是CN(大写)
[alt_names]: 后面为备用名称列表,可以是域名、泛域名、IP地址

2.2.3 生成自签名CA证书

先生成2048长度的随机Key,再用此Key生成EMQX根证书ca.pem,有效期10年(3650)

openssl genrsa -out ca.key 2048
openssl req -x509 -new -config ./openssl.cnf -key ca.key -sha256 -days 3650 -out ca.pem

2.2.4 生成服务端证书

生成步骤与上面类似。创建emqx.key,生成证书请求emqx.csr,签发证书。

openssl genrsa -out emqx.key 2048
openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr
openssl x509 -req -in ./emqx.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf

2.2.5 生成客户端证书

双向连接认证还需要创建客户端证书。创建client.key,生成证书请求emqx.csr,签发证书。

openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Jiangsu/L=SuZhou/O=EMQX/CN=client"
openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem

3. EMQX/EMQTTD 开启SSL双向验证

将前文中通过 OpenSSL 工具生成的 emqx.pem、emqx.key 及 ca.pem 文件拷贝到 EMQ X 的 etc/certs/ 目录下,并参考如下配置修改 emqx.conf:

listener.ssl.external.keyfile = etc/certs/emqx.key

## 注意:如果 emqx.pem 是证书链,请确保第一个证书是服务器的证书,而不是 CA 证书。
listener.ssl.external.certfile = etc/certs/emqx.pem

## 注意:ca.pem 用于保存服务器的中间 CA 证书和根 CA 证书。可以附加其他受信任的 CA,用来进行客户端证书验证。
listener.ssl.external.cacertfile = etc/certs/ca.pem

## 开启双向认证
listener.ssl.external.verify = verify_peer

## 禁止单向认证
listener.ssl.external.fail_if_no_peer_cert = true

4.EMQX重启并使用客户端验证

./emqx/bin/emqx start

使用 MQTT X工具或mqtt fx都可。 MQTT X

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值