surgemq 添加ssl
surgemq添加ssl
1.MQTT协议
消息发布订阅功能的消息队列协议
报文组成: 固定报头(控制报文类型)+可变报头(协议名称、协议级别、连接标志、保持连接)+有效载荷(clentId+will topic+will message +username + password )
协议级别QoS支持0,1,2
可以基于tcp和udp
2.surgemq
Surgemq采用了mqtt通信协议可以做Server和Client,项目里主要用它做Server Server每次和新的Client连接会创建一个新的对象叫Service 用来维护整个连接到关闭过程中服务端和这个客户端的通信,处理消息的发布,订阅
3.ssl(两种方式)
利用自己生成的根证书分别给服务端(ca.crt,server.crt,server.key)和客户端的证书签名(ca.crt,client.crt,client.key) 只需要根证书对服务端和客户端进行ssl验证(ca.crt,ca.key) 3.1方式一: No.1 获取服务器自签名证书 获取ca.crt
openssl genrsa -out ca.key
openssl req -x509 -new -nodes -key ca.key -subj "/CN=*" -days -out ca.crt
获取服务端证书和key
openssl genrsa -out server.key
server表示服务端ip,需要在测试服务器/etc/hosts配置添加 119.23.136.97 server openssl req -new -key server.key -subj "/CN=server" -out server.csr openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000
获取客户端证书
openssl genrsa -out client.key openssl req -new -key client.key -subj "/CN=server" -out client.csr echo extendedKeyUsage=clientAuth > extfile.cnf openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out client.crt -days
No.2服务端和客户端使用证书双向验证 Surqmq server监听端口方式改为tls.listen,tlsConfig加入服务端的证书和key以及根证书
//read crt and key``
certpool := x509.NewCertPool()
pemCerts, err := ioutil.ReadFile(ca)
if err != nil {
fmt.Println(err)
return err
}
certpool.AppendCertsFromPEM(pemCerts)
//server 端加入 tls
cert, err := tls.LoadX509KeyPair(crt, key)
if err != nil {
fmt.Println(err)
return err
}
config := &tls.Config{
Certificates: []tls.Certificate{cert},
ClientAuth: tls.RequireAndVerifyClientCert,
ClientCAs: certpool,
}
this.ln, err = tls.Listen("tcp", u.Host, config)
Paho.mqtt client支持ssl方式的连接方式,tlsConfig加入客户端的证书和key以及根证书
//初始化tlsConfig
func NewTLSConfig(ca, crt, key string) *tls.Config {
certpool := x509.NewCertPool()
pemCerts, err := ioutil.ReadFile(ca)
if err == nil {
certpool.AppendCertsFromPEM(pemCerts)
}
cert, err := tls.LoadX509KeyPair(crt, key)
if err != nil {
panic(err)
}
return &tls.Config{
RootCAs: certpool,
Certificates: []tls.Certificate{cert},
}
}
//将给client设置tlsConfig
connOpts.AddBroker(uri).SetTLSConfig(NewTLSConfig(ca, crt, key))
mc = MQTT.NewClient(connOpts)
3.2方式二: No.1只需要获取根证书server.crt和server.key
openssl genrsa -out server.key
openssl req -x509 -new -nodes -key server.key -subj "/CN=server" -days -out server.crt
No.2服务端和客户端使用根证书进行ssl验证
//server 端加入 tls
cert, err := tls.LoadX509KeyPair(crt, key)
if err != nil {
fmt.Println(err)
return err
}
config := &tls.Config{
Certificates: []tls.Certificate{cert},
ClientAuth: tls.NoClientCert, //此处为tls.NoClientCert
}
this.ln, err = tls.Listen("tcp", u.Host, config) func NewTLSConfig( crt, key string) *tls.Config {
// Import client certificate/key pair
certpool := x509.NewCertPool()
pemCerts, err := ioutil.ReadFile(crt)
if err == nil {
certpool.AppendCertsFromPEM(pemCerts)
}
// Create tls.Config with desired tls properties
return &tls.Config{
RootCAs:certpool,
}
}
//将给client设置tlsConfig
connOpts.AddBroker(uri).SetTLSConfig(NewTLSConfig(ca, crt, key))
mc = MQTT.NewClient(connOpts)
surgemq 添加ssl的更多相关文章
- nginx本地的测试环境添加SSL
要在本地添加SSL,首先要做的是防火墙是不是放开了443端口,同时,在nginx安装时是不是支持了ssl模块,这个安装网上很容易找到相关资料 防火墙,个人还是用iptables比较直观 先将selin ...
- CentOS6.5 下在Nginx中添加SSL证书以支持HTTPS协议访问
参考文献: 1. NginxV1.8.0安装与配置 2. CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问 3. nginx配置ssl证书的方法 4.nginx强制使用https访问 ...
- Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书)
前言 在我写完Centos7.4下用Docker-Compose部署WordPress这篇文章后,我的个人博客已经正式的开始运作.但考虑到网站访问的安全性以及今后可能会重复利用服务器来部署其他网站的可 ...
- 如何给网站添加SSL证书(免费)
上篇讲了如何将网站部署到服务器上,这篇就讲如何给网站添加SSL证书. 1.先到腾讯云ssl证书认证那里申请一个证书 2.DNS认证 3.下载解压nginx里面的文件 4. 在服务器上/www目录下创建 ...
- nginx添加ssl证书
ssl的证书是通过docker nginx letsencrypt 这篇随笔生成的,下面介绍如何在nginx中添加ssl 这个为全部配置, 需要替换你自己的域名,配置中强制https了 server ...
- nginx 动态添加ssl模块
一.查看nginx模块 /usr/local/nginx/sbin/nginx -V 二.安装openssl包 yum -y install pcre pcre-devel zlib zlib-d ...
- Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他
添加 SSL 如果你计划在你的应用中启用 SSL ,请参考 Securing your Atlassian applications with Apache using SSL页面中的内容,并确定你在 ...
- 给hmailserver添加SSL支持
我们使用stunnel来给hmailserver添加ssl支持,stunnel是一个开源跨平台提供全局TLS/SSL支持的软件,它可以给很多本身不支持ssl的软件来提供安全的加密连接,同样可以用于hm ...
- 为添加了自定义域名的GitHub Pages添加SSL,启用强制HTTPS(小绿锁)
直奔主题 为什么要使用https协议? 提高网站访问安全性,网络连接都是加密的 (PS:虽然SSL并不是无懈可击的,但是我们应该尽可能提高窃听成本). 目前越来越多的浏览器会判断当前站点支不支持htt ...
随机推荐
- windows编程经典书籍
本人是刚刚开始学习windows编程的,感觉看雪学院的大牛很NB.想找一些书籍来看学习学习,可是不知道看哪些书好.驱动,对菜鸟们来说真是一个很深奥的话题,所以 ,我找来了这篇文章供大家分享,以后大家发 ...
- hdu 5045 N个人做M道题的正确率
http://acm.hdu.edu.cn/showproblem.php?pid=5045 给出N个人做M道题的正确率,每道题只能由一个人做出,并且当所有人都做出来且仅做出一道题时,做过题的人才可以 ...
- Python学习-22.Python中的函数——type
type函数可以检测任何值或变量的类型. 例子: def printType(var): print(type(var)) class TestClass: pass printType(1) pri ...
- SSH 安全建议
当你查看你的 SSH 服务日志,可能你会发现充斥着一些不怀好意的尝试性登录.这里有 5 条常规建议(和一些个别特殊策略)可以让你的 OpenSSH 会话更加安全. 强化密码登录 密码登录很方便,因为你 ...
- VSTS 更名为 Azure DevOps
微软正式对外宣布Azure DevOps,其实就是原来的VSTS,我们来看一下Azure DevOps的介绍: 今天我们宣布Azure DevOps.与世界各地的客户和开发人员合作,很明显,DevOp ...
- Weekly Contest 132
1025. Divisor Game Alice and Bob take turns playing a game, with Alice starting first. Initially, th ...
- A - 开门人和关门人(sort+结构体)
点击打开链接 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input 测试输入的第一行给出记录的总天数N ( ...
- jzoj5879. 【NOIP2018提高组模拟9.22】电路图 B
tj:一道好題 看區間操作可以想到線段樹 並聯操作公式:a1∗a2/(a1+a2)a1*a2/(a1+a2)a1∗a2/(a1+a2) 串聯操作公式:a1+a2a1+a2a1+a2 我們發現,一個區間 ...
- C++中将二维数组(静态的和动态的)作为函数的参数传递
在C++编程中,我们经常将数组作为参数传递到另一个函数,数组的维数不同,传递方式也不同,此处将作一个总结,包括一维静态.动态数组,二维静态.动态数组. 一,一维数组(静态.动态一维数组) 1, 一维数 ...
- CF 798B 渣渣题
题目链接:http://codeforces.com/contest/798/problem/B 此题是我打河工大校赛前一晚熬夜打CF时硬肛过去的B题,今天补题时,偶然看到dalao的代码,ORZ,s ...