引言
伴随着 Eclipse 富客户端平台(Rich Client Platform,RCP)的普及,越来越多的功能以插件的形式出现。这使得企业除了可以自行开发插件之外,也可以选择使用第三方提供的插件。但是互联网上的插件五花八门,如何保证插件来源的安全成为企业所面临的问题。基于公共密钥基础设施(Public Key Infrastructure,PKI)的数字签名技术为该问题提供了一个很好的解决方案。插件提供机构对其所开发的插件利用其私人密钥(Private key)进行数字签名(即加密过程),而使用机构则利用提供机构所公开的公共密钥(Public Key)对插件签名进行校验(即解密和验证过程),这样在技术上既能够保证该插件确实是由该受信任的机构所提供,同时也保证了插件内容未被恶意篡改,即完整性。
IBM Notes 中的插件签名校验机制
Notes 的插件签名校验机制在借鉴了 Eclipse 实现的同时,也根据自身的产品特点进行了相应的扩展。在 Notes 中,插件签名校验的流程为:
从已签名的插件中获取签名证书数据,构建内存证书对象。
根据所处的不同阶段(Notes 安装中或者安装后),加载相应的证书库。
在 Notes 中,以下两种情况会触发插件签名安全检验:
一、在 Notes 安装过程中,所有位于安装包中的插件在默认情况下必须被受信任的实体所签名,否则将导致该插件安装失败。Notes 版本制作小组(Build Team)在生成 Notes 安装包过程中已经预置了该过程所需要的所有证书,因此在安装由 IBM 提供的默认的 Notes 安装包中的插件时不会存在任何的安全警告,因为它们的签名都是可以被校验通过的。以 Windows 安装包为例,该过程所涉及的证书库文件为安装包的 deploy 目录下的 .keystore.IBM_J9_JVM.install;
二、在 Notes 安装完成之后,如果此时客户希望部署自己开发或者第三方开发的插件时,则需要利用安装 / 更新(Install/Update)来完成。以 Windows 为例,该过程涉及的证书库文件为 Notes 自带的 JVM 中的证书库文件,具体路径为安装目录下 \Notes\jvm\lib\security\cacerts,其默认密码为“changeit”,且证书库类型为“jks”。Notes 中的安装 / 更新界面默认是隐藏的,可以通过修改以下文件来启用,即 Notes 的用户数据目录下 \Data\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings\com.ibm.notes.branding.prefs,设置其 enable.update.ui 为 true,则可以在 File\Application 中看到隐藏的菜单项。如果 com.ibm.notes.branding.prefs 不存在,则需要新建该文件,并且设置其内容为“enable.update.ui=true”。
在证书库中进行签名校验,如果签名校验通过,则校验完成,可以继续插件的安装过程。
如果步骤 3)中签名校验未通过,Notes 则会查找预置的插件签名校验失败处理策略,根据策略的设置,进行后续的相应处理。
客户可以在安装包中的 deploy\ plugin_customization.ini 配置文件中设置相应的策略,根据对应的值来指定相应的处理方式。例如,当指定 com.ibm.rcp.security.update/UNTRUSTED_SIGNATURE_POLICY 为 PROMPT 时,如果该插件的签名不被信任,则会弹出相应的安全警告提示框供用户自行选择,也可以将上述项目设置为 DENY,那么一旦签名不被信任时,则直接拒绝其安装,不再进行提示。默认情况下,该项目的值为 PROMPT。
定制 Notes 安装包预置第三方插件的需求
客户在购买了 Notes 之后,除了使用 Notes 本身提供的开箱即用功能,例如邮件之外,往往会基于 Notes 底层 Java 平台(即 Lotus Expeditor)所提供的强大的平台功能来进行二次开发,即以 Notes 为基础开发满足企业自身需求的各种功能插件。此时,相应的问题也随之而来,尽管 Lotus Domino 可以实现对各个 Notes 客户端的中心管理功能,但是却仅限于在策略配置级别的管理,无法通过 Domino 的策略下发插件,那么如何才能将企业自行开发或者购买的第三方功能插件安全快速的部署在所有的 Notes 客户端上呢?此时,定制 Notes 的安装包,预置企业自行开发或者第三方的插件成为一种选择。在该过程中,插件来源的安全性显然不能被忽视,因此在了解了 Notes 的插件签名校验机制后,对于上述需求,我们可以直接利用 Notes 提供的插件安全校验机制来确保我们所做的各种配置是足够安全的。
定制 Notes 安装包来安全预置第三方插件的完整解决方案
以下就以一个测试的被自签名证书所签署的插件为例,了解下定制 Notes 安装包,安全预置第三方插件的完整解决方案。
先决条件
下载并安装 Java 2 Standard Edition(Java Development Kit)V5 及更新版本
下载并安装 IBM IBM Notes V8.5.3
下载 IBM Lotus Expeditor Toolkit V6.2.3
下载 Eclipse 3.4 或以上版本并安装 Expeditor Toolkit 以准备 Notes 开发调试环境
在 Eclipse Foundation 上可以找到相应的 Eclipse 平台(Eclipse3.4 或以上版本),并且通过 Eclipse 的“帮助\ 软件更新\ 查找并安装”菜单来安装 Expeditor Toolkit V6.2.3,配置好 Notes 的 Java 开发和调试环境。具体的配置过程可以参见 Developerworks 中 Expeditor Toolkit 的产品文档。
详细步骤
1. 创建未签名插件
此处我们会以一个测试插件(com.test.helloworld)为例,该插件的功能是在 Notes 的 Open 按钮下新增一个选项(Hello view),点击该选项将会打开一个新的 View 页面,在该 View 中我们绘制了一个按钮,点击该按钮会弹出消息框并显示“Hello world”的文本消息。样例代码可以从 下载章节获取。
图 1. Open 菜单下新增“Hello view”选项