`

J2ME MIDlet(MIDP 2.0)代码签名证书申请和使用指南

    博客分类:
  • J2ME
阅读更多

VeriSign 和 Thawte 的Java代码签名证书可以用于数字签名运行J2ME MIDlet(MIDP 2.0)代码,支持目前市面上流行的各种基于Java的手机多媒体和交互应用,运行签名后的MIDlet Suite就不会弹出烦人的警告框了! 但 VeriSign Java 代码签名证书通用性更好,支持更多类型的手机和 PDA 等移动终端。

以下MIDlet签名指南根据Sun网站和VeriSign/Thawte网站上的文章(网页)整理,请同时参考原文:
    (1) What's New in the J2ME Wireless Toolkit 2.0
     (2) Understanding MIDP 2.0's Security Architecture
     (3) Java ME - Micro App Development Made Easy
     (4) Nokia MIDlet(MIDP 2.0)代码签名证书申请和使用指南

本签名指南是基于 Sun Java Wireless Toolkit 2.2 和 2.5 Beta的 使用指南 编写,如果您还没有此开发工具可以到Nokia网站上 下载 合适的开发工具(推荐下载最新的2.5 Beta,因为2.2版本的仿真OTA运行有问题Bug,签名后不显示已经签名的签名信息)。

 

 

同时,请一定要先参考: MIDP 2.0安全机制,充分理解MIDP 2.0的安全机制有助于签名MIDlet的成功部署。

 

第1步 创建Keystore和私钥 Step 1. Create a Keystore and Key Pair:

如图1所示,打开开发工具包中的KToolbar, 点击“打开项目”,再在主菜单“项目”中选择“签署”,如图2所示,如果您已经有了Java代码签名证书的密钥对(.sks文件),则您可以点击“导入密钥对”导入您的证书密钥对,导入时需要输入您的私钥密码。如果您还没有申请证书,则您可以点击“新建密钥对”来生成密钥对(Keystore和私钥),正确填写证书信息后点击“创建”即可。
但请注意以下3点:
(1) 填写国家(Country)字段时只能填写国家名称缩写CN;
(2) 在生成密钥对时并没有提示输入私钥密码,但导入时需要输入私钥密码,缺省密码为“password”;
(3) VeriSign代码签名证书不支持中文,请填写正确的英文名称,而Thawte代码签名证书支持中文,您可以根据需要在单位名称、部门名称、所在城市和省份等填写中文名称。

 

 

 

这样就生成了密钥对,如图3所示,点击别名“wotrustj”就可以显示证书信息,请注意:此时显示的证书颁发者(Issuer)为自己,因为还没有提交CSR申请证书。

 

 

 

第2步 生成证书请求文件(CSR) Step 2. Generate the CSR and request your certificate:

如图4所示,选中证书别名后,再点击“Generate CSR”生成CSR文件:wotrustcs.csr,并把此文件发给WoTrust,等待1-2个工作日就可颁发证书。

 

 

 

第3步 把证书导入到 keystore中 Step 3. Import the certificate reply into your keystore:

一旦您的Java代码签名证书颁发,VeriSign的证书则附在颁发通知邮件的下面,直接完整复制(包括: -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----),并粘贴到记事本本上保存为mycert.cer文件即可。Thawte的证书则需要到Thawte网站上去下载,注意选择 PKCS #7 格式,此证书格式含有您的证书和根证书链,Keytool要求此格式证书。把此证书使用文本编辑器保存为mycert.cer。再点击“导入证书”导入您的证书,如图5所示,一旦导入成功,您会看到此证书的颁发者(Issuer)就是“Thawte Code Signing CA”了。您也可以在“文件”-“工具集”-“管理证书”-“导入证书”即可。您可以看到在J2ME证书管理器中含有Thawte所有根证书。现在,请您马上备份您的证书对(私钥和公钥)keystore文件:keystore.sks,最好是备份到光盘或其他电脑上,以便以后导入证书用!一般在开发工具的安装目录下,如:C:\WTK22\appdb 。

请注意: 在导入证书的时候,请选择安全保护域:trusted third party(可信任的第三方)。

第4步 签名MIDlet Step 4.Sign your MIDlet:

 

您需要Nokia的开发工具(NDS)来签名代码和配置您的应用了,如图7所示,先选中您的证书别名,再点击“签署MIDlet套件”就马上完成签名,提示“已签名的MIDlet套件”。

现在,.jad 就已经包含了您的私钥签名和公钥证书,您可以使用记事本打开JAD文件,会看到已经增加了许多字母,如图8所示,仔细查看就可以看到 MIDlet-Certificate-1-1:后面就是您的签名证书,而 MIDlet-Certificate-1-2:后面就是签名证书 Thawte Code Signg CA, MIDlet-Certificate-1-3:后面就是颁发证书的顶级证书 Thawte Premium Server CA,而 MIDlet-Jar-RAS-SHA1:后面就是使用您的私钥签名JAD代码后的签名摘要。

 

 

第5步 仿真运行和部署已经签名的MIDlet Step 5. Emulate and Deploy your MIDlet:

 

这样,就完成了MIDlet代码的签名,可以正常使用了。建议您先点击“运行”仿真运行应用软件,如图9所示,会显示一些运行信息,同时系统会启动仿真器运行。如果仿真测试没有问题就可以上传到服务器上。

 

 

建议同时做OTA仿真运行,点击“项目”-“通过OTA运行”就可以仿真下载安装过程,会提示“Are you sure you want to install...?(您确定要安装此MIDlet吗?)”,接着显示详细的MIDlet信息,同时会显示签名证书的颁发机构(CA)的详细信息,如下图10所示:

我们来对比一下如果没有签名安装MIDlet的提示情况,如下图11所示,同样会提示您是否确认要安装此MIDlet,同时会在“Advanced(高级)”中显示“Unindentified Third Party(代码开发商身份不能确认)”,强烈建议用户不要安装没有签名的MIDlet,否则一旦安装了恶意代码,您的手机可能就报废了!

 

 

 

第6步 常见问题解答

     如果您使用签名工具,一般都是没有问题,请检查 JAD 文件是否含有 MIDlet-Certificate-1-1 、 MIDlet-Certificate-1-2 、 MIDlet-Certificate-1-3 属性和 MIDlet-Jar-RSA-SHA1 属性。问题往往出在部署过程,主要常见问题有:

1. 不能验证证书

 

 

     签名成功后仿真时出现如下图11所示警告信息:

 

 

     显示“ System does not recognize who is trying to authorize the application ”,意思是无法验证证书颁发机构。主要有 2 个原因:

 

     (1) 证书导入问题:您申请证书时会生成私钥和 CSR( 证书请求文件 ) ,在颁发证书给您之前,一定不能删除 NDS 3.0 或 WTK 2.5 等签名工具,也不要再动证书管理,不要再使用自签证书做实验等。而取到证书后,必须在生成 CSR 的同一台电脑上的同一签名工具中导入证书,否则证书不能导入成功;

 

     (2) 使用的签名证书的根证书没有预置在手机中 ( 包括自签证书 ) ,请一定要购买 Thawte 或 VeriSign 的 Java 代码签名证书,其他 CA 颁发的证书都不支持。

2. JAR 文件已经被修改

     如下图12所示,显示如下警告信息:

 

 

 

     “ The signature of the JAR is invalid ”意思是 JAR 文件签名无效。主要有 2 个原因:

 

 

     (1) 签名 MIDlet 后修改了 JAR 文件:也许您发现签名时签名工具读取 JAD 文件,而不是 JAR 文件,这样会误以为签名时是签的是 JAD 文件,而与 JAR 文件无关。其实,签名时会计算出 JAR 文件的 SHA-1 摘要,并把此摘要写在 JAD 文件中。如果您修改了 JAR 文件,则其 SHA-1 摘要就变了, MIDlet 在验证时就会出错。所以,您签名 MIDlet 后,一定不能再修改 JAR 文件,如果要修改,则需要重新签名;

 

     (2) JAR 文件在网络传输或下载过程中被篡改,可能是下载的原因,也有可能是被其他人非法故意篡改。哪怕是一个字节的修改,也不能通过验证。这就是签名的基本功能之一。

3. 许可不匹配

 

     如果 MIDlet 中的许可属性 ( MIDlet-Permissions ) 中有一个或多个不属于所属的保护域,则仍然不允许安装。而如果 MIDlet 中的可选许可属性 ( MIDlet-Permissions-Opt ) 中有一个或多个不属于所属的保护 域,会允许安装。

 

 

     如下图13所示,如果我们修改 http 许可为: javax.microedtion.io.Connector.htt ,则会 显示如下警告信息:

分享到:
评论

相关推荐

    j2me的midp2.0所有源代码

    6. 安全性:MIDP 2.0提供了安全模型,包括权限管理,通过MIDlet-Signed属性来指定应用的签名和权限需求。 7. 生命周期管理:MIDlet类是所有MIDP应用的基础,它定义了应用的生命周期方法,如startApp()、pauseApp()...

    j2me的midp2.0的源代码

    总之,J2ME MIDP 2.0为移动开发提供了一套强大的工具集,使得开发者能够创建功能丰富的应用程序,而下载的源代码则为学习和开发提供了实操的基础。通过研究这些源代码,开发者可以提高其编程技巧,同时理解如何在...

    J2me中文教程MIDP2.0

    为了保护用户隐私和设备安全,MIDP 2.0采用了沙箱安全模型,并支持加密算法和数字签名。这确保了只有授权的代码才能访问敏感资源。 #### 示例代码解析 由于提供的部分内容包含乱码,无法直接解析出示例代码。但...

    J2ME(MIDP2.0)图像处理演示程序完整源代码增强版

    **J2ME(MIDP2.0)图像处理演示程序完整源代码增强版** Java 2 Micro Edition(J2ME)是Java...学习这个源代码可以加深对J2ME和MIDP2.0的理解,特别是在图形用户界面设计、数据管理、网络编程以及优化用户体验方面。

    J2ME源码midp2.0

    不多说了,想要的都知道.

    J2ME 中文教程 MIDP2.0

    本教程将深入探讨如何使用J2ME和MIDP2.0进行移动应用开发。 **1. J2ME架构** J2ME由多个配置(Configurations)和特征集(Profiles)组成。配置定义了运行时环境的基本功能,如内存管理、线程模型等,而特征集则...

    j2me Game Development with MIDP2.0

    总的来说,对于想要踏入J2ME游戏开发领域的初学者,或是寻求提升现有技能的开发者,《J2ME游戏开发与MIDP2.0》是一本不可或缺的指南。通过阅读这本书,你不仅可以学习到J2ME和MIDP2.0的基础知识,还能掌握开发出色...

    android平台中使用j2me MIDP2.0中GameAPI

    本文将详细介绍如何在Android环境中使用J2ME MIDP 2.0的Game API,特别是四个关键工具类:Layer、LayerManager、Sprite和TiledLayer。 **Layer** 类在MIDP 2.0中是一个基础组件,它代表了一个可绘制的平面层。Layer...

    J2me_midp2_0_souce_code.rar_com/sun/midp/jadto_j2me PublicKey_mi

    总之,这个压缩包提供的 J2ME MIDP 2.0 源代码是一个宝贵的资源,它涵盖了 JAD 处理和 PKI 安全方面的实现,对于想要深入 J2ME 开发、理解和优化其性能的开发者来说,这是一个难得的学习机会。通过仔细研究这些源码...

    J2ME MIDP 2.0 无线设备编程的一些源码

    在"codefans.net"这个压缩包文件中,可能包含了基于J2ME MIDP 2.0的源代码示例,涵盖了上述各种特性和功能的实现。通过学习和分析这些源码,开发者可以深入理解如何在无线设备上构建高效且用户友好的应用程序。无论...

    基于J2me MIDP2.0的手机游戏模拟

    【J2ME与MIDP2.0简介】 J2ME(Java 2 Micro Edition)是Java平台的一个子集,专为资源有限的嵌入式设备设计,如移动电话和PDA。它包含了用于开发和部署这些设备上应用程序的框架和API。MIDP(Mobile Information ...

    J2ME MIDP 2.0 无线设备编程的一些源码JAVA源码

    J2ME MIDP 2.0 无线设备编程的一些源码,像是一本书中的实例,都比较简单,基础性东西,新手可能会喜欢,附有少量游戏代码,截图上有具体的内容。 J2ME MIDP 2.0 无线设备编程的一些源码 (3 folders, 2 files, 1.38...

    midp2.0教程

    1. **增强的图形功能**:MIDP2.0支持Canvas类的扩展,允许开发者使用更复杂的图形和动画效果。Canvas类提供了绘制基本形状、图像和文本的能力,以及处理触摸屏输入和键盘输入的功能。 2. **多媒体支持**:MIDP2.0...

    深入MIDP2.0(2) - CLDC与MIDP工具类别

    6. **模拟器和调试工具**:文档可能会讨论如何使用MIDP的模拟器进行应用测试,以及使用J2ME Polish等工具进行开发和调试。 7. **性能优化**:由于资源限制,优化MIDlet的性能是关键。文档可能提供了一些技巧,如...

    midp2.0 spec kor_j2me_源码

    JAD(Java Application Descriptor)文件包含了关于MIDlet(MIDP应用程序)的信息,如版本、大小、权限等,而JAR(Java Archive)文件则包含了MIDlet的类文件和资源。MIDP 2.0对这两者进行了更新,增强了安全性和可...

    基于J2ME MIDP2.0的手机游戏的开发与实现.zip

    《基于J2ME MIDP2.0的手机游戏开发与实现》 在移动通信领域,Java 2 Micro Edition(J2ME)是一个广泛应用于小型设备和嵌入式系统的Java平台,它为开发者提供了构建功能丰富的应用程序,特别是手机游戏的框架。MIDP...

    MIDP2.0 稀有资源 与你分享

    这个文件可能包含了完整的MIDP2.0 API文档、SDK以及示例代码,帮助开发者理解和使用MIDP2.0进行应用程序开发。 总的来说,MIDP2.0是Java ME为移动设备开发提供的一个强大平台,它通过丰富的API和功能,使得开发者...

    原创的基于MIDP2.0的J2ME记事本源码

    在深入研究源码之前,开发者需要使用Java编译器(如Javac)将源代码编译成Class文件,然后使用MIDlet Suite打包工具(如jadcap或WTK的jad工具)将其打包成JAR和JAD文件,以便在兼容的模拟器或实际设备上运行。...

    MIDP2.0API

    MIDP2.0 API,J2me必用,MIDP2.0 API,MIDP2.0 APIMIDP2.0 API

    J2me游戏开发包MIDP2使用示例

    **J2ME游戏开发包MIDP2使用详解** J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。MIDP(Mobile Information Device Profile)是J2ME的一...

Global site tag (gtag.js) - Google Analytics