通过HTTPS进行M2M通信-如何进行身份验证



需求

我目前正在为一家机器销售商开发PHP门户网站。他的机器能够通过带有LAN端口的集成SBC通过互联网进行通信。购买机器的消费者可以在登录机器卖家门户后在线配置机器。

在线配置后,他们可以通过HMI(机器本身的触摸显示器)将配置文件下载到机器上。配置文件包含有价值的私人信息。HMI不是基于浏览器的。这是一个二进制应用程序,例如,它有一个按钮"加载配置"。剩下的必须在后台的bash/php脚本中完成。

身份验证解决方案

我处于怀孕的早期阶段,但我想知道一些过程。我从来没有一台机器需要访问我的服务,只有人类。到底该怎么做?

我有三种方法:

1.使用"API-Key"访问

意味着:SBC的操作系统中有一个文件,其中包含类似8asd7d7d的序列。当我收到对portal.company.com/getConfig/8asd7d7dGET-请求时,我知道它来自哪台机器,并且它被允许接收此配置。

缺点:买方可以访问SBC文件系统。他可能会意外地毁掉这份文件。他可以找到生成方案,并从其他买家那里下载配置文件。

2.生成一次性UUID-URL

意思是:消费者在线创建他的配置。之后,他会显示一个一次性的URL,如portal.company.com/getConfig/d8ac2292ea1fec3fe5c65e6ef573,他可以在HMI中输入并加载文件。

缺点:消费者必须在HMI的显示屏上键入一个长URL。

3.模拟人工身份验证过程

意味着:机器向portal.company.com/login发送一个有效的post请求,其中包含其人类所有者的登录数据。它得到一个会话cookie(在纯PHP脚本这样的非浏览器环境中,这可能吗?!),门户逻辑知道哪些URL是可访问的,哪些是不可访问的(就像人类访问者一样)。

还有其他更好的想法吗

我倾向于使用解决方案2,因为它相对容易实现,而且希望是安全的(让我们假设sha512字符串作为URL参数)。你有什么更好的建议吗?请注意,另一种方式是不可能的,门户不能主动将数据推送到机器上(因为它没有固定的IP,没有Web服务器,…)

如果设备支持加密功能,则可以使用PKI。使用设备公钥加密数据。只有知道私钥的设备才能解密配置文件。PKI还支持身份验证。在这里,设备连接到一个请求客户端证书的登录门户,在对客户端进行身份验证后,配置文件被发送到设备公钥加密的设备。

缺点:每个设备都需要一个客户端证书。

相关内容

最新更新