License管理,流程和页面设计(12页).doc

上传人:1595****071 文档编号:37164589 上传时间:2022-08-30 格式:DOC 页数:12 大小:176.50KB
返回 下载 相关 举报
License管理,流程和页面设计(12页).doc_第1页
第1页 / 共12页
License管理,流程和页面设计(12页).doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《License管理,流程和页面设计(12页).doc》由会员分享,可在线阅读,更多相关《License管理,流程和页面设计(12页).doc(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-License管理,流程和页面设计-第 12 页License(产品许可文件)程序逻辑图License发行时填的信息客户的国家地区,所在的行业客户联系人,客户电话,服务代表联系人,服务代表电话;然后重新注册的理由可以通过下拉框进行选择,如果您重新注册的理由不属于列出项,可以在备注中进行补充,最后输入产品序列号、CDKEY、验证码,点击“提交”。见红色标记。License管理 首先我们需要确立我们实现的管理目标 1、license资源使用的统计、管理和分析 2、CAD应用软件使用的统计和分析 3、用户使用情况的统计与分析 分配license给用户对用户进行分组控制 将使用软件的所有用户分成若干

2、组,对应于实际工作中的各个工作/项目组,每组具有不同的优先级。每一组拥有的license 种类、数量、运行时间窗口都可以由LSF来定义和管理。根据用户优先级优化软件license的使用 用软件的不同用户/项目组具有不同的优先级。当软件的license数量足够多时,用户都可以正常使用。当软件license不足时,高优先级的用户作业将强行抢占低优先级的作业,保证紧要作业的及时完成。License到期监控及预警许可证到期预警信息窗口能够非常直观的显示各个功能模块的到期预警,以便用户续买License而不妨碍正常工作需求。此窗口显示信息包括:功能模块的到期时间、功能模块的供应商和软件所在的服务器信息。

3、 许可证服务器预警界面默认显示到当前为止1个月内将到期的所有功能模块内容,每天晚上系统自动的将快到期的功能模块打包作为附件发送到指定的用户邮箱。同时,用户可以自定义到期时间进行查询更短或更长时间到期的功能模块信息,查询的结果支持导出到Excel和TXT文件中。License对应实时用户信息许可证管理监控系统(Reporter License的统计分析)许可证管理监控系统(License Reporter简称Reporter)统计本地或者全局的许可证服务器(License Server)详细和准确的使用信息,这些服务器可以分布于任意位置,不同的时区。同时支持查询实时信息和历史信息,以及支持查询离

4、线使用情况(如外借情况)。不仅能反映单个用户的License使用情况,也可反映单个部门(项目组或者分公司)的使用率,甚至也可反映整个企业的软件许可证(License)资源使用率。1、对软件的功能模块的使用效率进行报告,量化的数据使企业可以合理安排预算;2、对同一用户同时占用多个相同的license进行提醒,IT管理者可以做出适当的处理措施3、监控license server的运行状况,一旦档机,立即报警4、集中监控和报告各类软件license使用情况、峰值时间、license到期信息、甚至硬件资增强功能包括:1、自动收回用户占着却长时间不用的license;2、License调度,IT管理者可

5、以决定是手动还是自动释放优先级低的用户的license给优先级高的用。这是一个很好的功能,可以很好地调配公司的资源。类似于车位,如果A拥有这个车位,当A不在时,可以允许B使用,当A来到时,B必须立刻让出车位给A季度报表服务器统计杜绝软件许可证(License)资源的浪费据研究调查发现,软件许可证(License)资源的浪费现象十分严重。常见的浪费有:员工未关闭程序就离开办公室、员工因License紧张早上抢占License、企业因License暂时紧张而多购License、企业因规模的变化导致License采购过多。通过reporter模块您可以追踪多种类型的License使用率,并以此制定来

6、年的采购计划,节约成本最高可达30%。详细的使用信息License过期预警邮件提示许可证服务器(License Server)异常状态邮件提醒员工超长使用时间(超过24小时)提醒自定义的SQL数据库查询License使用的峰值报告项目组/部门/子公司,每天/每周/每月/每季度使用软件许可证(License)资源的累计时间四、结论 工欲善其事,必先利其器。License管理系统的使用。 对宝贵的软件license进行监控和管理,可实现自动调配license,使license发挥更大的作用。 License的生成和验证用KeyTool实现的一个简易License生成与验证系统1背景公钥密码概念是由

7、Whitfield Diffie和Martin Hellman于1976年提出的,他是密码学历史的一个重大成就。公钥密码与以前的密码方法都大相径庭:一是以前的密码算法都基于代换与置换操作,而公钥密码使用数学函数进行变换;二是公钥密码体制使用非对称的方式,使用两个密钥(加密密钥和解密密钥),而传统的密码算法仅使用一个密钥。公钥密码体制的提出首先是为了解决利用传统密码体制进行密码分发时遇到的问题,数字签名时期后期应用的一个重要领域。统观公钥密码算法,它们的数学基础是比较狭窄的。大多数公钥密码算法都是基于如下三种数学难题之一的:背包问题,给定一个互不相同的数组成的结合,要找出一个子集,其和为N;离散

8、对数问题,如果p是素数q和M是整数,找出x使得gxM(mod p),或者就是基于椭圆曲线上的离散对数问题;因子分解问题,设N两个素数的乘积,找出满足一定关系的分解因子。KeyTool利用J2SDK提供的密钥对生成工具KeyTool生成基于DSA算法的密码对,并保存为JKS(Java Key Source)形式的外部密码仓库文件。在使用KeyTool过程中需要提供一些参数来完成对于所生成密码的设定,其中包括:alias:标识密码对字符串,保证在密码仓库内的唯一性。并将作为在日后访问密码仓库时所使用的入口地址。keyalg:生成密码对时所采用的算法,这里将使用DSA作为默认密码算法。dname:记

9、录有关密钥发放机构的字符串。其内容的规范化表示细节参见KeyTool的相关帮助和技术文档。keypass:为所生成密钥对提供的密码,用于限制对其中私钥信息的访问。只有在正确的提供了密码后,才可以访问密码仓库中相应私钥信息。storepass:初始化密码仓库时的密码,默认为第一次生成过程中所提供的密码仓库秘密码。通过使用Java2 SDK提供的KeyStore数据结构可以完成对密码仓库中已经存储密钥的查询和管理工作。在实现过程中通过提供KeyStorage外层包装操作对象,来提供更为完善的对外部密码仓库文件访问的支持,包括读入一个JSK格式的密码仓库文件、获得密码仓库中的所有密码对入口地址、获得

10、一个密码对的X.509格式公钥信息、判断当前密码仓库中是否存在特定的公钥信息。2流程2.1License文件生成流程实现批量生成License文件的功能,其流程如下: STEP 1:生成密钥对 1a:密钥仓库是否存在,如不存在则重新建立 1b:获得当前时间的Long型表示,将其设置为密钥访问入口地址 SETP 2:导出公钥文件(用于发送给终端用户) 2a:提取出当前密钥仓库中的所有密钥访问入口地址 2b:更具每个公钥访问入口地址,提取出其所对应的公钥信息 2c:将公钥信息转换为X.509公钥体系结构表示 2d:将公钥信息保存到外部的公钥文件 STEP 3:生成license文件 3a:更具密钥

11、仓库中的所有入口地址得到其所对应的私钥信息 3b:读取license.properties文件 3c:验证license.properties文件中的功能块信息 3d:验证并添加所生成License的其实与终止时间 3e:生成License信息将其保存为license_*.lic文件2.2License文件验证流程要求输入用于访问License文件的密码,和用于提取进行验证的公钥信息的序列码(这里实现为一个Long形的时间变量)。其主要流程如下:STEP 1:读取License文件和提取解析公钥信息 1a:根据License文件访问密码对待验证文件进行访问 1b:从公钥仓库中提取公钥信息 SE

12、TP 2:将License文件中的密文信息解码为明文信息 2a:提取PRODUCT_ID信息,计算出模块运算优先级别 2b:提取出验证文件中的有效起止时间3License文件生成3.1加密密钥对生成在生成密钥对过程中将利用long型的时间量,作为对于每个存储与.jsk文件中密钥对进行提取的入口地址。另外通过buildKeyPairByTime()方法,可以机你小女冠批量化的密钥对生成。在实现过程中,考虑到实际生成过程中的IO和系统调用耗时。将相邻的两次密钥对生成间隔设置为500ms,保证不会发生前后两次生成结果的冲突。最终所生成的密钥对信息将保存在keystore.jks文件中,该文件会有一个

13、访问口令。默认为在第一次生成密钥对时所提供的访问口令。3.2验证信息导出验证信息的导出,完成将上一步生成的密钥对中的公钥信息进行提取。最终生成的publicCerts.jks文件将作为在客户端进行License认证时,所采用的公钥密码的提取仓库。只要在正确的提供访问密码和访问入口信息,才可以进行正确的信息提取。3.3生成License时的配置信息 值得一提的是,可以通过配置license.properties文件来完成对于所生成License文件的配置。如下是一个标准的生成配置文件的内容:列表1:license.properties文件配置信息# Add the permitted produ

14、ct ID here for partial usage limitation1PRODUCT_ID=*_1.0;*_1.0;*_1.0;*_1.0# The basic license infomationFIRSTNAME=*LASTNAME=*COMPANY=*ZIP=*COUNTRY=CHINASTATE=BEIJINGCITY=BEIJINGSTREET=*EMAIL=ohmyvincePHONE=(010)5FAX=(010)51532404# Output license encoding formationENCODING=ISO-8859-1# The general pur

15、chase identity for further checkPURCHASE_ID=GPI2006-06-05.076# The general running number for further checkRUNNING_NO=GRN1493453# The language identity for the productLANGUAGE_ID=CN-GB2312QUANTITY=1REG_NAME=vinceRESELLER=KEG# The start and finish date for validtion period of the license file# Should

16、 with the format: 2START_DATE=2006.5.53FINISH_DATE=2006.10.104PURCHASE_DATE=2006.06.05# Additional license infomationADDITIONAL1=ADDITIONAL2= 在上边的配置文件中存在如下一些重要的配置选项:在标记为1行处,通过指定PRODUCT_ID元素的内容来达到为所生成的License添加功能模块支持的目的。这里通过用“;”隔开的一个字符串序列来添加不同的功能模块。在标记为24行处,通过指定三个时间信息。分别是License有效开始日期START_DATE、Licen

17、se失效日期FINISH_DATE和License发放日期PURCHASE_DAT,完成指定生成License文件过程中用到的相关时间信息。其他的配置信息,包含该License文件的一些其他基本信息。4License文件验证4.1验证公钥信息提取只有提供正确的License文件访问密码,和用于访问公钥仓库的Serial Number才可以进行对License文件的验证。完成从随License文件一起分发的publicCerts.jks文件中提取出用于解析的公钥信息。4.2有效性验证在得到了用于解析当前License文件的公钥信息后,如果可以正确的提取出License文件中的Plain Text

18、信息。就可以对其中的特定数据进行有效性验证。有效性验证包含如下两个方面:包括格式验证:防止文件损坏或恶意篡改。时间验证:在特定的使用区间内方可生效。4.3支持功能模块验证功能模块化验证通过计算运行优先级来判定当前用户可以使用的软件功能。利用二进制位向量来表示某个License对于特定软件功能的支持。其中包括如下主要部分。功能模块编码:将所有的功能模块分散到不同的二进制位上。并规定如果该位为1,则表示持有当前License文件的用户可以调用该软件功能。如果为0,则表示不可以调用。计算运行优先级:完成将一个License文件所提供的功能模块支持信息,转换为一个二进制数字向量。编制功能检查掩码:需要

19、为每个功能模块定义其功能检查掩码。5后继在开源软件滚滚大潮中,加密软件与软件私有化已经显示的越来越落伍了。这一点对于Java语言而言显示的格外明显。不能否认上边给出的这种加密方法,只是在原理层面给出了一种可行的解决方案。由于存在很多的安全漏洞,并不适与实际加密系统的使用。但是无奈与可笑的是,对于各种商业软件,即使使用多么复杂的代码扰乱与加密技术的研究,最终来还不是会出现在盗版小贩手中?.java中使用公钥加密私钥解密原理实现license控制现在很多J2EE应用都采用一个license文件来授权系统的使用,特别是在系统购买的早期,会提供有限制的license文件对系统进行限制,比如试用版有譬如

20、IP、日期、最大用户数量的限制等。 而license控制的方法又有很多,目前比较流行,只要设计的好就很难破解的方法就是采用一对密匙(私匙加密公匙解密)来生成License文件中的Sinature签名内容,再通过Base64或Hex来进行编码。比如原BEA公司现在是Oracle公司的WebLogic就采用的是这种方法来设置License文件。 这里只进行一个比较简单的实现: 一共三个类: A.KeyGenerater类生成公钥私钥对 B.Signaturer类使用私钥进行签名 C.SignProvider类用公钥验证 公钥和私钥使用Base64加密Base64这个类很多地方都可以查到。 KeyG

21、enerater类: publicclassKeyGenerater privatebytepriKey; privatebytepubKey; publicvoidgenerater() try KeyPairGeneratorkeygen=KeyPairGenerator.getInstance(RSA); SecureRandomsecrand=newSecureRandom(); secrand.setSeed(www.川江号子.cn.getBytes();/初始化随机产生器 keygen.initialize(1024,secrand); KeyPairkeys=keygen.gen

22、KeyPair(); PublicKeypubkey=keys.getPublic(); PrivateKeyprikey=keys.getPrivate() pubKey=Base64.encodeToByte(pubkey.getEncoded(); priKey=Base64.encodeToByte(prikey.getEncoded(); System.out.println(pubKey=+newString(pubKey); System.out.println(priKey=+newString(priKey); catch(java.lang.Exceptione) Syst

23、em.out.println(生成密钥对失败); e.printStackTrace(); publicbytegetPriKey() returnpriKey; publicbytegetPubKey() returnpubKey; Signaturer类: publicclassSignaturer publicstaticbytesign(bytepriKeyText,StringplainText) try PKCS8EncodedKeySpecpriPKCS8=newPKCS8EncodedKeySpec(Base64.decode(priKeyText); KeyFactoryke

24、yf=KeyFactory.getInstance(RSA); PrivateKeyprikey=keyf.generatePrivate(priPKCS8); /用私钥对信息生成数字签名 Signaturesignet=java.security.Signature.getInstance(MD5withRSA); signet.initSign(prikey); signet.update(plainText.getBytes(); bytesigned=Base64.encodeToByte(signet.sign(); returnsigned; catch(java.lang.Exc

25、eptione) System.out.println(签名失败); e.printStackTrace(); returnnull; SignProvider类: publicclassSignProvider privateSignProvider() publicstaticbooleanverify(bytepubKeyText,StringplainText, bytesignText) try /解密由base64编码的公钥,并构造X509EncodedKeySpec对象 X509EncodedKeySpecbobPubKeySpec=newX509EncodedKeySpec(B

26、ase64.decode(pubKeyText); /RSA对称加密算法 KeyFactorykeyFactory=KeyFactory.getInstance(RSA); /取公钥匙对象 PublicKeypubKey=keyFactory.generatePublic(bobPubKeySpec); /解密由base64编码的数字签名 bytesigned=Base64.decode(signText); SignaturesignatureChecker=Signature.getInstance(MD5withRSA); signatureChecker.initVerify(pubK

27、ey); signatureChecker.update(plainText.getBytes(); /验证签名是否正常 if(signatureChecker.verify(signed) returntrue; else returnfalse; catch(Throwablee) System.out.println(校验签名失败); e.printStackTrace(); returnfalse; 实验性的Silverlight控件纯客户端注册验证机制本文和大家分享一下如何实现一个实验性的Silverlight控件纯客户端注册验证机制。先给大家介绍一下Silverlight客户端控件

28、的使用情景。一般来说,Silverlight客户端控件会销售给开发Silverlight程序的公司,他们是控件的购买者。他们开发的程序中会用到Silverlight客户端控件。但是Silverlight控件最终是在浏览Silverlight程序的网站用户机器上执行的。说的有点绕,请参照下图。这个纯客户端注册验证机制主要流程如下: 1, 控件购买者下载使用Silverlight控件(Silverlight控件中包含PublicKey及验证License的逻辑)。 2, 控件购买者通过控件生成商提供的网站输入一些注册信息(如输入程序部署路径等唯一标示),付费,完成注册。控件生成商会记录这些信息,并

29、使用PrivateKey生成一个RSA签名过的License文件。 3, 控件生产商会将这个RSA签名过的License文件返回给控件购买者。 4, 控件购买者会将License文件绑定到他开发部署的程序中。 5, 网站用户浏览控件购买者开发部署的网站,下载Silverlight控件在网站用户机器上执行,并验证License文件的签名及程序部署路径等唯一标识。License格式如下: Code 31f81fef-a036-4f6f-b47b-d0c8da1674ea Vendor.TestControl, Version=1.0.0.0, Culture=neutral, PublicKeyT

30、oken=696fd0988622108fhttp:/localhost:8888/ClientBin/Customer.TestApp.xap MVALuQLzIK8SWfZ5q25/PD3P6ZV0FLqIhCt5YcZ7yNkBTuLABg/TGggC4imU2S6QyZBOLsXyEOSFfXXxBn7Spwhkr6P CbQb0MvotPgr5nenLdccm7UwABkn7 PgtEchObGba5KUhHCAkvvSFfwi/e480AYI2YXznVpCsP8RA8o=License中记录了控件生成商数据库中License信息记录Id,强名称签名的目标控件程序集全名,程序部署路

31、径等一些唯一性标示及防止篡改这些信息的RSA数字签名。 当用户浏览网站时,Silverlight控件会下载到在用户机器上执行,从而进行注册码验证工作。它会首先验证License的合法性(即使用RSA签名验证算法检验License文件是否被篡改),然后会判断程序集及唯一性标示是否正确。从而判断控件是否成功注册public class License private static readonly string PublicKeyXmlString = wG5DRppiesQegis92ZyJOO3ADC6ANV470SPyOhuYBpDpwA/UX4gO3XQhEr2jx09ZLQWYvwVJd

32、Sg4JhoO46fw11nsQObzwd 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

33、; 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(); bo

34、ol verifyResult = RSAManaged.RSAManaged.Verify(signData, PublicKey, sha1, this.Signature); sha1.Clear(); return verifyResult;验证程序集全名及程序部署路径等唯一性标示代码如下: Code private static bool ValidateLicenseFile() AssemblyName assemblyName = new AssemblyName(Application.Current.GetType().Assembly.FullName); Uri uri

35、 = new Uri(/ assemblyName.Name ;component/license.lic, 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 (lice

36、nse = 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文件及分

37、析代码写出注册机(不考虑篡改程序逻辑的爆破方式)。 +纯客户端验证不需要跨域访问,也不需要控件购买者在程序发布服务器端部署其他东西。缺点: -比直接输入注册码麻烦 -在现在的Silverlight版本中,只找到部署地址这个特征标示,因此只能做部署License授权。不能做成像WinForm控件那样为每个开发人员机器授权的方式流程图片和解释License 的架构通常,当用户第一次连接到 Citrix 产品时,产品会从许可证服务器请求许可证。 当许可证服务器准许许可证请求后,Citrix 产品会保留许可证为其所使用。 为此目的保留许可证称为签出许可证。 当用户从产品服务器注销时,产品会将许可证返回

38、到许可证服务器。 此过程称为签入许可证产品通过三个步骤来签出许可证:在启动时,运行 Citrix 产品的计算机签出启动许可证。客户端设备连接至产品服务器产品从许可证服务器请求许可证。二Citrix 供应商后台程序 许可证由 Citrix 供应商后台程序 (Citrix.exe) 授予,该过程在许可证服务器上运行。 Citrix 供应商后台程序跟踪签出许可证的数目以及哪个产品拥有它们。 Citrix 产品使用 TCP/IP 与 Citrix 供应商后台程序进行通信。 默认情况下,Citrix 供应商后台程序使用 TCP/IP 端口 7279。 许可证文件 许可证文件是由 Citrix 创建的存储

39、许可数据的文本文件。 它包含有关产品许可证和许可证数目的信息,还包括诸如许可证服务器名称这样的系统信息。 许可证服务器使用这些文件确定是否将许可证授予 Citrix 产品。 启动许可证 启动许可证 (citrix_startup.lic) 使得 Citrix 产品可以使用连续的开放式连接与许可证服务器进行通信。 启动许可证: 跟踪与许可证服务器连接的产品服务器 存储许可系统信息 不影响您的许可证计数 选项文件 选项文件 (Citrix.opt) 是许可证服务器配置文件,Citrix 供应商后台程序每次重新启动或接收到重读文件的命令时都要读取该文件。 该配置文件定义了许可行为产品服务器可以使用的

40、许可证数目、系统日志的位置以及其他用户定义的自定义设置。许可证请求过程当产品从许可证服务器请求许可证时,Citrix 供应商后台程序确定许可证对于该请求是否可用。 许可证请求过程有两个阶段:产品启动阶段和用户连接阶段。产品启动阶段 Citrix 产品启动时,会从其数据存储中检索许可证服务器的位置 产品连接至 Citrix 供应商后台程序 产品签出一个启动许可证 用户连接阶段 用户连接至运行 Citrix 产品的计算机 产品从许可证服务器请求许可证 Citrix 供应商后台程序检查是否有任何可用的许可证,并准许或拒绝产品的请求 产品中的许可证模型基于 Citrix 供应商后台程序的响应,准许或拒绝使用产品下图表示的许可证服务器组件. 此示意图显示 Citrix 产品使用 TCP/IP 连接许可证服务器组件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com