一种多级校验的软件仓库可靠性检测方法转让专利

申请号 : CN201710814188.7

文献号 : CN107632932A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 单晋奎毛周唐晓东张冬松谢炜夏若冰刘永

申请人 : 天津麒麟信息技术有限公司

摘要 :

一种多级校验的软件仓库可靠性检测方法,步骤包括对所述软件仓库进行发布和对所述软件仓库进行检测;所述软件仓库包括三部分,分别为源代码软件包和二进制软件包目录、软件仓库摘要文件、软件仓库摘要文件.GPG。本申请的有益效果是:对软件仓库进行基于多层签名和加密的多级校验,可以有效地检测软件仓库的可靠性,保证软件仓库数据的完整性和一致性,从而有效预防使用与原始源数据不相符的软件仓库来安装软件包情况的发生,从而能够有效保证整个软件仓库系统的安全性和可靠性。

权利要求 :

1.一种多级校验的软件仓库可靠性检测方法,步骤包括:

对所述软件仓库进行发布和对所述软件仓库进行检测;所述软件仓库包括三部分,分别为源代码软件包和二进制软件包目录、软件仓库摘要文件、软件仓库摘要文件.GPG。

2.根据权利要求1所述多级校验的软件仓库可靠性检测方法,其特征在于:所述源代码软件包和二进制软件包目录的内容包括源代码软件包和二进制软件包;所述源代码软件包的信息包括软件包名、版本号、存放路径、源码软件包的MD5、源码软件包的SHA512、源码软件包大小、软件包开发者和二进制软件包列表;所述二进制软件包的信息包括二进制包名、版本号、存放路径、二进制文件的MD5、二进制文件的SHA512、二进制文件大小、软件包开发者和对应源码包名。

3.根据权利要求1或2所述多级校验的软件仓库可靠性检测方法,其特征在于:所述对软件仓库进行发布的步骤包括:S501:检测所述源代码软件包和所述二进制软件包是否签名;若是,则进入下一步;若否,则检测失败;S502:获取所述源代码软件包和所述二进制软件包的开发者信息;S503:比较所述源代码软件包和所述二进制软件包的开发者信息是否一致;若是,则进入下一步;若否,则检测失败;S504:检测所述开发者信息是否合法;若是,则进入下一步;若否,则检测失败;S505:获取所述源代码软件包和所述二进制软件包的信息;S506:将所述源代码软件包和所述二进制软件包复制到所述源代码软件包和二进制软件包目录,根据软件包名对相关文件进行排序并存放;S507:创建或更新软件仓库摘要文件中软件仓库源代码包数量、软件仓库二进制包数量、软件仓库二进制包数量、源代码软件包信息、二进制软件包信息;S508:使用所述软件仓库维护者的GPG公钥将所述软件仓库摘要文件加密成所述软件仓库摘要文件.GPG文件。

4.根据权利要求3所述多级校验的软件仓库可靠性检测方法,其特征在于:所述对软件仓库进行检测的步骤包括:S601:检测所述软件仓库摘要文件是否存在;若是,则进入下一步;若否,则检测失败;S602:检测所述软件仓库摘要文件.GPG是否存在;若是,则进入下一步;若否,则检测失败;S603:是否可以使用私钥解码所述软件仓库摘要文件.GPG;若可以解码,则进入下一步;若不可以解码,则检测失败;S604:验证解码后的所述软件仓库摘要文件.GPG的内容与所述软件仓库摘要文件内容是否一致;若均一致,则进入下一步;若有不一致,则检测失败;S605:检测所述软件仓库摘要文件的格式是否正确;若正确,则进入下一步;若不正确,则检测失败;S606:获取所述软件仓库摘要文件中软件仓库源软件包数量;

S607:逐行获取所述源代码软件包信息;S608:判断是否检测完所有的所述源代码软件包信息记录;若检测完,则进入步骤611步骤;若没有检测完,则进入下一步;S609:获取所述源代码软件包信息中的软件包名、版本号、存放路径、源码软件包的MD5、源码软件包的SHA512、源码软件包大小、软件包开发者和二进制软件包列表;S610:检测所述源代码软件包信息指定的文件信息是否正确;若正确,则进行步骤607;若不正确,则检测失败;S611:获取所述软件仓库摘要文件中软件仓库二进制软件包数量;若获取成功,则进入下一步;若获取不成功,则检测失败;S612:逐行获取所述二进制软件包信息记录;S613:判断是否检测完所有的所述二进制软件包信息记录;若检测完,则检测成功;若没有检测完,则进入下一步;S614:获取二进制软件包信息中的软件包名、版本名、存放路径、二进制文件的MD5、二进制文件的SHA512、二进制文件大小、软件包开发者和对应源码包名;S615:检测所述二进制软件包信息中指定的文件信息是否正确;若正确,则进入所述S613;若不正确,则检测失败。

5.根据权利要求4所述多级校验的软件仓库可靠性检测方法,其特征在于:所述S610中检测源代码软件包信息中指定的文件信息是否正确的步骤包括:S701:检测存放路径指定的文件是否存在;若存在,则进入下一步;若不存在,则检测失败;S702:获取所述存放路径指定的文件MD5值,比较该MD5值与源文件的md5sum值是否一致;若一致,则进入下一步;若不一致,则检测失败;S703:获取所述存放路径指定的文件SHA512值,比较该SHA512值与源文件的SHA512值是否一致;若一致,则进入下一步;若不一致,则检测失败;S704:获取所述存放路径指定的文件大小,比较所述文件大小与正确的文件大小是否一致;若一致,则进入下一步;若不一致,则检测失败;S705:获取所述存放路径指定的文件版本号,比较所述版本号与正确的版本号是否一致;若一致,则进入下一步;若不一致,则检测失败;S706:获取所述存放路径指定的文件软件包名,比较所述软件包名与正确的软件包名是否一致;若一致,则进入下一步;若不一致,则检测失败;S707:获取所述存放路径指定的文件是否签名;若有签名,则进入下一步;若没有签名,则检测失败;S708:判断所述存放路径指定的文件签名是否合法;若合法,则进入下一步;若不合法,则检测失败;S709:进入所述S607。

