License管理,流程和页面设计 - 图文

更新时间:2023-10-23 08:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

License(产品许可文件)

程序逻辑图

License发行时填的信息

客户的国家地区,所在的行业

客户联系人,客户电话,服务代表联系人,服务代表电话;

然后重新注册的理由可以通过下拉框进行选择,如果您重新注册的理由不属于列出项,可以在备注中进行补充,最后输入产品序列号、CDKEY、验证码,点击“提交”。见红色标记。

●License管理

首先我们需要确立我们实现的管理目标 1、license资源使用的统计、管理和分析 2、CAD应用软件使用的统计和分析 3、用户使用情况的统计与分析

分配license给用户

对用户进行分组控制

将使用软件的所有用户分成若干组,对应于实际工作中的各个工作/项目组,每组具有不同的优先级。每一组拥有的license 种类、数量、运行时间窗口都可以由LSF来定义和管理。

根据用户优先级优化软件license的使用 用软件的不同用户/项目组具有不同的优先级。当软件的license数量足够多时,用户都可以正常使用。当软件license不足时,高优先级的用户作业将强行抢占低优先级的作业,保证紧要作业的及时完成。

License到期监控及预警

许可证到期预警信息窗口能够非常直观的显示各个功能模块的到期预警,以便用户续买License而不妨碍正常工作需求。

此窗口显示信息包括:功能模块的到期时间、功能模块的供应商和软件所在的服务器信息。

许可证服务器预警界面默认显示到当前为止1个月内将到期的所有功能模块内容,每天晚上系统自动的将快到期的功能模块打包作为附件发送到指定的用户邮箱。

同时,用户可以自定义到期时间进行查询更短或更长时间到期的功能模块信息,查询的结果支持导出到Excel和TXT文件中。

License对应实时用户信息

许可证管理监控系统(Reporter License的统计分析)

许可证管理监控系统(License Reporter简称Reporter)统计本地或者全局的许可证服务器(License Server)详细和准确的使用信息,这些服务器可以分布于任意位置,不同的时区。同时支持查询实时信息和历史信息,以及支持查询离线使用情况(如外借情况)。不仅能反映单个用户的License使用情况,也可反映单个部门(项目组或者分公司)的使用率,甚至也可反映整个企业的软件许可证(License)资源使用率。

1、 对软件的功能模块的使用效率进行报告,量化的数据使企业可以合理安排预算;

2、 对同一用户同时占用多个相同的license进行提醒,IT管理者可以做出适当的处理措施 3、 监控license server的运行状况,一旦档机,立即报警

4、 集中监控和报告各类软件license使用情况、峰值时间、license到期信息、甚至硬件资

增强功能包括:

1、 自动收回用户占着却长时间不用的license;

2、 License调度,IT管理者可以决定是手动还是自动释放优先级低的用户的license给优先级高的用。这是一个很好的功能,可以很好地调配公司的资源。类似于车位,如果A拥有这个车位,当A不在时,可以允许B使用,当A来到时,B必须立刻让出车位给A 、

季度报表

服务器统计

杜绝软件许可证(License)资源的浪费

据研究调查发现,软件许可证(License)资源的浪费现象十分严重。常见的浪费有:员工未关闭程序就离开办公室、员工因License紧张早上抢占License、企业因License暂时紧张而多购License、企业因规模的变化导致License采购过多。通过reporter模块您可以追踪多种类型的License使用率,并以此制定来年的采购计划,节约成本最高可达30%。

详细的使用信息

License过期预警邮件提示

许可证服务器(License Server)异常状态邮件提醒 员工超长使用时间(超过24小时)提醒 自定义的SQL数据库查询 License使用的峰值报告

项目组/部门/子公司,每天/每周/每月/每季度使用软件许可证(License)资源的累计时间

四、结论

工欲善其事,必先利其器。License管理系统的使用。

对宝贵的软件license进行监控和管理,可实现自动调配license,使license发挥更大的作用。

License的生成和验证

用KeyTool实现的一个简易License生成与验证系统

1.背景

公钥密码概念是由Whitfield Diffie和Martin Hellman于1976年提出的,他是密码学历史的一个重大成就。公钥密码与以前的密码方法都大相径庭:一是以前的密码算法都基于代换与置换操作,而公钥密码使用数学函数进行变换;二是公钥密码体制使用非对称的方式,使用两个密钥(加密密钥和解密密钥),而传统的密码算法仅使用一个密钥。公钥密码体制的提出首先是为了解决利用传统密码体制进行密码分发时遇到的问题,数字签名时期后期应用的一个重要领域。统观公钥密码算法,它们的数学基础是比较狭窄的。大多数公钥密码算法都

是基于如下三种数学难题之一的:背包问题,给定一个互不相同的数组成的结合,要找出一个子集,其和为N;离散对数问题,如果p是素数q和M是整数,找出x使得gx ≡M(mod p),或者就是基于椭圆曲线上的离散对数问题;因子分解问题,设N两个素数的乘积,找出满足一定关系的分解因子。

KeyTool

