MQTT mosquitto --capath参数的使用问题

1. 问题

站在server的角度,使用mosquitto例程测试时发现不对劲的地方:

使用cafile参数来指定client的ca证书文件时,client可以正常接入到服务中来;

但使用capath参数指定client的证书文件时,client不能正常接入,报错如下

1648891572: New connection from 10.0.2.2:64977 on port 8883.
1648891572: OpenSSL Error[0]: error:14089086:SSL routines:ssl3_get_client_certificate:certificate verify failed
1648891572: Client <unknown> disconnected: Protocol error.

2.分析

测试过程中使用自签名的ca系列证书来进行验证。按照capath的设定,应该是可以允许多个CA签发的证书对应的client来接入的,否则没必要用一个capath列表,用一个固定的cafile就足够了。

CA证书制作完成后,将其(ca.crt)放到capath指定路径下,启动mosquitto broker,之后发现对应CA签发的client始终报错(如上所示),而一旦将broker的ca参数指定为cafile,对应的client就可以接入了。

这说明而对应的client证书、CA证书本身是没有问题的,而是在使用过程中,capath目录下的证书文件并没有被正常解析。

3.解决

Mosquitto with SSL and wildcard certificate does not work without --capath option - Stack Overflow

经查询,按照上面的链接中的解释,mosquitto在使用capath时,并不是直接将CA证书文件直接放到capath目录下就可以了,而是要进行解析才可以。

46.8K的点赞,实在是太6了,说明遇到这个问题的人还真是不少,很奇怪为啥官方不把这个写明白了。 

对于不同的发行版来说,用法也有可能是 c_rehash 、rehash等,是一个perl的脚本工具,如下所介绍。

openssl-rehash(1)

4. 扩展

4.1 rehash干了点啥呢?

请看下图,执行完该指令后,可以看到该目录下产生了两个软链接文件,而上文的rehash函数介绍中提到了,链接文件名的生成规则。

是否是因为证书文件名符合规则,才导致mosquitto 没有正常解析呢?

4.2 自己hash证书怎么样?

根据rehash的介绍,自己创建新的证书,并重命名成对应的文件名,之后测试果然成功了。

因此,如果不是什么复杂的系统的话,我们也没必要使用rehash这种工具了,直接自己计算重命名一下就可以了。

如何计算证书文件的hash值?

4.3为啥重命名证书就能解析了呢?

查到如下说明。

 ​​​​​​https://docs.infor.com/ln/10.5/it-it/lnolh/help/tt/onlinemanual/https_soap_generate_hash.html

 

验证下我自己的Ubuntu电脑看下?

果然。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值