我有一个简单的MQTT摩斯基托服务器,我试图使其安全。
Mosquitto.conf:
log_type all
password_file /etc/mosquitto/mosquitto_users.txt
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
port 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
keyfile /etc/mosquitto/ca_certificates/server.key
certfile /etc/mosquitto/ca_certificates/server.crt
tls_version tlsv1在当前服务器上,我生成了:
CA证书
openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt服务器证书:
openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key自签名服务器证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 720根据msoquitto.conf配置放置的所有所需文件。
我使用以下命令来使用ca.crt证书订阅和发布消息。
mosquitto_sub -h 192.168.1.8 -t sensor --cafile ca.crt -p 8883 -d
mosquitto_pub -h 192.168.1.8 -t sensor --cafile ca.crt -m "test" -p 8883 -d一切都很好。但是男人之间的通讯安全吗?我应该把服务器放在互联网上,而没有人会获取信息吗?
发布于 2019-12-17 15:00:54
当它像这样工作的时候总是有点吓人。
如果你想测试它,你可能想让它失败。如果有人试图欺骗您的服务器,他们将无法使用由您(自签名) CA证书签名的证书。因此,如果客户端使用的CA证书与用于签署服务器证书的证书不匹配,您可能想看看会发生什么。
因此,要测试客户端mosquitto_sub和mosquitto_pub是否正确检查证书,可以尝试生成一个全新的“虚拟”CA证书。不要在服务器上安装这个。但是,尝试在mosquitto_sub和mosquitto_pub命令中使用它:
mosquitto_sub -h 192.168.1.8 -t sensor --cafile dummy_ca.crt -p 8883 -d
mosquitto_pub -h 192.168.1.8 -t sensor --cafile dummy_ca.crt -m "test" -p 8883 -d如果您的客户端与服务器安全地通信,那么这将失败。这是因为您的服务器的证书不会被客户端期望的CA证书签名。如果它适用于虚拟证书,那么您就有一个问题,您需要调查原因。
公钥加密使用密钥对(公钥和私钥)工作。私钥是保密的,从不与任何人共享。使用公钥加密的任何内容只能用私钥解密。即使是公钥也不能用来解密用公钥加密的东西.你无法从公钥中计算出私钥。
因此,要跨加密通道进行通信,设备(客户端和服务器)都向对方发送自己的公钥,将自己的私钥保密。黑客是否能得到这些并不重要,因为它们不能被用来解密任何东西。然后,客户端用服务器的公钥加密所有东西,服务器用客户端的公钥加密所有东西。只有服务器才能解密它接收到的消息,因为它是唯一有私钥解密消息的服务器。同样,客户端是唯一能够解密发送给它的消息的人。
证书仅用于确保黑客不能通过伪装成服务器来执行“中间人攻击”。证书包含三个关键信息:
这样,黑客就不能假装是您的服务器,因为他们必须:
https://unix.stackexchange.com/questions/557702
复制相似问题