利用J2SDK提供的密钥对生成工具KeyTool生成基于DSA算法的密码对,并保存为JKS(Java Key Source)形式的外部密码仓库文件。在使用KeyTool过程中需要提供一些参数来完成对于所生成密码的设定,其中包括:

alias:标识密码对字符串,保证在密码仓库内的唯一性。并将作为在日后访问密码仓库时所使用的入口地址。

keyalg:生成密码对时所采用的算法,这里将使用DSA作为默认密码算法。

dname:记录有关密钥发放机构的字符串。其内容的规范化表示细节参见KeyTool的相关帮助和技术文档。

keypass:为所生成密钥对提供的密码,用于限制对其中私钥信息的访问。只有在正确的提供了密码后,才可以访问密码仓库中相应私钥信息。

storepass:初始化密码仓库时的密码,默认为第一次生成过程中所提供的密码仓库秘密码。 通过使用Java2 SDK提供的KeyStore数据结构可以完成对密码仓库中已经存储密钥的查询和管理工作。在实现过程中通过提供KeyStorage外层包装操作对象,来提供更为完善的对外部密码仓库文件访问的支持,包括读入一个JSK格式的密码仓库文件、获得密码仓库中的所有密码对入口地址、获得一个密码对的X.509格式公钥信息、判断当前密码仓库中是否存在特定的公钥信息。

2.流程

2.1 License文件生成流程

实现批量生成License文件的功能,其流程如下:

STEP 1:生成密钥对

1a:密钥仓库是否存在,如不存在则重新建立

1b:获得当前时间的Long型表示,将其设置为密钥访问入口地址 SETP 2:导出公钥文件(用于发送给终端用户)

2a:提取出当前密钥仓库中的所有密钥访问入口地址 2b:更具每个公钥访问入口地址,提取出其所对应的公钥信息 2c:将公钥信息转换为X.509公钥体系结构表示 2d:将公钥信息保存到外部的公钥文件 STEP 3:生成license文件

3a:更具密钥仓库中的所有入口地址得到其所对应的私钥信息 3b:读取license.properties文件

3c:验证license.properties文件中的功能块信息 3d:验证并添加所生成License的其实与终止时间

3e:生成License信息将其保存为license_*****.lic文件

2.2 License文件验证流程

要求输入用于访问License文件的密码,和用于提取进行验证的公钥信息的序列码(这里

实现为一个Long形的时间变量)。其主要流程如下:

STEP 1:读取License文件和提取解析公钥信息

1a:根据License文件访问密码对待验证文件进行访问 1b:从公钥仓库中提取公钥信息

SETP 2:将License文件中的密文信息解码为明文信息

2a:提取PRODUCT_ID信息,计算出模块运算优先级别 2b:提取出验证文件中的有效起止时间

3.License文件生成 3.1加密密钥对生成

在生成密钥对过程中将利用long型的时间量,作为对于每个存储与.jsk文件中密钥对进行提取的入口地址。另外通过buildKeyPairByTime()方法,可以机你小女冠批量化的密钥对生成。在实现过程中,考虑到实际生成过程中的IO和系统调用耗时。将相邻的两次密钥对生成间隔设置为500ms,保证不会发生前后两次生成结果的冲突。

最终所生成的密钥对信息将保存在keystore.jks文件中,该文件会有一个访问口令。默认为在第一次生成密钥对时所提供的访问口令。

3.2验证信息导出

验证信息的导出,完成将上一步生成的密钥对中的公钥信息进行提取。最终生成的publicCerts.jks文件将作为在客户端进行License认证时,所采用的公钥密码的提取仓库。只要在正确的提供访问密码和访问入口信息,才可以进行正确的信息提取。

3.3生成License时的配置信息

值得一提的是,可以通过配置license.properties文件来完成对于所生成License文件的配置。如下是一个标准的生成配置文件的内容:

列表1:license.properties文件配置信息 # Add the permitted product ID here for partial usage limitation [1]PRODUCT_ID=*****_1.0;*****_1.0;*****_1.0;*****_1.0 # The basic license infomation FIRSTNAME=***** LASTNAME=***** COMPANY=***** ZIP=***** COUNTRY=CHINA STATE=BEIJING CITY=BEIJING STREET=***** EMAIL=ohmyvince@gmail.com PHONE=(010)5 FAX=(010)51532404 # Output license encoding formation

Signature signatureChecker = Signature.getInstance(\

signatureChecker.initVerify(pubKey);

signatureChecker.update(plainText.getBytes());

// 验证签名是否正常

if (signatureChecker.verify(signed))

return true; else

return false;

} catch (Throwable e) {

System.out.println(\校验签名失败\

e.printStackTrace();

return false; } } }

实验性的Silverlight控件纯客户端注册验证机制

本文和大家分享一下如何实现一个实验性的Silverlight控件纯客户端注册验证机制。先给大家介绍一下Silverlight客户端控件的使用情景。一般来说,Silverlight客户端控件会销售给开发Silverlight程序的公司,他们是控件的购买者。他们开发的程序中会用到Silverlight客户端控件。但是Silverlight控件最终是在浏览Silverlight程序的网站用户机器上执行的。说的有点绕,请参照下图。

