我在研究远程灯光控制系统。设备/控制器就像raspberry pi大小的单元,运行嵌入式程序来接受运行在远程web服务器上的管理应用程序的命令。这些设备部署在现场(街道),并通过GPRS和以太网连接到互联网。
有数百个这样的设备没有主机名,它们的IP也不是静态的。因此SSL证书在这里可能是不可能的?
“共享秘密”方法在这里最有效吗?但是,将这些密钥分发给已经存在的设备将具有挑战性,因为它不能通过不安全的OTA来完成。
发布于 2017-10-26 16:56:35
对我来说,你的系统的设计要求还不完全清楚。但是,我将在下面假设您完全控制了设置,并且这个设置只有以下几个要求:
有几种实现这一功能的选项,如
这些设置类似于从客户端启动安全连接(即VPN隧道或TLS),因为客户端IP地址是动态的,并且管理系统具有静态IP或至少静态主机名。向其中添加客户端的一些身份验证可能很有用,因为您不希望某个攻击者连接到您的管理系统。
一种方法是使用您自己的CA创建您自己的PKI,并为每个设备颁发唯一的证书。此证书的主题可以是某种设备id,您可以使用它来标识设备。这些客户端证书可用于VPN中的身份验证或TLS连接中的客户端证书。而且,如果证书被泄露(即有人入侵了设备),您可以在您的管理系统中集中阻止该证书的访问。
发布于 2017-10-26 17:16:29
有数百个这样的设备没有主机名,它们的IP也不是静态的。所以SSL证书在这里可能是不可能的?
记住:在试图找出任何安全解决方案之前,首先确定您的威胁配置文件。你想阻止什么袭击?
我想主要的问题之一是防止攻击者假装是控制服务器,并成功地向控制器发送命令。因此,您希望设备能够对服务器进行身份验证,这需要服务器端的证书,而不是设备上的证书--如果客户端启动到服务器的连接,则需要传统的HTTPS (或者类似HTTPS的,如果使用不同的协议)设置;如果服务器正在启动到设备的连接,则需要客户端证书。
发布于 2017-10-26 18:06:17
有数百个这样的设备没有主机名,它们的IP也不是静态的。因此SSL证书在这里可能是不可能的?
可以在不使用DNS可解析名称或固定IP地址的情况下颁发SSL客户端身份验证证书。不必将服务器配置为使用DNS来验证它们。
正如Stephan建议的那样,为这个系统建立自己的PKI似乎是正确的方法。除非您的组织已经拥有自己的PKI,否则这可以非常简单*就像使用OpenSSL生成自己的自签名证书一样,然后使用该CA证书对所有服务器和客户端证书进行签名。您必须在每个服务器和客户端中将自定义CA证书安装为受信任的根证书。(如果这些是封闭生态系统的一部分,请考虑删除客户不需要的任何受信任的根证书。)
您可能会有这些设备的清单,作为运行组织的一部分。无论分配给他们什么ID,这都可能适合在证书的DN中设置。但是,您当然也不必这样做,特别是当您不想将内部名称放在证书上时。相反,您可以预先生成大量证书,并在它们向您注册时将它们分发给新客户端。然后跟踪证书ID和颁发给它的客户端ID,并使用该关系授予客户端权限。这将使您的颁发CA安全脱机,不受注册客户端的系统的影响。
如果您的组织已经拥有PKI,请与他们协商。他们应该为您的设备指定一个严格保留的组织单位。然后,可以让服务器验证客户端证书是否只有对设备有效的OU。这样,您的组织中的其他组将无法向流氓/未知设备颁发证书。
记住,一旦设备在现场出现,它们可能会被偷、篡改和/或拆卸。不要将更多的信任放在客户端证书上,因为您需要这样做。不允许这些设备证书在服务器上授予管理权限。如果设备丢失,则迅速使其证书失效。
*我很抱歉将“简单”一词与PKI结合使用。
https://security.stackexchange.com/questions/172226
复制相似问题