6 


安全和 MIDlet 签名

MIDP 2.0 (JSR 118) 包含一套基于保护域的全面安全模型。MIDlet 套件安装在保护域中,保护域可决定受保护功能的访问权。MIDP 2.0 规范还包括推荐的使用公钥密码学检验和验证 MIDlet 套件的方法。

有关权威性信息,请参阅 MIDP 2.0 规范。有关使用 Sun JavaTM Wireless Toolkit for CLDC 进行 MIDlet 签名的概述,请参阅文章 Understanding MIDP 2.0's Security Architecture,位于以下网址:
http://developers.sun.com/techtopics/mobility/midp/articles/permissions/

如果要了解有关公钥密码学的更多背景知识,请参阅文章 MIDP Application Security 1: Design Concerns and Cryptography,位于以下网址:
http://developers.sun.com/techtopics/mobility/midp/articles/security1/

本章介绍 Sun JavaTM Wireless Toolkit for CLDC 对保护域、权限以及 MIDlet 签名的支持。


6.1 权限

MIDlet 必须具有执行敏感操作的权限,例如连接到网络。权限具有特定的名称,MIDlet 套件可通过 MIDlet 套件描述符中的属性来指示其所需的某些权限。

用户可通过单击“设置”按钮向项目中添加这些权限属性。选择“权限”图标。"MIDlet-Permissions" 框中显示 MIDlet 必须具有的权限,"MIDlet-Permissions-Opt" 框中包含的是可选权限。

图 6-1 MIDlet 套件权限

左侧选择了“权限”图标的项目 "Tiny" 的项目设置

要向任意一个框中添加权限,请单击“添加”,然后选择要添加的权限。要删除某项权限,请高亮显示该权限,然后单击“删除”。


6.2 选择安全策略

Sun JavaTM Wireless Toolkit for CLDC 支持通过 JSR 185 (Java Technology for the Wireless Industry) 和 JSR 248(Mobile Service Architecture,即 MSA)定义的安全策略。第 6.2.1 节“MSA 保护域”第 6.2.2 节“Java for the Wireless Toolkit Industry 保护域”中进一步介绍了保护域。

要选择希望仿真器使用的安全策略,请选择“编辑”>“首选项”,然后在“类别”列表中选择“安全”。从“安全策略”组合框中,选择 "MSA" 或 "JTWI"。选择其中一个可用安全策略。

在使用“通过 OTA 运行”时,会将打包的 MIDlet 套件直接安装到仿真器中,并在安装时将其置于保护域中。仿真器使用公钥密码学来确定已安装 MIDlet 套件的保护域。

如果 MIDlet 套件未签名,则会将其置于默认的保护域中。MSA 和 JTWI 的默认保护域不同。请参见第 6.2.1 节和第 6.2.2 节。如果 MIDlet 已签名,则会将其置于与签名密钥证书链的根证书相关联的保护域中。

例如,假设有家名为 Respectable Software 的公司,要分发加密签名的 MIDlet 套件。Respectable Software 则从假设的证书授权机构 Super-Trustee 购买签名密钥对。Respectable Software 使用签名密钥签名 MIDlet 套件,并将其证书连同 MIDlet 套件一起分发。当 MIDlet 套件安装到仿真器或某个设备上时,实现将使用其自己的 Super-Trustee 根证书副本来验证 Respectable 的证书。然后,其会使用 Respectable 证书验证 MIDlet 套件上的签名。假设一切检查无误,设备或仿真器就会将 MIDlet 套件安装到与 Super-Trustee 的根证书相关联的保护域中,多数情况为 identified_third_party

该工具包提供用于签名 MIDlet 套件、管理密钥和管理根证书的工具。

6.2.1 MSA 保护域

该工具包支持 MSA 的五个保护域:

按“运行”按钮运行仿真器中的应用程序时,默认情况下,代码将在 unidentified_third_party 保护域中运行。

6.2.2 Java for the Wireless Toolkit Industry 保护域

Sun Java Wireless Toolkit 包含四个保护域:

按“运行”按钮运行仿真器中的应用程序时,默认情况下,代码将在 untrusted 保护域中运行。


6.3 签署 MIDlet 套件