这个纯客户端注册验证机制主要流程如下:

1, 控件购买者下载使用Silverlight控件(Silverlight控件中包含PublicKey及验证License的逻辑)。 2, 控件购买者通过控件生成商提供的网站输入一些注册信息(如输入程序部署路径等唯一标示),付费,完成注册。控件生成商会记录这些信息,并使用PrivateKey生成一个RSA签名过的License文件。

3, 控件生产商会将这个RSA签名过的License文件返回给控件购买者。 4, 控件购买者会将License文件绑定到他开发部署的程序中。 5, 网站用户浏览控件购买者开发部署的网站,下载Silverlight控件在网站用户机器上执行,并验证License文件的签名及程序部署路径等唯一标识。

License格式如下:

Code [http://www.xueit.com]

31f81fef-a036-4f6f-b47b-d0c8da1674ea Vendor.TestControl,

Version=1.0.0.0,

Culture=neutral,

PublicKeyToken=696fd0988622108f

http://localhost:8888/ClientBin/Customer.TestApp.xap

MVALuQLzIK8SWfZ5q25/PD3P6ZV0FLqIhCt5YcZ7yNkBTuLABg/TGggC4imU2S6QyZBOLsXyEOSFfXXxBn7Spwhkr6P CbQb0MvotPgr5nenLdccm7UwABkn7

PgtEchObGba5KUhHCAkvvSFfwi/e480AYI2YXznVpCsP8RA8o=

License中记录了控件生成商数据库中License信息记录Id,强名称签名的目标控件程序集全名,程序部署路径等一些唯一性标示及防止篡改这些信息的RSA数字签名。

当用户浏览网站时,Silverlight控件会下载到在用户机器上执行,从而进行注册码验证工作。它会首先验证License的合法性(即使用RSA签名验证算法检验License文件是否被篡改),然后会判断程序集及唯一性标示是否正确。从而判断控件是否成功注册

public class License {

private

static

readonly

string

PublicKeyXmlString

=

\A/UX4gO3XQhEr2jx09ZLQWYvwVJdSg4JhoO46fw11nsQObzwd

wz/jEcjSF9MCfK

CVb3qMHH9TBgHh5dy7zbB

hUkuacm/nKY9bPfaoNj4sA2YnbiPl3 v80qy/gE=AQAB\ private static readonly RSAManaged.RSAPublicKey PublicKey = null; static License() {

PublicKey = RSAManaged.RSAPublicKey.FromXmlString(PublicKeyXmlString); }

internal License() { }

internal string Id { get; set; }

public string AssemblyName { get; internal set; } public string AuthorisedApp { get; internal set; } internal byte[] Signature { get; set; }

public bool IsValid() {

//在这里验证License是否合法

byte[] signData = Encoding.UTF8.GetBytes(this.Id this.AssemblyName this.AuthorisedApp); SHA1Managed sha1 = new SHA1Managed();

bool verifyResult = RSAManaged.RSAManaged.Verify(signData, PublicKey, sha1, this.Signature); sha1.Clear(); return verifyResult; }

验证程序集全名及程序部署路径等唯一性标示代码如下:

Code [http://www.xueit.com]

private static bool ValidateLicenseFile()

{

AssemblyName assemblyName = new AssemblyName(Application.Current.GetType().Assembly.FullName);

Uri uri = new Uri(\ assemblyName.Name \UriKind.Relative);

StreamResourceInfo sri = Application.GetResourceStream(uri); if (sri == null) {

return false; }

string licenseXmlString = new StreamReader(sri.Stream).ReadToEnd(); License license = License.FromXmlString(licenseXmlString); if (license == null || !license.IsValid()) {

return false; }

//在这里验证程序集全名是否合法

if (Assembly.GetExecutingAssembly().FullName != license.AssemblyName) {

return false; }

//在这里验证程序部署路径等唯一性标示

if (Application.Current.Host.Source.AbsoluteUri != license.AuthorisedApp) {

return false; }

return true; }

优点:

+使用私钥签名,公钥验证,能有效防止伪造License文件及分析代码写出注册机(不考虑篡改程序逻辑的爆破方式)。 +纯客户端验证不需要跨域访问,也不需要控件购买者在程序发布服务器端部署其他东西。

缺点:

-比直接输入注册码麻烦

-在现在的Silverlight版本中,只找到部署地址这个特征标示,因此只能做部署License授权。不能做成像WinForm控件那样为每个开发人员机器授权的方式

流程图片和解释

License 的架构

通常,当用户第一次连接到 Citrix 产品时,产品会从许可证服务器请求许可证。 当许可证服务器准许许可证请求后,Citrix 产品会保留许可证为其所使用。 为此目的保留许可证称为签出许可证。 当用户从产品服务器注销时,产品会将许可证返回到许可证服务器。 此过程称为签入许可证

产品通过三个步骤来签出许可证:

在启动时,运行 Citrix 产品的计算机签出启动许可证。 客户端设备连接至产品服务器

产品从许可证服务器请求许可证。

本文来源:https://www.bwwdw.com/article/1yuf.html

Top