`
yipsilon
  • 浏览: 246337 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

给OSGi加入数字签名及认证特性的思考

阅读更多

  曾经我很困惑,所开发的商业软件被频频破解,促使我开始研究软件防盗版功能。

 

  由于我们的系统是基于OSGi平台上的(叫Bond),能不能在OSGi运行环境一层加入数字签名认证,使其认证通过的Bundle才能安装和启动呢?整理一下思路。

 

  在Bundle安装前,验证的流程有如下几步:

  1. 验证JAR自身的数字签名,如果无效就抛出插件认证异常。
  2. 验证JAR数字签名的证书发布者是否为OSGi运行环境里内置的根证书,如果不匹配则抛出系统认证异常。
  3. 一些特殊性验证,如自定制的序列号等。如果验证不通过则抛出用户认证异常。

  这样,就有了三种验证机制:

  1. 使用JRE自身的数字签名特性,保证JAR文件的一致性。但数字证书可以自行制造出来,JDK也有签名工具,因此,仅仅用此特性不足以保护程序不被修改。
  2. 通过在OSGi运行环境中加入根证书,并在运行时对JAR文件进行签名验证。假设OSGi运行环境的结构不会被破解(根证书不会被提取),那么这个方法可以保证JAR文件不被修改。
  3. 通过加入第三方认证机制,可以进一步限制JAR文件的一致性,除此之外还可以加入很多限制信息,如过期时间、绑定IP地址等。

  有人好问了,第二种方法中有个假设就是OSGi运行环境(下称 OSGi.jar)不会被破解,那么如何才能不被破解呢?我想有些人们的脑子里已经有了答案,那就是把OSGi.jar包编译成可以执行文件,如Windows下的exe程序。那么,接下来就会有另一个问题,就是如何选择封装程序。

 

  我总共使用过三种封装程序:JSmooth、Launch4J、Exe4J。前两者是开源的,最后是商业软件。

  • JSmooth是我第一个使用的封装程序,它在运行时,会把OSGi.jar包存储到一个临时文件里,这样稍微进行跟踪,就能找到原始结构的OSGi.jar文件,从而轻松提取到根证书。
  • Launch4J也是一个比较不错的封装程序,可惜如果你用解压缩软件直接打开封装后的exe程序,OSGi.jar的原始结构一目了然,轻松就可以把根证书解压出来。
  • Exe4J虽然是商业软件,但却是加密最好的。不会把OSGi.jar存储到硬盘中,用解压缩软件也打不开。最后,我们就选择了这个作为封装程序。

  至此,给OSGi加入数字签名及认证方法的整体思路已经清晰,经过Bond一段时间的测试,确定此方法是可行的。

分享到:
评论
1 楼 houyi521 2013-06-02  

相关推荐

    osgi相关文档、及学习资料

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种管理和部署应用程序的方式,使得软件可以被分解成独立的组件,这些组件可以在运行时动态地安装、更新和卸载。这种模块化的...

    osgi介绍osgi介绍

    ### OSGi的主要特性: 1. **模块化**:每个bundle都是一个独立的模块,有自己的类路径和资源,可以通过声明式服务来暴露和消费接口。 2. **动态性**:bundle可以在运行时安装、启动、停止或卸载,使得系统可以进行热...

    osgi,林昊写的osgi实战和进阶

    2. **模块化编程**:OSGI的模块化特性使得开发者可以将应用程序细分为独立的组件,每个组件都有自己的类路径。这部分内容会涵盖如何创建、配置和管理这些模块。 3. **服务导向**:OSGI的核心在于服务,书中会讲解...

    osgi规范_R4_zh.pdf

    同时,OSGi还支持数字签名和证书验证,以确保bundle的来源可靠,防止恶意代码的侵入。 八、结语 《OSGi R4服务平台核心规范》全面覆盖了OSGi R4版本的各项特性和功能,对于理解OSGi的模块化原理、服务模型、动态性...

    osgi简介PPt(自制)

    1. **安全层**:这是一个无处不在的层,贯穿整个框架,提供了基于Java 2安全机制的安全策略和数字签名策略,确保了组件的安全性。 2. **模块层**:OSGI的基础是模块化,它定义了类的装载策略。每个模块称为bundle,...

    OSGI 入门资料PDF

    通过阅读提供的PDF文档,你将深入理解OSGI的基本概念,掌握其核心特性,并学会如何在实际项目中运用OSGI来提升软件开发的效率和质量。同时,了解OSGI与Spring的整合,可以帮助你在现代企业级应用开发中发挥更大的...

    OSGI组件编程(osgi.component.programming)

    远程调用(Remoting)是OSGI服务平台的另一个重要特性,它允许组件跨越网络边界与其他OSGI实例上的组件进行通信。这增强了OSGI系统的分布式能力,使得组件可以跨越不同物理位置或系统进行协作。 为了完成OSGI组件...

    OSGI 开发文档中文的

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...

    OSGi入门教程(OSGi Introduce)

    1. **宝马汽车的应用控制系统**:利用OSGi的模块化特性,实现复杂系统的快速启动和高效运行。 2. **Eclipse集成开发环境**:Eclipse从3.0版本开始采用OSGi框架(Equinox),提升了性能、可扩展性,并简化了二次开发...

    org.eclipse.osgi_3.7.0.v20110613及源码

    本文将深入探讨OSGi的核心组件——org.eclipse.osgi,并以其3.7.0.v20110613版本及源码为实例,解析其工作原理和关键特性。 一、OSGi概述 OSGi的核心理念是将Java应用程序分解为独立的模块,这些模块称为服务单元或...

    《OSGi实战》完整中文版

    《 OSGi实战》是学习OSGi的全面指导,利用与架构和开发人员相关...《OSGi实战》面向OSGi规范的使用者,系统、全面、深入地阐述OSGi的重要特性及其使用方法,还介绍了某些技术的低层实现细节,引领读者畅游OSGi的世界。

    OSGI 实例eclipse插件开发

    OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...

    经典OSGI学习资料

    4. **服务**: OSGI服务是提供给其他bundle使用的一组接口和实现。服务可以通过服务注册表进行注册和查找。 5. **依赖管理**: OSGI框架负责管理bundle间的依赖关系,确保在正确的时间加载正确的服务。 6. **版本...

    OSGI + Webservice 例子

    在"OSGI + Webservice 例子"中,新手可以学习如何将OSGI的模块化特性与Web服务的跨平台通信能力结合。下面将详细介绍这个例子中可能涉及的知识点: 1. **OSGI模块创建**:首先,你需要了解如何创建一个OSGI模块,这...

    osgi资料

    这本书可能深入讨论了OSGi的高级特性,包括但不限于: - 模块系统:详述OSGi的包和类加载机制,以及如何定义和管理模块(也称为bundle)。 - 依赖管理:解释如何声明和解决模块间的依赖关系,确保正确地加载和...

    Enterprise OSGI in action

    《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...

    OSGi Service Platform Core Specification

    该版本是 OSGi Alliance 的官方发布,经过数字签名认证,确保文档的准确性和完整性。 #### 核心规范内容概览 1. **OSGi 架构概述**:介绍了 OSGi 模型的基本组成部分,包括 Bundle(即模块)、服务注册和服务发现...

    OSGI规范中文版

    OSGi规范中文版是一本全面介绍OSGi技术的书籍,它不仅涵盖了OSGi技术的基础知识,还详细介绍了OSGi的内部结构和工作原理,对于想要深入学习和应用OSGi技术的开发者而言,是一本非常有价值的参考书。 ### OSGi规范的...

    基于osgi构建小例子

    通过这个基于Eclipse 3.5和JDK 1.6的OSGi示例,你可以深入了解OSGi的模块化概念、服务模型以及动态管理特性,这对于理解现代Java应用的架构和开发流程至关重要。实践这个例子将有助于你成为更熟练的OSGi开发者。

Global site tag (gtag.js) - Google Analytics