6.根据权利要求4所述多级校验的软件仓库可靠性检测方法,其特征在于:所述S615中检测二进制软件包信息指定的文件嘻嘻是否正确的具体步骤包括:S801:检测存放路径指定的文件是否存在;若存在,则进入下一步;若不存在,则检测失败;S802:获取所述存放路径指定的文件MD5值,比较所述MD5值与对应二进制文件的md5sum值是否一致;若一致,则进入下一步;若不一致,则检测失败;S803:获取所述存放路径指定的文件SHA512值,比较所述SHA512值与对应的二进制文件的SHA512值是否一致;若一致,则进入下一步;若不一致,则检测失败;S804:获取所述存放路径指定的文件大小,比较所述文件大小与正确的文件大小是否一致;若一致,则进入下一步;若不一致,则检测失败;S805:获取所述存放路径指定的文件版本号,比较所述版本号与正确的版本号是否一致;若一致,则进入下一步;若不一致,则检测失败;S806:获取所述存放路径指定的文件软件包名,比较所述软件包名与正确的软件包名是否一致;若一致,则进入下一步;若不一致,则检测失败;S807:获取所述存放路径指定的文件是否签名;若有签名,则进入下一步;若没有签名,则检测失败;S808:判断所述存放路径指定的文件签名是否合法;若合法,则进入下一步;若不合法,则检测失败;S809:进入所述S612。

说明书 :

一种多级校验的软件仓库可靠性检测方法

技术领域

[0001] 本申请属于计算机信息技术领域,具体地说,涉及一种多级校验的软件仓库可靠性检测方法。

背景技术

