许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  许可证文件格式错误导致“Invalid license key”的常见原因

许可证文件格式错误导致“Invalid license key”的常见原因

阅读数 5
点赞 0
article_banner

"Invalid license key"是FlexNet运维中遇到频率最高的错误之一。每当这个错误出现,lmgrd会拒绝启动,vendor daemon加载license文件失败,所有依赖该许可证的软件全部停摆。

这个问题最麻烦的地方在于:错误信息只告诉你"invalid key",但不告诉你哪里invalid。 排查全靠经验。

下面列出最常见的七种原因,按出现频率排序。

一、换行符格式不对——Windows和Linux的差异

这是最容易被忽略、但发生率最高的原因,尤其在跨平台传输license文件时。

背景: Windows系统的换行符是CRLF(\r\n),Linux系统是LF(\n)。FlexNet的license文件格式要求使用正确的换行符,而不同操作系统对换行符的处理方式不同。

具体场景:

  • 你在Windows上用记事本或WPS打开了厂商发来的license文件,保存后传到Linux服务器。Windows编辑器自动把LF换行符改成了CRLF。lmgrd在Linux下解析时,把CR当成了非法字符,导致整行无法识别。
  • 反过来也一样——在Linux上用vim编辑后传到Windows,LF换行符在Windows的LMTOOLS中可能显示为乱码。

排查方法: 在Linux上用cat -A查看license文件。如果行尾显示^M$,说明是Windows换行符(CRLF)。正常应该是$(LF)。

解决方法: 用dos2unix命令转换:

text

dos2unix license.lic

转换后再用cat -A确认,行尾应该只显示$

Windows环境下怎么处理: 用Notepad++打开,右下角状态栏会显示当前换行符格式(Windows(CRLF)或Unix(LF))。如果显示的是Windows,点击,切换到Unix(LF),保存。

二、文件编码带了BOM头

部分文本编辑器(尤其是Windows记事本)保存UTF-8文件时会在文件开头添加BOM(Byte Order Mark)标记。这个BOM是几个不可见字节,FlexNet的解析器不认识它,直接报invalid key。

解决方法: 用Notepad++打开,点击"编码"菜单,选择"转为UTF-8无BOM格式编码",保存。

或者用命令行去掉BOM:

text

sed -i '1s/^\xEF\xBB\xBF//' license.lic

三、签名行被破坏——最常见,也最隐蔽

FlexNet license文件的每一行FEATUREINCREMENT末尾都有一个SIGNSIGN2签名。这个签名是厂商服务器根据该行的所有字段(feature名称、版本、过期日期、数量、HOSTID等)计算出来的哈希值。

FlexNet license文件

关键规则: 只要改动了该行的任何一个字段,签名就失效。

具体来说,以下操作都会导致签名失效:

  • 修改了feature名称
  • 修改了过期日期(哪怕只改了一天)
  • 修改了许可证数量
  • 修改了HOSTID
  • 添加或删除了任何可选属性
  • 甚至只是在该行添加了一个空格

为什么很多人在这个地方犯错: 拿到license文件后,用文本编辑器打开检查,不小心删了一个空格或者改了个字母,保存,上传,启动,报错。自己完全意识不到改过什么。

排查方法: 用lmcksum校验:

text

lmutil lmcksum -c license.lic

如果输出中某行的checksum与文件头部记录的checksum不一致,说明该行被修改过。

解决方法: 从厂商重新下载原始license文件。不要尝试手动修复签名——你不可能算出正确的签名值。

四、SERVER行或VENDOR行格式错误

SERVER行和VENDOR行是license文件的"头部",lmgrd先解析这两行。格式不对,后面的内容根本不会读。

常见格式错误:

SERVER行有三个参数:主机名、HOSTID、端口号。

text

SERVER my-server 001122334455 27000

少一个参数,或者顺序不对,都会报错。比如漏了端口号,或者把主机名写成了带下划线的字符串(某些老版本不支持下划线),lmgrd直接退出。

VENDOR行格式:

text

VENDOR snpslmd /opt/synopsys/snpslmd

如果路径中包含空格(比如C:\Program Files\FlexNet\snpslmd.exe),但没有用引号括起来,解析器会把ProgramFiles当成两个独立的参数,解析失败。

解决方法: 检查SERVER行是否有且仅有三个参数。检查VENDOR行的路径,如果有空格,用双引号括起来:

text

VENDOR snpslmd "C:\Program Files\FlexNet\snpslmd.exe"

五、文件中有隐藏的非法字符

license文件应该是纯ASCII文本。如果文件中混入了非ASCII字符——比如中文全角空格、制表符、零宽空格等——lmgrd解析时就会出错。

常见来源:

  • 从邮件客户端直接复制粘贴license内容到文本编辑器,粘贴过程中引入了不可见字符
  • 使用Word或WPS打开过license文件,这些软件会添加格式控制符
  • 从PDF文档中复制内容,PDF中的连字符、引号等符号可能被转换成全角字符

排查方法:od -c license.lic | head -50查看文件内容,找出非ASCII字符。或者用hexdump查看十六进制内容,对照ASCII表判断是否有异常字节。

解决方法: 直接从厂商的邮件附件下载原文件,不要复制粘贴。如果只能复制粘贴,先粘贴到Notepad++,在"视图"菜单中开启"显示所有字符",检查是否有异常符号。

复制粘贴license内容

六、FEATURE行内字段顺序错误

每行FEATURE或INCREMENT的字段顺序是固定的:

text

FEATURE feature_name vendor_daemon version expire_date num_lic [attributes] SIGN=...

如果你复制粘贴时不小心把字段顺序弄乱了,或者漏了某个字段,lmgrd解析时就会报invalid key。

特别容易出错的地方: num_lic字段。有些license的num_lic是uncounted,有些是数字。如果把uncounted写成了uncount,或者把数字写成了带逗号的格式(如"10,000"),解析器不认识。

七、备份文件被误当成license文件

这个看起来很初级,但确实会发生。

运维人员修改license文件前通常会备份,备份文件命名成license.baklicense.lic.old等。lmgrd启动时通过-c参数指向某个文件。如果指向了备份文件,而备份文件里的签名已经过期或失效,就会报invalid key。

还有一种情况:目录下有多个license文件,lmgrd的-c参数指向了错误的那个。

排查优先级

遇到"Invalid license key"时,按这个顺序检查效率最高:

  1. 先用dos2unix转换一下换行符——花五秒钟,可能解决大部分问题
  2. 查看debug.log——错误信息里有时会提示具体是哪一行出了问题
  3. 用lmcksum校验——确认签名是否完整
  4. 检查SERVER/VENDOR行格式——确认参数数量和分隔符正确
  5. 确认你没有手动修改过任何字段——如果修改过,从厂商重新下载

这五个步骤走完,90%的invalid key问题都能定位。

绝大多数"Invalid license key"错误,根源不是license文件坏了,而是它被某种方式"改变"了。 换行符、编码、空格、粘贴引入的隐藏字符——这些看起来微不足道的东西,在FlexNet的解析器眼里都是重大变化,足以让签名失效。

所以一个可靠的解决方法是:直接从厂商的邮件附件下载原始license文件,不做任何修改,直接上传到服务器使用。 不要去动它,不要打开它,不要复制它。需要用的时候,wget或scp传过去就行。这能避免大部分人为主观因素导致的格式问题。


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空