要签名 MIDlet 套件,必须首先将其打包(选择“项目”>“打包”),然后选择“项目”>“签名”。屏幕将显示签名窗口(图 6-2)。

图 6-2 “签署 MIDlet 套件”窗口

选择了 localhost1 别名的“签署 MIDlet 套件”窗口显示 Java SE 密钥详细信息

在“别名列表”中选择要使用的密钥,然后单击“签署 MIDlet 套件”按钮(绿色三角形)即可。


6.4 管理密钥

MIDlet 签名窗口还可用于管理密钥。出于测试目的,用户可创建密钥对以签名 MIDLet。要在设备上进行部署,必须从该设备所认可的证书授权机构获得签名密钥对。您也可以从现有的 Java SE 平台密钥库中导入密钥。

6.4.1 创建新密钥对

要创建全新的密钥对,请单击“新建密钥对”。工具包会提示您输入密钥别名,以及将与该密钥对关联的信息。

图 6-3 创建新密钥对

“新建密钥对”对话框提示输入别名、通用名、组织单位、组织、城市/地区、省/自治区和由两个字母组成的国家/地区代码

单击“创建”后,工具包会提示您选择保护域。刚创建的密钥对和保护域之间似乎没有直接关系,但这样非常有意义:

现在,设想一下安装使用新密钥签名的 MIDlet 套件后的情况:

6.4.2 获得真实密钥

在 Sun JavaTM Wireless Toolkit for CLDC 环境中创建密钥对并签名 MIDlet 的功能仅供测试使用。在真实设备上运行应用程序时,必须从该设备所认可的证书授权机构获得签名密钥对。

使用真实密钥签名 MIDlet 套件的步骤如下:

1. 生成新的密钥对。

在 Sun JavaTM Wireless Toolkit for CLDC 中,用户可通过在 MIDlet 签名窗口中按“新建密钥对”来生成新的密钥对,如上所述。

2. 生成证书签名请求 (Certificate Signing Request, CSR)。

a. 在签名窗口中按“生成 CSR”。

b. 要更改 CSR 文件的位置,请输入新路径,或按“浏览”,然后选择新的文件位置。

c. 按“创建”编写 CSR 文件。

编写 CSR 文件后,屏幕将显示表明创建成功的消息。

3. 将 CSR 发送给证书授权机构 (Certificate Authority, CA)。

CA 需要用户提供更多信息以便验证您的身份。用户还必须向 CA 支付其为您生成证书的费用。

CA 验证您的身份并收取费用后,其会发送用于证实您的公钥的证书。

4. 通过在 MIDlet 签名窗口中按“导入证书...”,将该证书导入到 Sun JavaTM Wireless Toolkit for CLDC 中。

现在,用户即可使用其自己的私钥来签名 MIDlet 套件了。Sun JavaTM Wireless Toolkit for CLDC 将处理将签名和证书置于 MIDlet 套件中时所涉及到的细节问题。

6.4.3 导入现有密钥对

在 Java SE 平台密钥库中,可能具有用户要用于 MIDlet 签名的密钥。在这种情况下,用户需要将签名密钥导入到 Sun JavaTM Wireless Toolkit for CLDC 中,以便签名 MIDlet 套件。要执行此操作,请从 MIDlet 签名窗口中单击“导入密钥对”。选择包含 Java SE 平台密钥库的文件。系统将提示用户选择要导入的密钥对的别名,然后用户只需在此密钥对导入密钥库后,输入密钥对的别名以便识别。最后,必须为该密钥对的根证书选择保护域。

6.4.4 删除密钥对

要从 MIDlet 签名窗口删除密钥对,请选择其别名,然后选择“操作”>“删除选择”。


6.5 管理证书

本节介绍如何使用 Sun JavaTM Wireless Toolkit for CLDC 管理仿真器的根证书列表。

真实设备具有类似的根证书列表,尽管用户通常不能修改这些列表。如果要在真实设备上部署应用程序,必须使用设备上已存在其根证书的证书授权机构颁发的签名密钥。否则,设备将无法验证您的应用程序。

在开发应用程序时,工具包的证书管理实用程序提供了一种操纵仿真器根证书列表的便捷方法,以满足测试需求。