[0002] 操作系统的实际应用离不开各类软件安装与升级,而现有的Linux操作系统主要是由软件仓库负责软件或软件包的管理。软件仓库就是存放于服务器或云存储之中一种特别的目录,供用户从中挑选需要的软件,进行下载、安装或者升级。软件仓库包括欲提供给用户的所有软件包及其配置文件,其中配置文件描述了所有软件的信息,包括软件之间的依赖关系。
[0003] 由于软件仓库数据容量庞大,在软件仓库的部署分发或下载过程中可能由于网络原因导致数据损坏和数据丢失的情况发生。另外,软件仓库的数据可能遭到恶意用户的篡改植入木马、蠕虫等计算机病毒。因此用户若使用与原始源数据不相符的软件仓库来安装软件包可能导致操作系统各种系统错误的产生甚至导致各种严重的系统安全问题。所以验证实际使用的软件仓库源和操作系统发行商发布的软件仓库源的数据是否一致非常重要。
[0004] 软件仓库镜像数据从主服务器同步到其他镜像服务器可能会出现由于网络异常、数据安全等因素而导致软件仓库不完整或被其他人恶意思破坏的情况。现有的软件仓库数据可靠性检测技术主要通过MD5算法来实现,但是随着信息技术的发展,近年来MD5算法的相关破解技术已经公之于众,可以预见,继续单一使用MD5算法进行软件仓库数据的可靠性校验很可能存在不小的安全隐患,不能有效地保护软件仓库的可靠性。
[0005] 中国发明专利“云OS软件仓库的管理方法和管理装置”(申请号CN201510487973.7),该申请公开了一种云OS软件仓库的管理方法和管理装置。管理方法包括:创建包括资源域和资源组的软件仓库组织结构和包括用户组和用户的使用者组织结构,为资源组的软件资源建立软件目录,为用户组设置使用软件目录的使用权限;用户登录管理服务器,根据用户所在的用户组的使用权限,获得用户所在用户组能够使用的软件目录;用户对软件目录中的软件进行处理。该申请通过创建资源组和用户组,建立软件目录和设置使用权限,建立起用户与能够使用的软件两者之间的对应关系,利用权限管理提高了软件仓库的安全性;通过软件仓库的B/S架构设计,基于浏览器方式向用户提供服务,不仅简化了用户获取软件过程,而且可以兼容多种操作系统。该申请只适用于解决现有虚拟机部署、更新软件过程繁琐且不安全的技术缺陷,并没有考虑到软件仓库的可靠性问题。
[0006] 中国发明专利“应用程序在线远程执行方法和系统”(申请号CN201110401569.5),该发明提供一种应用程序在线远程执行方法和系统。客户端在线远程执行软件,向服务端的控制台发送软件开启事件;控制台向客户端返回用户展现空间的地址,根据软件开启事件获取开启处理命令并发送到服务端的软件在线远程执行环境集群;软件在线远程执行环境集群根据开启处理命令,实例化软件的隔离执行环境,从服务端的软件仓库加载开启处理命令中的软件名对应的封装的软件镜像数据流,按需加载软件数据执行,将软件的安全隔离的执行环境中的软件的执行展现流输出到用户展现空间;客户端通过远程交互展现协议连接用户对应的用户展现空间,显示执行展现流。该发明的客户端不必存储任何真实的软件数据,而是在服务端进行真实的软件处理,可以节约了客户端的存储空间,实现在线远程执行,扩展了移动计算的应用范围。但是该发明并没有涉及到软件仓库数据的可靠性校验,其安全问题显然还没有考虑到。
[0007] 中国发明专利“一种制备龙芯平台图形化安装系统的方法及装置”(申请号CN201110418606.3),该发明公开了一种制备龙芯平台图形化安装系统的方法及装置,该方法包括:生成应用于龙芯平台的软件仓库;删除anaconda图形化安装系统中龙芯架构不支持的内容,设置支持龙芯架构的内容,基于修改后的anaconda图形化安装系统构建图形化安装程序;将龙芯的内核源码置于anaconda图形化安装系统的存储内核的目录中并进行内核配置,以生成龙芯的安装内核;删除buildinstall脚本中龙芯不支持的内容,加载适用于龙芯的设备驱动和内核模块,基于修改后的buildinstall脚本来生成内存虚拟文件系统映像文件。该发明改变现有龙芯平台系统的安装方式,将手动安装方式改为自动安装方式,节省安装时间。该制备方法由于将anaconda图形化安装系统作为原型,减轻了开发人员的脑力劳动,克服了现有技术对开发人员制作系统tar要求多、维护困难、无法根据用户的需要进行定制化安装系统、需要有专业的安装人员进行安装、操作界面不友好、用户无法参与到安装过程、无法设置基本的系统环境、硬件变化导致安装失败以及无法升级更新等缺陷,实现一种更易用、功能更完善的图形化安装方法,支持用户与安装程序进行交互,定制个性化操作系统。该发明只是使用软件仓库进行安装系统构建,并没有涉及到软件仓库数据的可靠性校验和软件仓库安全问题。
[0008] 中国发明专利“一种应用节点的批量部署方法及装置”(申请号CN201110089496.0),该发明创造性地提出一种能快速、有效地在服务器集群上进行应用节点批量部署的机制,通过构造应用节点原型机,在原型机中记录有应用节点的软件包列表信息以及软件包所含配置文件的修改信息;然后基于这两类信息在原型机上生成应用节点的快照信息,快照信息不仅包括修改后的软件包信息,还包括被修改的软件包信息及其修改内容信息;最后依据应用节点的快照信息部署在目标服务器上的应用节点。虽然该发明可用于众多通用或专用的计算系统环境或配置中,简化应用节点批量部署的流程,提高应用节点批量部署的效率,并大幅降低操作风险,但只是使用软件仓库进行部署,并没有涉及到软件仓库数据的可靠性校验和软件仓库安全问题。
[0009] 中国发明专利“一种软件环境部署方法和系统”(申请号CN201610743409.1),该申请公开了一种软件环境部署方法和系统,通过构建软件仓库,并根据软件的关联性和依赖关系对软件仓库中的软件进行划分,得到初始关联软件,从而将具有关联性和依赖关系的初始关联软件组成环境模板,用户布置软件环境只需要选择相应的环境模板。虽然该申请可以省去了用户选择和查找的软件环境所需的程序的过程,减少了用户不必要的操作,从而提高了部署软件环境的效率,但只是使用软件仓库进行软件依赖关系解析,并没有涉及到软件仓库数据的可靠性校验和软件仓库安全问题。
[0010] 中国发明专利“一种开放型软件仓库管理系统及其管理方法”(申请号CN201610815805.0),该申请公开了一种开放型软件仓库管理方法,该方法在软件仓库端对软件发布方进行权限管理,在设备端对所有软件源的配置文件进行有序整合,嵌入式操作系统的调用工具调用配置文件和对应的软件。虽然该发明可以解决由多个发布方所产生的软件冲突和依赖问题,但主要应用领域在于具有嵌入式操作系统的网络设备,既没有考虑桌面和服务器操作系统领域,又没有涉及到软件仓库的可靠性检测。该申请只是考虑了嵌入式环境下软件仓库发布问题,并没有涉及到软件仓库数据的可靠性校验和软件仓库安全问题。
[0011] 中国发明专利“一种服务器代码部署的方法和系统”(申请号CN201510732272.5),该申请仍然基于软件更新包,提出了一种服务器代码部署的方法和系统,该方法包括:将更新的软件模块打包成RPM格式,再存储到更新服务器的软件仓库中;由服务器管理更新检查、更新软件的下载和软件的更新。虽然该申请可以实现自动检查软件的更新版本,并自动下载和安装更新软件包,降低了Linux系统服务器的维护成本,该申请只是使用软件仓库进行软件安装,并没有涉及到软件仓库数据的可靠性校验和软件仓库安全问题。
[0012] 中国发明专利“软件管理器的软件安装检测方法和系统”(申请号CN201210212867.4),该发明公开了一种软件管理器的软件安装检测方法和系统,主要包括设置检测策略文件,其中包括软件管理器的软件仓库中的所有软件ID及其对应的安装特征信息;在检测时,由枚举模块枚举本地客户机上已经安装的所有软件的安装特征信息;再由检测模块在所述检测策略文件中查找是否有与所枚举出的本地客户机已安装软件的安装特征信息相同的安装特征信息。虽然该发明可以提高软件管理器在进行软件安装检测时的检测速度,但是该发明是基于Windows平台而提出的软件安装检测方法,该发明只是在安装某个应用时才检测是否正确,无法做到在应用安装前对整个软件仓库进行检测,并不适用于其他操作系统平台,另外没有考虑软件安装检测的可靠性问题。
[0013] 中国发明专利“软件分发方法和装置”(申请号CN201110402128.7),该发明提供一种软件分发方法和装置,适用于软件流式加载场景,尤其适应于所有下载节点处于同一个局域网的软件流式加载场景。虽然该发明提供的软件分发方法资源定位时延较低,下载速度较快,降低了下载时延,但没有涉及到软件仓库的可靠性检测问题。
[0014] 中国发明专利“软件操作系统及方法”(申请号CN201210009214.6),该申请涉及一种软件操作系统及方法,为用户提供依赖虚拟化平台提供的软件安装服务平台,用户通过终端服务模块可一键安装软件到用户相关的虚拟机中,通过虚拟化框架提供的通讯机制在随时触发虚拟机的软件安装或卸载过程。虽然该申请利用虚拟化技术提供可定制的软件安装服务,可以帮助用户更方便部署、管理自己的集群环境,但是仍没有涉及到软件仓库的可靠性检测问题。
[0015] 中国发明专利“Rpm软件包转换方法及转换系统”(申请号CN201310597153.4),该申请公开了一种Rpm软件包转换方法及转换系统,其目标在于:能够自动化批量的将Ruby语言编写的软件项目转换为gem后缀的软件包,最终变成Srpm文件,使得获得的开源Ruby源码项目能够被使用Rpm软件包管理工具的操作系统所应用,丰富并扩大这种操作系统的软件仓库的内容。虽然该申请可以为使用Rpm包管理工具的Linux操作系统快速集成各种各样的应用软件,但是只能集成Ruby语言编写的应用软件到使用Rpm包的Linux操作系统,该申请只是将Rpm软件包转换成Srpm的方法,是单个应用软件的问题,没有涉及到软件仓库的问题,更与软件仓库可靠性检测无关。
[0016] 中国发明专利“Linux操作系统发行制作方法”(申请号CN201210137397.X),该发明公开了一种Linux操作系统发行制作方法。该方法包括:获取关于软件包组、软件包以及它们的下载路径的配置信息,基于所述配置信息确定各软件包组名称及其下载路径和各软件包名称及其下载路径;根据comps文件确定所述第一确定步骤中所确定的软件包组所包含的各软件包名称;下载步骤,下载与所述第一确定步骤和所述第二确定步骤中所确定的软件包名称对应的软件包;创建步骤,基于所下载的软件包来创建yum软件仓库;发行步骤,基于所创建yum仓库执行后续的发行制作处理。虽然该发明可以方便研发人员进行客户定制的Linux操作系统的发行制作,但是该发明只是使用软件仓库进行Linux操作系统系统构建,并没有涉及到软件仓库的构建和软件仓库数据的可靠性校验和软件仓库安全问题。

