我的公司开发了一款连接 WiFi 的物联网产品。我想确保将用户的 WiFi 凭据输入设备的过程尽可能安全。目前,该产品处于原型阶段,因此我们可以(并且将)在它投放市场之前进行进一步的更改。
目前,流程如下:
- 该设备会创建自己的 WiFi 热点。此热点的凭据打印在设备本身的标签上。
- 用户访问某个 URL(由产品上的嵌入式 Web 服务器提供的网页,使用纯 HTTP)
- 用户在该页面上的表单中输入他的 WiFi 凭据
- 设备保存这些凭据并使用它们连接到用户的 WiFi
公司里的几个人认为这是安全的。攻击者需要进入热点以嗅探用户的 WiFi 凭据。
我不同意,因为我认为进入 WiFi 是一个相当低的障碍。攻击者可能在访问期间瞥了一眼标签上的凭据,强行进入 WiFi 热点或利用 WiFi 热点身份验证中的弱点(并非闻所未闻)。我建议将过程更改为如下所示:
- 该公司创建一个自签名 SSL 根证书。
- 我们使用此根证书来签署每个销售产品独有的单独证书。产品的证书和私钥在制造过程中嵌入闪存中。
- 用户访问我们的网站并下载我们的根证书并将其安装到他的操作系统中。
- 该设备会创建自己的 WiFi 热点。此热点的凭据打印在设备本身的标签上。
- 用户访问某个 URL(由产品上的嵌入式 Web 服务器提供的网页,使用 HTTPS 和设备的唯一证书。浏览器信任该证书,因为我们安装了根证书。)
- 用户将他的 WiFi 凭据输入到该页面上的表单中。信息通过 TLS 加密通道发送到设备。
- 设备保存这些凭据并使用它们连接到用户的 WiFi
我认为这个过程是非常安全的。但它带来了其他问题:
- 我们如何更新设备的证书?可能,但非常麻烦且费力。
- 用户必须手动安装证书。这对用户不是很友好,即使我们提供了非常详细的说明,技术娴熟的用户也可能无法正确执行此操作。
我的问题:
- 建议的流程对于物联网产品是否足够安全(将其想象为某种智能电表来测量您的用电量)?
- 有什么方法可以改善流程的用户体验(例如绕过安装我们的证书的需要)?
- 有没有什么方法可以为我们改进实现复杂性的过程(不影响用户的安全性)?
- 是否有其他方法可以将 WiFi 凭据获取到我们的设备上?我们不能使用蓝牙,设备既没有屏幕也没有键盘。