情况
考虑具有许多功能的标准软件,个人公司客户购买了所有可用功能的一部分的许可证。为了简化开发和部署,所有功能始终存在:所有客户都使用同一安装程序,并附有单独的功能列表,其中列出了可用的功能。每个客户(用户)都有单独的软件,支持合同,通常每个客户每年签一份或多个附加合同,以接收新功能(按需开发或自签署原始合同后便可用)。 >
问题
我们需要消除激活与客户(并由客户付费)合同未涵盖的功能的可能性。对我们而言,它归结为锁定功能部件定义文件,以致于无法对其进行修补。
技术细节
在此阶段,我们只需要脱机支票,不希望许可服务器或在线支票。
应用程序是传统的服务器-客户端体系结构,服务器是用C ++编写的,客户端是通过HTTPS与服务器通信的网站。我们所有的客户都使用Windows Server(各种老式)。我们使用Atlassian Bamboo for CI,并作为构建服务器使用WIX构建MSI安装程序包。
除了将OpenSSL库用于TLS并拥有我们自己的CA用于开发和部署之外,团队中没有人拥有任何加密方面的经验。我们不知道可用的内容,例如Windows可以帮助甚至直接完成此任务。
法律详细信息
我们当前的所有客户都表现得很好,并且非常合作。我们的大多数客户都在德国,而所有客户都在欧洲(到目前为止),它们都拥有良好的法律体系(这是主要的杠杆作用,其次是功能许可)。我们需要主要针对复选框打勾来实现功能许可,并避免将来出现不愉快的意外。我们不对客户进行审核。
我们当前的想法
我们当前的想法是使用我们的私钥(沿着PGP消息签名的行)对功能文件进行加密或签名,在程序本身中包含我们的公钥,并在启动时检查签名/解密许可证文件。我们知道有可能更改程序二进制文件中的公钥并重新签名/重新加密新的许可证文件。到目前为止,除了使用现成软件的可能方案之外,这已经超出了我们客户的成熟水平,该软件将能够以简单且用户友好的方式进行操作。
问题
我们的方法有意义吗?还是有一些我们找不到的标准方法?
答案 0 :(得分:1)
鉴于您的描述,我认为您的做法是正确的。我使用类似的方法将基本许可证功能编码为由私钥签名的许可证密钥,而相应的公钥则随应用程序捆绑包一起提供。 对于“在线”客户端,我根据许可证服务器验证密钥并从那里获取更新的许可证功能,但是对于以“离线”模式运行产品的客户,启用的功能仅基于许可证数据的内容。
“许可证服务器”解决方案的优势在于,可以立即更新具有Internet连接的安装,而不必交付新许可证(或您的情况下的新功能文件)。
不管您是否要使用现有解决方案,您都应该看看那里有什么可用-例如SoftwareKey's solution。
答案 1 :(得分:1)
我会在这里同意@Juraj Martinka的观点,因为您的团队中没有人拥有任何加密方面的经验,因此我强烈建议您外包此类要求。
有很多可供选择的选项来集成市场上已经存在的第三方解决方案。但是,由于您的公司在德国拥有大部分业务,因此我建议您使用NetLicensing。他们位于德国,在“服务即许可”(LaaS)领域提供一流的解决方案。
一种称为“多功能”的解决方案可用于解决您的目标。这种许可模式允许根据用户的需求和预算启用或禁用产品功能。它可以用于创建从“精简版”到“标准版”,“专业版”,“企业版”等版本的升级路径,而无需修改软件或卸载现有版本。
我想在这里强调的另一件事是,他们提供在线和离线验证,我相信这很适合您的需求。
最后,我要说的是,您总是可以自己编写一个密钥解决方案,但是如果您想完美地完成它,请让更多有能力和经验丰富的专业人员来解决。