发明内容

[0017] 有鉴于此,本申请所要解决的技术问题是提供了一种多级校验的软件仓库可靠性检测方法,能够通过对操作系统的软件仓库的可靠性进行多级认证,从而有效预防使用不可靠的软件仓库安装软件包的情况发生,提高软件仓库可靠性检测的安全性,消除安全隐患。
[0018] 为了解决上述技术问题,本申请公开了一种多级校验的软件仓库可靠性检测方法,并采用以下技术方案来实现。
[0019] 一种多级校验的软件仓库可靠性检测方法,步骤包括:
[0020] 对所述软件仓库进行发布和对所述软件仓库进行检测;所述软件仓库包括三部分,分别为源代码软件包和二进制软件包目录、软件仓库摘要文件、软件仓库摘要文件.GPG。
[0021] 进一步的,所述源代码软件包和二进制软件包目录的内容包括源代码软件包和二进制软件包;所述源代码软件包的信息包括软件包名、版本号、存放路径、源码软件包的MD5、源码软件包的SHA512、源码软件包大小、软件包开发者和二进制软件包列表;所述二进制软件包的信息包括二进制包名、版本号、存放路径、二进制文件的MD5、二进制文件的SHA512、二进制文件大小、软件包开发者和对应源码包名。
[0022] 进一步的,所述对软件仓库进行发布的步骤包括:S501:检测所述源代码软件包和所述二进制软件包是否签名;若是,则进入下一步;若否,则检测失败;S502:获取所述源代码软件包和所述二进制软件包的开发者信息;S503:比较所述源代码软件包和所述二进制软件包的开发者信息是否一致;若是,则进入下一步;若否,则检测失败;S504:检测所述开发者信息是否合法;若是,则进入下一步;若否,则检测失败;S505:获取所述源代码软件包和所述二进制软件包的信息;S506:将所述源代码软件包和所述二进制软件包复制到所述源代码软件包和二进制软件包目录,根据软件包名对相关文件进行排序并存放;S507:创建或更新软件仓库摘要文件中软件仓库源代码包数量、软件仓库二进制包数量、软件仓库二进制包数量、源代码软件包信息、二进制软件包信息;S508:使用所述软件仓库维护者的GPG公钥将所述软件仓库摘要文件加密成所述软件仓库摘要文件.GPG文件;。
[0023] 进一步的,所述对软件仓库进行检测的步骤包括:S601:检测所述软件仓库摘要文件是否存在;若是,则进入下一步;若否,则检测失败;S602:检测所述软件仓库摘要文件.GPG是否存在;若是,则进入下一步;若否,则检测失败;S603:是否可以使用私钥解码所述软件仓库摘要文件.GPG;若可以解码,则进入下一步;若不可以解码,则检测失败;S604:验证解码后的所述软件仓库摘要文件.GPG的内容与所述软件仓库摘要文件内容是否一致;若均一致,则进入下一步;若有不一致,则检测失败;S605:检测所述软件仓库摘要文件的格式是否正确;若正确,则进入下一步;若不正确,则检测失败;S606:获取所述软件仓库摘要文件中软件仓库源软件包数量;S607:逐行获取所述源代码软件包信息;S608:判断是否检测完所有的所述源代码软件包信息记录;若检测完,则进入步骤611步骤;若没有检测完,则进入下一步;S609:获取所述源代码软件包信息中的软件包名、版本号、存放路径、源码软件包的MD5、源码软件包的SHA512、源码软件包大小、软件包开发者和二进制软件包列表;S610:检测所述源代码软件包信息指定的文件信息是否正确;若正确,则进行步骤607;若不正确,则检测失败;S611:获取所述软件仓库摘要文件中软件仓库二进制软件包数量;若获取成功,则进入下一步;若获取不成功,则检测失败;S612:逐行获取所述二进制软件包信息记录;S613:判断是否检测完所有的所述二进制软件包信息记录;若检测完,则检测成功;若没有检测完,则进入下一步;S614:获取二进制软件包信息中的软件包名、版本名、存放路径、二进制文件的MD5、二进制文件的SHA512、二进制文件大小、软件包开发者和对应源码包名;
S615:检测所述二进制软件包信息中指定的文件信息是否正确;若正确,则进入所述S613;
若不正确,则检测失败。
[0024] 进一步的,所述S610中检测源代码软件包信息中指定的文件信息是否正确的步骤包括:S701:检测存放路径指定的文件是否存在;若存在,则进入下一步;若不存在,则检测失败;S702:获取所述存放路径指定的文件MD5值,比较该MD5值与源文件的md5sum值是否一致;若一致,则进入下一步;若不一致,则检测失败;S703:获取所述存放路径指定的文件SHA512值,比较该SHA512值与源文件的SHA512值是否一致;若一致,则进入下一步;若不一致,则检测失败;S704:获取所述存放路径指定的文件大小,比较所述文件大小与正确的文件大小是否一致;若一致,则进入下一步;若不一致,则检测失败;S705:获取所述存放路径指定的文件版本号,比较所述版本号与正确的版本号是否一致;若一致,则进入下一步;若不一致,则检测失败;S706:获取所述存放路径指定的文件软件包名,比较所述软件包名与正确的软件包名是否一致;若一致,则进入下一步;若不一致,则检测失败;S707:获取所述存放路径指定的文件是否签名;若有签名,则进入下一步;若没有签名,则检测失败;S708:判断所述存放路径指定的文件签名是否合法;若合法,则进入下一步;若不合法,则检测失败;S709:进入所述S607。
[0025] 进一步的,所述S615中检测二进制软件包信息指定的文件嘻嘻是否正确的具体步骤包括:S801:检测存放路径指定的文件是否存在;若存在,则进入下一步;若不存在,则检测失败;S802:获取所述存放路径指定的文件MD5值,比较所述MD5值与对应二进制文件的md5sum值是否一致;若一致,则进入下一步;若不一致,则检测失败;S803:获取所述存放路径指定的文件SHA512值,比较所述SHA512值与对应的二进制文件的SHA512值是否一致;若一致,则进入下一步;若不一致,则检测失败;S804:获取所述存放路径指定的文件大小,比较所述文件大小与正确的文件大小是否一致;若一致,则进入下一步;若不一致,则检测失败;S805:获取所述存放路径指定的文件版本号,比较所述版本号与正确的版本号是否一致;若一致,则进入下一步;若不一致,则检测失败;S806:获取所述存放路径指定的文件软件包名,比较所述软件包名与正确的软件包名是否一致;若一致,则进入下一步;若不一致,则检测失败;S807:获取所述存放路径指定的文件是否签名;若有签名,则进入下一步;若没有签名,则检测失败;S808:判断所述存放路径指定的文件签名是否合法;若合法,则进入下一步;若不合法,则检测失败;S809:进入所述S612。
[0026] 与现有技术相比,本申请可以获得包括以下技术效果:对软件仓库进行基于多层签名和加密的多级校验,可以有效地检测软件仓库的可靠性,保证软件仓库数据的完整性和一致性,从而有效预防使用与原始源数据不相符的软件仓库来安装软件包情况的发生,从而能够有效保证整个软件仓库系统的安全性和可靠性。
[0027] 当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有技术效果。

