您尚未登录。

楼主 # 2024-06-09 16:51:32

memory
会员
注册时间: 2021-08-11
已发帖子: 487
积分: 464

请问mosqutto服务器 8883端口,绑定多个ssl证书吗?

请问mosqutto服务器 8883端口,绑定多个ssl证书吗?

离线

楼主 #1 2024-06-09 17:10:11

memory
会员
注册时间: 2021-08-11
已发帖子: 487
积分: 464

Re: 请问mosqutto服务器 8883端口,绑定多个ssl证书吗?

查了一下,mosqutto做不到,只能用其他办法做到:



方法一:使用 SNI(Server Name Indication)与代理服务器
最常用的方法是利用反向代理服务器(如 Nginx、HAProxy 或 Apache)来实现 SNI。SNI 允许在同一个 IP 地址和端口上运行多个 HTTPS 服务,每个服务有其独立的 SSL 证书。你可以在代理服务器上配置多个虚拟主机,每个虚拟主机都有自己的 SSL 证书。然后,代理服务器将连接转交给后端的 Mosquitto 服务器。

Nginx 示例配置:

server {
    listen 8883 ssl;
    server_name example1.com;
    ssl_certificate /etc/nginx/ssl/example1.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example1.com.key;
    proxy_pass mosquitto://localhost:8883;
}

server {
    listen 8883 ssl;
    server_name example2.com;
    ssl_certificate /etc/nginx/ssl/example2.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example2.com.key;
    proxy_pass mosquitto://localhost:8883;
}

在上述配置中,Nginx 监听 8883 端口,接收来自不同域名的 SSL 连接,并基于 SNI 选择正确的 SSL 证书。然后,Nginx 将解密后的连接转发给 Mosquitto 的 8883 端口。











方法二:使用 Mosquitto 多实例
另一种可能的方法是运行多个 Mosquitto 实例,每个实例监听不同的端口,但这些端口需要映射到同一公共端口(如 8883)。这可以通过在服务器上使用 iptables 或类似工具进行端口转发来实现。然而,这种方法可能增加管理和维护的复杂性,因为它涉及到管理多个 Mosquitto 实例及其各自的 SSL 证书。

离线

楼主 #2 2024-06-10 11:51:55

memory
会员
注册时间: 2021-08-11
已发帖子: 487
积分: 464

Re: 请问mosqutto服务器 8883端口,绑定多个ssl证书吗?

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>mqtt.min.js 测试</title>
    <style>
        .divblock {
            display: inline-block;
            padding: 20px;
            border: 2px solid #00ff00;
            border-radius: 6px;
            margin: 20px 0px;
            user-select: none;
        }

        .divblock:active {
            background-color: #455072;
            border: 1px solid #0044ff;
        }
    </style>
    <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script> <!-- 引处MQTT.MINI.JS库文件 -->
</head>


<body>
    <div>4路开关模块</div>
    <div class="divblock" onclick="Onmqtttest()">mqtt 发送</div>
</body>

<script>
    // Create a client instance
    var options = {
		//mqtt客户端的id,这里面应该还可以加上其他参数,具体看官方文档
		clientId: 'mqttjs_' + (Math.random() * 1000000).toString(),
		username: "player",
		password: "player",
		reconnectPeriod: 1000, // 1000毫秒,设置为 0 禁用自动重连,两次重新连接之间的间隔时间
		connectTimeout: 30 * 1000, // 30秒,连接超时时间
    }
    //console.log(options.clientId);

    //浏览器采用websocket协议,host主机地址为192.168.0.200,端口为9001,路径为/mqtt
    var client = mqtt.connect("wss://player2.mqtt.memory.com:8084/", options) // you add a ws:// url here

    //建立连接
    client.on('connect', function () {
        console.log("connect success!")
        //订阅主题 /topic/player
        client.subscribe('/topic/player', function (err) {
            if (!err) {
                console.log("subscribe success!")
            } else {
                //打印错误
                console.log(err)
            }
        })
    })

    //如果连接错误,打印错误
    client.on('error', function (err) {
        console.log(err)
        client.end()
    })

    //如果client订阅主题成功,那么这里就是当接收到自己订阅主题的处理逻辑
    client.on('message', function (topic, message) {
        // message is Buffer,此处就是打印消息的具体内容
        console.log('-> ' + message.toString())
    })



    // 用户程序点击事件
    function Onmqtttest() {
        message = "message from browser with websocket"; // 消息内容
        //发布主题presence,消息内容为Hello mqtt,订阅与推送一样自发自收
        client.publish('/topic/player', 'Hello mqtt ' + message)
    }
</script>

</html>

再来一个简单的浏览器版本的 MQTT测试demo

离线

#3 2024-06-11 09:48:26

cctv180
会员
注册时间: 2018-04-02
已发帖子: 13
积分: 13

Re: 请问mosqutto服务器 8883端口,绑定多个ssl证书吗?

mqtt我不熟悉,但时要用sni用到的是websocket在emqx上的默认端口是8083 8084,在前面加Nginx反代一下长连就行。也就是#1的内容

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn