热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mosquitto单向认证

1.生成证书要单向配置SSL需要做三项前置工作1.生成CA证书2.生成server端证书,server端keygithub的一个开源项目已经做到这点,详

1.生成证书
要单向配置SSL 需要 做三项前置工作

1. 生成CA证书

2.生成server 端证书,server 端key 

 

github 的一个开源项目已经做到这点 ,详情可见 https://github.com/iandl/mqttitude/blob/master/tools/TLS/generate-CA.sh

为方便阅读,整个shell 代码先贴出来

#!/bin/sh
#(@)generate-CA.sh - Create CA key-pair and server key-pair signed by CA# Copyright (c) 2013 Jan-Piet Mens
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of mosquitto nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.set -eDIR=${TARGET:='.'}
# A space-separated list of alternate hostnames (subjAltName)
# may be empty ""
ALTHOSTNAMES="broker.example.com foo.example.de"
CA_ORG='/O=MQTTitude.org/emailAddress=nobody@example.net'
CA_DN="/CN=An MQTT broker${CA_ORG}"
CACERT=${DIR}/ca
SERVER=${DIR}/server
SERVER_DN="/CN=$(hostname -f)$CA_ORG"
keybits=2048
openssl=$(which openssl)function maxdays() {nowyear=$(date +%Y)years=$(expr 2032 - $nowyear)days=$(expr $years '*' 365)echo $days
}function getipaddresses() {/sbin/ifconfig |sed -En '/inet6? /p' |sed -Ee 's/inet6? (addr:)?//' |awk '{print $1;}' |sed -e 's/[%/].*//' |egrep -v '(::1|127\.0\.0\.1)' # omit loopback to add it later
}function addresslist() {ALIST=""for a in $(getipaddresses); doALIST="${ALIST}IP:$a,"doneALIST="${ALIST}IP:127.0.0.1,IP:::1,"for h in $(echo ${ALTHOSTNAMES}); doALIST="${ALIST}DNS:$h,"doneALIST="${ALIST}DNS:localhost"echo $ALIST}days=$(maxdays)if [ -n "$CAKILLFILES" ]; thenrm -f $CACERT.??? $SERVER.??? $CACERT.srl
fiif [ ! -f $CACERT.crt ]; then# Create un-encrypted (!) key$openssl req -newkey rsa:${keybits} -x509 -nodes -days $days -extensions v3_ca -keyout $CACERT.key -out $CACERT.crt -subj "${CA_DN}"echo "Created CA certificate in $CACERT.crt"$openssl x509 -in $CACERT.crt -nameopt multiline -subject -nooutchmod 400 $CACERT.keychmod 444 $CACERT.crt
fiif [ ! -f $SERVER.key ]; thenecho "--- Creating server key and signing request"$openssl genrsa -out $SERVER.key $keybits$openssl req -new \-out $SERVER.csr \-key $SERVER.key \-subj "${SERVER_DN}"chmod 400 $SERVER.key
fiif [ -f $SERVER.csr -a ! -f $SERVER.crt ]; then# There&#39;s no way to pass subjAltName on the CLI so# create a cnf file and use that.CNF&#61;&#96;mktemp /tmp/cacnf.XXXXXXXX&#96; || { echo "$0: can&#39;t create temp file" >&2; exit 1; }sed -e &#39;s/^.*%%% //&#39; > $CNF <<\!ENDconfig%%% [ JPMextensions ]%%% basicConstraints &#61; critical,CA:false%%% nsCertType &#61; server%%% keyUsage &#61; nonRepudiation, digitalSignature, keyEncipherment%%% nsComment &#61; "Broker Certificate"%%% subjectKeyIdentifier &#61; hash%%% authorityKeyIdentifier &#61; keyid,issuer:always%%% subjectAltName &#61; $ENV::SUBJALTNAME%%% # issuerAltName &#61; issuer:copy%%% nsCaRevocationUrl &#61; http://mqttitude.org/carev/%%% nsRevocationUrl &#61; http://mqttitude.org/carev/
!ENDconfigSUBJALTNAME&#61;"$(addresslist)"export SUBJALTNAME # Use environment. Because I can. ;-)echo "--- Creating and signing server certificate"$openssl x509 -req \-in $SERVER.csr \-CA $CACERT.crt \-CAkey $CACERT.key \-CAcreateserial \-CAserial "${DIR}/ca.srl" \-out $SERVER.crt \-days $days \-extfile ${CNF} \-extensions JPMextensionsrm -f $CNFchmod 444 $SERVER.crt
fi

实际过程中大家可根据自己的需要修改这段脚本的内容&#xff0c;为了快速搭建我们的单向SSL&#xff0c; 我们这里不做任何修改&#xff0c;直接执行这段shell 

执行完成后可生成  server.crt  server.csr  server.ke ca.crt  ca.key  ca.srl

$ wget https://github.com/iandl/mqttitude/blob/master/tools/TLS/generate-CA.sh .
$ bash ./generate-CA.sh

 

配置mosquitto 配置文件

 

ca.crt,  sever.crt, server.key 是上面生成的文件

启动 broker

启动 subscribe 端&#xff0c; 这里需要注意&#xff0c;如果sbuscreibe 端和broker 不在同一台机器&#xff0c;请将第一步生成的ca.crt 拷贝到 该机器的/root/certs下

 

启动 publish 端,  如果publish 端和broker 不在同一台机器&#xff0c;请将第一步生成的ca.crt 拷贝到 该机器的/root/certs下



 



推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  •  项目地址https:github.comffmydreamWiCar界面做的很难看,美工方面实在不在行。重点是按钮触摸事件的处理,这里搬了RepeatListener项目代码,例 ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在&quot;Debian上安装Docker&quot;,其他平台在&quot;这里查 ... [详细]
  • 加密、解密、揭秘
    谈PHP中信息加密技术同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法?当时我愣了一下,因为我把非对称加密与单项散列加 ... [详细]
  • 小白的Python 学习笔记(八)推导式详解
    大家好,今天我总结一下Python的推导式,首先让我们来看定义推导式(comprehensions)是Python的一种独有特性,是可以从一个数据序列构建另一个新的数据序列的结构体 ... [详细]
  • MySQL 数据库基础学习 一、SQL的作用及分类 二、数据类型 三、存储引擎  (建库建表、数据插入等))
    MySQL 数据库基础学习 一、SQL的作用及分类 二、数据类型 三、存储引擎 (建库建表、数据插入等)) ... [详细]
  • 从零开始的ESP8266探索(15)WiFi其他方法和WiFi事件响应
    文章目录目的WiFi其他方法WiFi事件响应事件列表注册事件使用示例总结目的WiFi在使用过程中并非会一直如希望般稳定运行的,为了应对这些情况就需要能够了解WiFi ... [详细]
author-avatar
大眼妹PS珺珺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有