我被要求为我们的产品实施许可模式。它们是非常昂贵的产品,客户很少,分布在世界各地,基本上每个人都有一个设计环境(安装在单个 Windows 机器上的 Windows 应用程序,每个客户有 1 到 150 个客户端机器)和一个托管生产环境的 Web 服务器(每位客户 1 到 8 台机器)。我们的产品已获得服务器使用许可,因此客户可以使用任意数量的客户端;我们决定不许可服务器部分(因为它受 SLA 协议约束),而只许可客户端,因为一段时间后无法使用客户端,系统基本上变得无用。
我们的基本假设是客户是“足够诚实的”,如果没有适当地获得过期许可证,我们只想介绍停止客户端设计环境。
我评估了不同的许可产品,它们太贵或太难管理,所以我想出了这个简单的解决方案:
- 许可证将是一个简单的签名 XML 文件,使用 w3c 的标准 XML 签名功能签名,使用将通过 USB 密钥提供给管理部门的私钥;如果他们丢失了副本,那么许可模式将失败,但这将是他们的错
- 客户端将在启动时打开许可证文件并使用嵌入在二进制文件中的公钥检查其有效性
- 如果许可 XML 有效并且其中的数据(到期日期和产品名称)与设计人员的工作相比是正确的;如果没有,将显示适当的消息
关于可能的问题或如何改进方案的任何想法?