选择“文件”>“实用程序”。选择“管理证书”,然后按“启动”打开“证书管理器”窗口。将显示微型密钥库 _main.mks。该密钥库位于 appdb 目录中。

appdb 目录还包含 keystore.ksserverkeystore.ks。Java ME 平台证书管理器无法打开 *.ks 文件,但是您可以按照 第 6.5.2 节“导入证书”中所述从这些密钥库中导入证书。

图 6-4 证书管理器

Java ME 证书管理器在左侧显示证书列表,在右侧显示 Java ME 密钥详细信息。

在窗口左侧的“证书列表”中,每个证书均显示为单独的一行。单击某个证书时,窗口右侧将显示其详细信息以及该证书的关联保护域。

6.5.1 启用和禁用证书

证书可以启用也可以禁用。如果要使证书暂时不可用而不将其从密钥库中删除,这是很方便的功能。要启用或禁用证书,请在列表中选择该证书,然后按“启用/禁用证书”。工具包将提示您确认该操作。选择“是”继续。

6.5.2 导入证书

用户可导入证书文件或从 Java SE 平台密钥库文件中的证书。

要导入文件中的证书,请在“证书管理器”窗口中单击“导入证书”。找到要导入的证书文件后,选择与该证书相关联的保护域。

要从 Java SE 平台密钥库中导入证书,请在“证书管理器”窗口的菜单中选择“操作”>“导入 Java SE 证书”。首先,为证书选择保护域。然后选择密钥库文件,再输入密钥库口令。最后,选择要导入的证书的别名。

6.5.3 删除证书

要从列表中删除证书,请选择该证书,然后选择“操作”>“删除选择”。


6.6 USB 令牌支持

USB 令牌为公钥和私钥以及证书提供了可移植且受密码保护的存储。Java SE PKCS#11 本机界面支持访问具有与 PKCS#11 兼容的本机驱动程序的 USB 令牌。安装驱动程序后,将包含 PKCS#11 库。在 Windows 上,库为 win32 DLL。

本节提供了在 Windows 平台上安装和使用 USB 令牌的样例说明。



注 - Linux 不受支持,因为尚未使用 Linux 驱动程序对 USB 令牌进行全面测试。如果与 PKCS#11 兼容的本机驱动程序可用,则 USB 令牌可以在 Linux 上工作。



本节其余部分逐步介绍了 USB 令牌支持所需的安装和设置过程。

6.6.1 安装 USB 令牌驱动程序

关闭所有应用程序。

1. 转至 http://downloads.geotrust.com/TCSPIKEY0407203016.exe

2. 当“文件下载”对话框打开时,单击“保存”。

请记下保存可执行文件的目录。

3. 选择可执行文件,然后双击以启动 Crypto Token 安装。

按照安装提示进行操作。插入令牌以便完成安装。

4. 将启动“Windows 新硬件向导”。

按照说明进行操作,并接受所有默认操作。

5. 向导结束后,选择“是”以重新启动计算机。


procedure icon  重新设置 USB 令牌口令

该步骤仅对新 USB 令牌有效。所有 USB 令牌均具有默认的口令 PASSWORD(全部大写)。您应重设该口令。

1. 单击 Windows 任务栏上的“开始”。选择“所有程序”>“GeoTrust 令牌”>“iKey 2000 系列软件”>“口令实用程序”。

2. 单击“更新口令”。

在输入新口令之前,系统将提示您输入“旧口令”。

3. 重设口令。

GeoTrust 和 Cingular 建议将口令设置为至少由八个混合字符组成。


procedure icon  管理 USB 令牌

转至 GeoTrust 驱动程序安装目录。运行 CIPUtils.exe 以管理 USB 令牌的内容。

6.6.2 使用 USB 令牌

“签署 MIDlet 套件”对话框提供了对 USB 令牌的访问。连接了 USB 令牌并安装驱动程序之后,选择“文件”>“装入密钥库”>“从 USB 令牌”(或键入 Ctrl -T)。如果 USB 令牌受密码保护,则系统将提示您输入密码。正确装入令牌后,将列出所有别名和密钥详细信息。然后即可选择密钥,并按照 第 6.3 节“签署 MIDlet 套件”中所述将其用于签名。

当尝试从 USB 令牌装入密钥库时,可能会看到错误消息。