需求
我目前正在为一家机器销售商开发PHP门户网站。他的机器能够通过带有LAN端口的集成SBC通过互联网进行通信。购买机器的消费者可以在登录机器卖家门户后在线配置机器。
在线配置后,他们可以通过HMI(机器本身的触摸显示器)将配置文件下载到机器上。配置文件包含有价值的私人信息。HMI不是基于浏览器的。这是一个二进制应用程序,例如,它有一个按钮"加载配置"。剩下的必须在后台的bash/php脚本中完成。
身份验证解决方案
我处于怀孕的早期阶段,但我想知道一些过程。我从来没有一台机器需要访问我的服务,只有人类。到底该怎么做?
我有三种方法:
1.使用"API-Key"访问
意味着:SBC的操作系统中有一个文件,其中包含类似8asd7d7d
的序列。当我收到对portal.company.com/getConfig/8asd7d7d
的GET
-请求时,我知道它来自哪台机器,并且它被允许接收此配置。
缺点:买方可以访问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还支持身份验证。在这里,设备连接到一个请求客户端证书的登录门户,在对客户端进行身份验证后,配置文件被发送到设备公钥加密的设备。
缺点:每个设备都需要一个客户端证书。