我被要求为我们的产品实施许可模式.它们是非常昂贵的产品,几乎没有客户分布在世界各地,基本上每个客户都有一个设计环境(安装在单个Windows机器上的Windows应用程序,每个客户1到150台客户端机器)和一个托管生产环境的Web服务器(每位客户1至8台机器).我们的产品已获得服务器使用许可,因此客户可以使用任意数量的客户; 我们已决定不许可服务器部分(因为它受SLA协议约束)但仅限于客户端,因为在一段时间没有使用客户端的能力后,系统变得基本没用.
我们的基本假设是客户"足够诚实",而且我们想要涵盖的唯一事情就是如果未获得时间过期许可证的适当许可,则停止客户端设计环境.
我已经评估了不同的许可产品,它们太昂贵或太难管理,所以我想出了这个简单的解决方案:
许可证将是一个简单的签名XML文件,使用w3c的标准XML签名功能进行签名,使用私钥,该私钥将通过USB密钥提供给管理部门; 如果他们丢失了副本,那么许可架构将失败,但这将是他们的错
客户端将在启动时打开许可证文件,并使用嵌入在二进制文件中的公钥来检查其有效性
如果许可证XML有效且其中的数据(到期日期和产品名称)正确于设计人员的工作; 如果没有,将显示相应的消息
关于可能出现的问题或如何改进方案的任何想法?
我还没有看到一个许可方案,如果有足够的兴趣,这个方案在几周内就不会被打破.你的计划看起来非常好(但要确定,如果有人真的想要,他们会打破它).
无论你做什么,你都应该遵循Eric Sink的建议:
目标应该只是"让诚实的人诚实".如果我们走得更远,只会发生两件事:
我们打一场我们无法取胜的战斗.那些想作弊的人会成功.
我们通过使其更难以使用来伤害我们产品的诚实用户.
由于您正在为专为企业使用而设计的程序实施许可方案,因此您可以更简单,只需保留某种ID和到期日期以及客户端上的简单签名,并在许可证过期或签名失败时拒绝启动.打破它并不难,但没有许可计划,如果你认为你的客户诚实,这将是绰绰有余的.