附图说明

[0028] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0029] 图1是本申请软件仓库检测方法应用场景说明示意图。
[0030] 图2是本申请软件仓库结构示意图。
[0031] 图3是本申请软件仓库源代码软件包信息示意图。
[0032] 图4是本申请软件仓库二进制软件包信息示意图。
[0033] 图5是本申请软件仓库发布流程示意图。
[0034] 图6是本申请软件仓库检测流程示意图。
[0035] 图7是本申请软件仓库检测流程中的源代码软件包检测流程示意图。
[0036] 图8是本申请软件仓库检测流程中的二进制软件包检测流程示意图。

具体实施方式

[0037] 以下将配合附图及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
[0038] 本申请的多级校验包含对源代码软件包的签名合法性判断、二进制软件包的签名合法性判断、源代码软件包文件的两类签名校验、二进制软件包文件的两类签名校验以及软件仓库摘要文件的加密校验等多个维度的校验。
[0039] 如图1所示,本申请软件仓库可靠性检测的应用场景包括但不限于:主服务器的软件仓库可靠性检测,镜像服务器从主服务器同步后的软件仓库可靠性检测。主服务器既可以采用传统的服务器架构,又可以采用云服务器架构。镜像服务器相当于主服务器的一个备份,在软硬件配置上可以与主服务器相同。
[0040] 主服务器的软件仓库以静态数据的形势存储在主服务器中,可能会因为机械、人为等因素造成数据丢失。主服务器在向镜像服务器开启软件仓库同步之前需要对软件仓库进行可靠性检测,以判断所述的主服务器软件仓库是否完整。只有在软件仓库完整的情况下才可以开启对镜像服务器提供软件仓库同步服务。
[0041] 镜像服务器通过网络从主服务器同步软件仓库的过程中,可能会出现因网络不稳定造成部分数据丢失、因恶意网络攻击造成数据被人篡改等情形。因此,镜像服务器在同步完主服务器的软件仓库后仍需要对软件仓库进行可靠性检测,以判断同步后的镜像服务器的软件仓库是否完整。
[0042] 软件仓库结构如图2所示,主要包括“源代码软件包和二进制软件包目录”、“软件仓库摘要文件”和“软件仓库摘要文件.GPG”三大部分。
[0043] 源代码软件包和二进制软件包目录是指一个目录,主要包括存放由合法开发者签名的源代码软件包、二进制软件包;源代码软件包和二进制软件包通过软件包名排序存放在相应目录。如图4-5所示。源代码软件包和二进制软件包目录主要存放由合法开发者签名的源代码软件包、二进制软件包,源代码软件包和二进制软件包采取软件包名排序存放于相应目录中。
[0044] 软件仓库摘要文件是指一个文件,主要以明文的形式记录源代码软件包和二进制软件包目录下存放的所有源代码软件包、二进制软件包和软件仓库头的信息。软件仓库头的信息包括:软件仓库发行商、软件仓库发行名称、软件仓库版本号、软件仓库发布时间、软件仓库体系结构、软件仓库维护者、软件仓库描述、软件仓库源代码包数量和软件仓库二进制包数量。
[0045] 软件仓库摘要文件.GPG是指一个文件,主要存放对软件仓库摘要文件进行GPG加密后的内容。这里,GPG(GNU Privacy Guard)是一种开源的用于加密或签名的软件。GPG加密算法常采用非对称加密算法,包含一对公钥和私钥,其中公钥公开,私钥仅由所有者保存,使用公钥加密内容、使用私钥解密,但公钥不能解开公钥加密的数据。
[0046] 下面对软件仓库三大组成部分的具体内容做详细说明:
[0047] 1、源代码软件包和二进制软件包目录存放合法开发者签名的源代码软件包和二进制软件包,具体内容如下:
[0048] 源代码软件包文件中包括软件包名、版本号、软件包开发者、二进制软件包列表,这些信息将被提取并写入所述的软件仓库摘要文件中;
[0049] 二进制软件包文件中包括二进制包名、版本号、软件开发者、对应源代码包名,这些信息将被提取并写入所述的软件仓库摘要文件中;
[0050] 2、软件仓库摘要文件记录软件仓库发行商、软件仓库发行名称、软件仓库版本号、软件仓库发布时间、软件仓库体系结构、软件仓库维护者、软件仓库描述、软件仓库源代码软件包数量、软件仓库二进制软件包数量、所有源代码软件包信息、所有二进制软件包信息,具体如表1所示:
[0051] 软件仓库发行商表示发行该软件仓库的企业名称;
[0052] 软件仓库发行名称表示该软件仓库发行时的名称;
[0053] 软件仓库版本号表示该软件仓库发行的版本号;
[0054] 软件仓库发布时间表示该软件仓库发行的时间;
[0055] 软件仓库体系结构表示该软件仓库可以提供哪些体系结构的二进制软件包,该软件仓库支持飞腾、x86_64、x86、龙芯、申威等体系结构;
[0056] 软件仓库维护者表示该软件仓库的维护者信息,包括维护者名称和邮件,一个软件仓库只能有一个维护者。只有该维护者的GPG密钥才可以对软件仓库摘要文件进行加密生成“软件仓库摘要文件.GPG”,以及对“软件仓库摘要文件.GPG”解密成软件仓库摘要文件;
[0057] 软件仓库描述提供该软件仓库的简要说明;
[0058] 软件仓库源代码软件包数量表示源代码软件包和二进制软件包目录中包括多少个源代码软件包,也是软件仓库摘要文件中包括的源代码软件包信息的记录条数;
[0059] 软件仓库二进制软件包数量表示源代码软件包和二进制软件包目录中包括多少个二进制软件包,也是软件仓库摘要文件中包括的二进制软件包信息的记录条数;
[0060] 源代码软件包信息记录源代码软件包存放在源代码软件包和二进制软件包目录的位置、源代码软件包文件的md5sum签名和sha512签名、文件大小、软件包名、版本号、软件包开发者、提供的二进制软件包列表,由于md5sum签名和sha512签名采用两种不同的算法,如果篡改者通过修改源文件并让其满足md5sum签名,但篡改者很难同时满足篡改后的源文件也满足sha512签名,通过这两重校验加强检测时保证源代码文件md5sum签名和sha512签名的一致性,软件包开发者信息用于检测源代码文件是否由合法的开发者签名;
[0061] 二进制软件包信息记录二进制软件包存放在源代码软件包和二进制软件包目录的位置、二进制软件包文件的md5sum签名和sha512签名、文件大小、软件包名、版本号、软件包开发者、对应源代码包名,由于md5sum签名和sha512签名采用两种不同的算法,如果篡改者通过修改二进制文件并让其满足md5sum签名,但篡改者很难同时满足篡改后的二进制文件也满足sha512签名,通过这两重校验加强检测时保证二进制文件md5sum签名和sha512签名的一致性,软件包开发者信息用于检测二进制文件是否由合法的开发者签名;
[0062]
[0063]
[0064] 表1
[0065] 一个软件仓库摘要文件简要示例如表2所示,其中:
[0066] 软件仓库发行商为天津麒麟信息技术有限公司;
[0067] 软件仓库发行名称为Juniper;
[0068] 软件仓库版本号为4.0.2;
[0069] 软件仓库发布时间为2017年07月14日;
[0070] 软件仓库支持飞腾、龙芯、申威、amd64、i386、aarch64、arm64、armhf、mips64el、mips、alpha64、alpha体系结构;
[0071] 软件仓库维护者为devel-discuss@kylinos.cn;
[0072] 软件仓库描述是天津麒麟信息技术有限公司的软件仓库;
[0073] 软件仓库中包含26002个源代码软件包;
[0074] 软件仓库中包含73809个二进制软件包;
[0075] 源代码软件包信息中包含26002个源代码软件包的所有源文件信息;
[0076] 二进制软件包信息中包含73809个二进制软件包的所有二进制文件信息。
[0077] 表2
[0078] 3、“软件仓库摘要文件.GPG”是指软件仓库维护者使用指定的GPG密钥对所述的软件仓库摘要文件进行加密后得到的密文文件。
[0079]
[0080] 软件仓库发布主要是将合法开发者提供的源代码软件包和二进制软件包有序的发布到源代码软件包和二进制软件包目录;再将源代码软件包和二进制软件包信息写入软件仓库摘要文件;然后使用GPG密钥将软件仓库摘要文件加密为“软件仓库摘要文件.GPG”。
[0081] 软件仓库发布流程如图5所示,详细步骤包括:
[0082] S501:检测源代码和二进制软件包是否签名;若是,则进入下一步;若否,则检测失败;
[0083] 具体为:读取源代码和二进制软件包文件内容;查找GPG签名信息;若找到GPG签名信息,则进入下一步;若找不到GPG签名信息,则检测失败;
[0084] S502:获取源代码和二进制软件包的开发者信息;
[0085] 具体为:读取源代码软件包文件内容,查找软件包开发者信息;若找到,则保存源代码软件包开发者信息并进入下一步;若找不到,则检测失败;继续读取二进制软件包文件内容,查找软件包开发者信息;若找到,则保存二进制软件包开发者信息并进入下一步;若找不到,则检测失败;
[0086] S503:比较源代码软件包和二进制软件包的开发者信息是否一致;若是,则进入下一步;若否,则检测失败;
[0087] S504:检测开发者信息是否合法;若是,则进入下一步;若否,则检测失败;
[0088] 具体为:检查源代码软件包开发者的邮箱名的后缀是否为合法后缀;若合法,则进入下一步;若不合法,则检测失败;继续检查源代码软件包开发者的GPG是否为合法的开发者GPG;若合法,则进入下一步;若不合法,则检测失败;
[0089] S505:获取源代码和二进制软件包的信息;
[0090] 具体为:读取源代码软件包文件内容,提取源代码软件包的软件包名、版本号、源代码软件包的MD5、源代码软件包的SHA512、源代码软件包大小、软件包开发者、二进制软件包列表等信息;继续读取二进制软件包文件内容,提取二进制软件包的二进制包名、版本号、二进制软件包的MD5、二进制软件包的SHA512、二进制软件包大小、对应源代码包名;
[0091] S506:将源代码和二进制软件包复制到源代码及二进制文件目录,根据软件包名对相关文件进行排序并存放;
[0092] 具体为:根据源代码软件包的软件包名,根据软件包名排序计算应该存放到源代码软件和二进制软件包目录的存放路径;再将源代码软件包复制到源代码软件和二进制软件包目录的存放路径;进而记录源代码软件包在源代码软件和二进制软件包的存放路径;继续根据二进制软件包的软件包名,根据软件包名排序计算应该存放到源代码软件和二进制软件包目录的存放路径;再将二进制软件包复制到源代码软件和二进制软件包目录的存放路径;最后记录二进制软件包在源代码软件和二进制软件包的存放路径;
[0093] S507:创建或更新软件仓库摘要文件中软件仓库源代码包数量、软件仓库二进制包数量、软件仓库二进制包数量、源代码软件包信息、二进制软件包信息;
[0094] 具体为:
[0095] 首先,将S505和S506中记录的源代码软件包的软件包名、版本号、存放路径、源代码软件包的MD5、源代码软件包的SHA512、源代码软件包大小、软件包开发者、二进制软件包列表信息写入到软件仓库摘要文件的源代码软件包信息中,如图3所示;
[0096] 其次,更新软件仓库摘要文件的软件仓库源代码软件包数量;
[0097] 然后,将S505和S506中记录的二进制软件包的二进制包名、版本号、存放路径、二进制软件包的MD5、二进制软件包的SHA512、二进制软件包大小、软件包开发者、对应源代码包名信息写入到软件仓库摘要文件的二进制软件包信息,如图4所示;
[0098] 接下来,更新软件仓库摘要文件的软件仓库二进制软件包数量;
[0099] 最后,更新软件仓库摘要文件的软件仓库发行商、软件仓库发行名称、软件仓库版本号、软件仓库发布时间、软件仓库发布体系结构、软件仓库维护者和软件仓库描述信息;
[0100] S508:使用软件仓库维护者的GPG公钥将软件仓库摘要文件加密成“软件仓库摘要文件.GPG”文件。
[0101] 软件仓库可靠性检测步骤如图6所示,具体包括:
[0102] S601:检测软件仓库摘要文件是否存在;若是,则进入下一步;若否,则检测失败;具体为检测软件仓库摘要文件是否存在于软件仓库中;若是,则进入下一步;若否,则检测失败;
[0103] S602:检测“软件仓库摘要文件.GPG”是否存在;若是,则进入下一步;若否,则检测失败;具体为:检测“软件仓库摘要文件.GPG”是否存在于软件仓库中;若是,则进入下一步;若否,则检测失败;
[0104] S603:是否可以使用私钥解码“软件仓库摘要文件.GPG”;若可以解码,则进入下一步;若不可以解码,则检测失败;
[0105] 具体为:使用软件仓库维护者的GPG私钥解码“软件仓库摘要文件.GPG”;若能解码,则进入下一步;若不能解码,则检测失败;同时在软件仓库中存储解码后的“软件仓库摘要文件.GPG”内容;
[0106] S604:验证解码后的“软件仓库摘要文件.GPG”的内容与软件仓库摘要文件内容是否一致;若均一致,则进入下一步;若有不一致,则检测失败;
[0107] S605:检测软件仓库摘要文件的格式是否正确;若正确,则进入下一步;若不正确,则检测失败;
[0108] 具体为:读取软件仓库摘要文件内容,判断软件仓库摘要文件是否存在软件仓库发行商、软件仓库发行名称、软件仓库版本号、软件仓库发布时间、软件仓库体系结构、软件仓库维护者、软件仓库描述等信息;若存在,则进入下一步;若不存在,则检测失败;进而判断软件仓库摘要文件中的软件仓库发行商、软件仓库发行名称、软件仓库版本号、软件仓库发布时间、软件仓库体系结构、软件仓库维护者、软件仓库描述等信息是否正确;若正确,则进入下一步;若不正确,则检测失败;
[0109] S606:获取软件仓库摘要文件中软件仓库源软件包数量;
[0110] 具体为:从软件仓库摘要文件中获取软件仓库源软件包数量信息;若获取成功,则进入下一步;若获取不成功,则检测失败;
[0111] S607:逐行获取源代码软件包信息;具体为从软件仓库摘要文件中逐行获取一条源代码软件包信息;
[0112] S608:判断是否检测完所有的源代码软件包信息记录;若检测完,则进入步骤611步骤;若没有检测完,则进入下一步;
[0113] 源代码软件包信息记录存在于软件仓库摘要文件中;
[0114] S609:获取源代码软件包信息中的软件包名、版本号、存放路径、源文件的md5sum、源文件的sha512、文件大小、软件包开发者、提供的二进制软件包列表信息;
[0115] S610:检测源代码软件包信息指定的文件信息是否正确;若正确,则进行步骤607;若不正确,则检测失败;
[0116] S611:获取软件仓库摘要文件中软件仓库二进制软件包数量;若获取成功,则进入下一步;若获取不成功,则检测失败;
[0117] S612:逐行获取二进制软件包信息记录;
[0118] 具体的:从软件仓库摘要文件中逐行获取一条二进制软件包信息记录;
[0119] S613:判断是否检测完所有的二进制软件包信息记录;若检测完,则进入步骤616;若没有检测完,则进入下一步;
[0120] 二进制软件包信息记录存在于软件仓库摘要文件中;
[0121] S614:获取二进制软件包信息中的软件包名、版本名、存放路径、二进制文件的md5sum、二进制文件的sha512、文件大小、软件包开发者、对应源代码包名等信息;具体的,本步骤需要获取的信息均由S612的二进制软件包信息中解析出来;
[0122] S615:检测二进制软件包信息中指定的文件信息是否正确;若正确,则进入步骤613;若不正确,则检测失败;
[0123] S616:检测成功。
[0124] 其中,S610中检测源代码软件包信息中指定的文件信息是否正确的步骤如图7所示:
[0125] S701:检测存放路径指定的文件是否存在;若存在,则进入下一步;若不存在,则检测失败;
[0126] S702:获取存放路径指定的文件MD5值,比较该MD5值与“源文件的md5sum”值是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0127] S703:获取存放路径指定的文件SHA512值,比较该SHA512值与“源文件的sha512”值是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0128] S704:获取存放路径指定的文件大小,比较该文件大小与“文件大小”是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0129] S705:获取存放路径指定的文件版本号,比较该版本号与“版本号”是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0130] S706:获取存放路径指定的文件软件包名,比较该软件包名与“软件包名”是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0131] S707:获取存放路径指定的文件是否签名;若有签名,则进入下一步;若没有签名,则检测失败;
[0132] S708:判断存放路径指定的文件签名是否合法;若合法,则进入下一步;若不合法,则检测失败;
[0133] S709:进入S607。
[0134] 同样的,S615中检测二进制软件包信息指定的文件嘻嘻是否正确的具体步骤如图8所示,包括:
[0135] S801:检测存放路径指定的文件是否存在;若存在,则进入下一步;若不存在,则检测失败;
[0136] S802:获取存放路径指定的文件MD5值,比较该MD5值与“二进制文件的md5sum”值是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0137] S803:获取存放路径指定的文件SHA512值,比较该SHA512值与“二进制文件的sha512”值是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0138] S804:获取存放路径指定的文件大小,比较该文件大小与“文件大小”是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0139] S805:获取存放路径指定的文件版本号,比较该版本号与“版本号”是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0140] S806:获取存放路径指定的文件软件包名,比较该软件包名与“软件包名”是否一致;若一致,则进入下一步;若不一致,则检测失败;
[0141] S807:获取存放路径指定的文件是否签名;若有签名,则进入下一步;若没有签名,则检测失败;
[0142] S808:判断存放路径指定的文件签名是否合法;若合法,则进入下一步;若不合法,则检测失败;
[0143] S809:进入S612。
[0144] 本申请的有益效果是:
[0145] (1)通过基于多层签名和加密的多级校验能够有效地检测软件仓库的可靠性,保证软件仓库数据的完整性和一致性,从而有效预防使用与原始源数据不相符的软件仓库来安装软件包情况的发生,从而能够有效保证系统的安全性和可靠性;
[0146] (2)通过使用软件仓库维护者的GPG私钥对所述的“软件仓库摘要文件.GPG”进行解码,验证解码后的所述“软件仓库摘要文件.GPG”内容与所述的软件仓库摘要文件是否一致,从而实现了对所述的软件仓库摘要文件是否被篡改的快速判断;
[0147] (3)利用所述的软件仓库摘要文件中的源代码软件包信息记录,可以快速验证出每一个源代码软件包是否被篡改;
[0148] (4)利用所述的软件仓库摘要文件中的二进制包信息记录,可以快速验证出每一个二进制软件包是否被篡改。
[0149] 以上对本申请实施例所提供的一种多级校验的软件仓库可靠性检测方法,进行了详细介绍。以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
[0150] 如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,不同机构可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。
[0151] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
[0152] 上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明创造构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。