我在云服务器中使用 TLS 的自签名认证运行 c# MQTT 代理(在套接字而不是 websocket 中),现在客户端无法连接到服务器并收到此错误消息
远程证书被提供的 RemoteCertificateValidationCallback 拒绝
MQTT 代理是否可以使用自签名认证?
使用 TSL 证书的最佳实践是什么?
我在云服务器中使用 TLS 的自签名认证运行 c# MQTT 代理(在套接字而不是 websocket 中),现在客户端无法连接到服务器并收到此错误消息
远程证书被提供的 RemoteCertificateValidationCallback 拒绝
MQTT 代理是否可以使用自签名认证?
使用 TSL 证书的最佳实践是什么?
我认为这与这个SO 问题有关。
你需要看看你在这里试图实现什么。
经纪人可以使用自签名证书来识别它自己,只要客户端都有该证书的副本来验证它。
为客户端使用自签名证书没有多大意义,因为代理需要保留所有不同客户端证书的列表以检查任何传入连接。如果所有客户端证书都由一个 CA 证书签名,那么代理只需要一份 CA 证书来验证所有客户端证书。
如果您使用相同的 CA 证书来签署代理证书,那么这一切也会变得更容易。请注意,x509 证书可以具有不同的标志,这些标志可以添加/删除用于区分证书以识别服务器(代理)或客户端的属性。例如,服务器证书应具有与客户端用于连接到代理的主机名/IP 地址相匹配的 SAN 条目。
运行您自己的 CA 非常简单,并且有很多关于如何使用 openssl 在线完成的示例。
证书的重点是一个端点可以确定另一个端点就是他们所说的那个人,而不是其他人。
在最常见的情况下,是客户端检查服务器是否提供了与其连接的域名匹配的有效证书,服务器具有相关联的私钥,并且客户端可以追溯到他们信任的人。
因此,如果您连接到 example.com,服务器应该有一个 example.com 的证书,以及匹配的私钥,并且该证书需要由他们信任的人签名。
浏览器和大多数其他客户端的默认“信任”是属于证书颁发机构 (CA)的根证书列表,这些证书已经根据CA/浏览器论坛选择的标准进行了审查。它涉及许多关于如何检查域所有权(以及可能的 OV 或 EV 证书的其他标准)、安全性、审计、撤销等的规则。
符合这些标准的 CA 通常包含在根证书存储中,无论是在操作系统(Windows、macOS、各种 Unix 发行版……)还是浏览器(Firefox,大多数其他人都依赖于操作系统)中。
如果 example.com 的证书由这些 CA 之一签署,则它是可信的。如果不是(如自签名证书的情况),则不是。
如果您希望每个人都可以使用您的网站,那么除了从这些 CA 之一获取证书之外,您别无选择。
另一方面,如果您控制所有客户端设备,那么您可以将证书添加到所有这些客户端的受信任证书存储中。
另一种方法是允许不安全的连接(不检查证书是否可信),但最终结果是......它不安全!