[J2ME] Signing a midlet suite的讨论稿[Update]

[J2ME] Signing a midlet suite的讨论稿

发起者:郑昀(zhengyun_ustc)

[问题]如何对一个MIDlet jar签名呢?

很多人都想知道怎么让自己的MIDlet访问网络啦、发送短信啦都能够不弹出烦人的警告框。

单纯回答说“你必须去Versign购买一个证书,或者找厂商签名”之类的话,也是让人不知道该如何具体操作的,还是懵懵懂懂的。

所以,下面我们试图聚合各位,一起参透这个话题:

如何签名?

找谁签名?

到底如何操作?

能不能自己给自己签名?

 

[尝试一] David Hayes的MIDlet jar signing tutorial可行吗?

David Hayes在他的Blog中提到了一个办法,毫无疑问,他是试验成功了的。

他给出了一个《MIDlet jar signing (a tutorial) ,

http://www.spindriftpages.net/pebble/dave/2005/06/20/1119275880301.html 》,文后的评论中,他还补充说了“经过这样的签名后,你必须通过OTA方式或者其他方式,让手机安装签名后的JAD,而不是仅仅通过上传JAR来安装。只有通过JAD安装方式,这种签名才会奏效”。

不幸的是,我试验不出来。签名之后,JAD中倒是多了这么一段:


MIDlet-Certificate-1-1


MIDlet-Certificate-1-1: MIICTjCCAbcCBEQ06RcwDQYJKoZIhvcNAQEE。。。blabla

而且我的jar包中的MIMESMSSender.jar\META-INF文件夹下,也多了ZHENGYUN.RSA和ZHENGYUN.SF两个文件;MANIFEST.MF文件中也多了很多这样的东西:


MIDlet-Certificate-1-1


Name: res/icons/logo.png

SHA1-Digest: 7waVS61BFIfNrpz8/CeyuskUGuU=

 

Name: res/icons/exit.png

SHA1-Digest: L+8Kb/TeuRUpWsq5qrU9epu5Srw=

但是都没用。

 

有的网友说这个方法在手机上安装,遇到了“Authorisation Failed”错误提示,而David说


Authorisation Failed


I've seen Authorisation Failed a few times now. Typically rebooting the phone (and taking the battery out0 fixes it for me. I'ver heard that linebreaks in the permissions attribute in the Manifest can cause problems but it seems ok to me on 6680/6630/6230i(could be firmware dependent?). Maybe you should try a shorter permission string?

Other things I have heard cause problems MIDlet-Permissions contains permissions that the phone doesn't support?

[参考一] motocoder的官方回复

请阅读

https://motocoder.custhelp.com/cgi-bin/motocoder.cfg/php/enduser/std_adp.php?p_faqid=442&p_created=1092167721 上的这段话,看来,如果想使用摩托罗拉的受限制API的话,那么就不能自己签名,只能和他们谈生意了。


论坛贴子之摘录


Signing a midlet suite

 

  Question:

  We have purchased a code signing certificate from verisign to sign our midlet.

However it does not appear to work.

The certificate we received back from verisign is a chain of certificates. Can you look at the certificate and tell me if it should work i.e. is the root CA for the cert on the phone. If I need to add additional 'Midlet-Certificate' entries in the jad can you please advise on what they should be.

 

  Answer:

  The issue is that you can not purchase a certificate through Verisign or any other Authority and sign the midlet yourself - it will not work.



 

You need to go through Motorola in order to get this done, but it will only be done if there is a business relationship with Motorola and your company. 

      也就是说,摩托罗拉的策略是,他的手机不允许你自己签名!而必须通过摩托罗拉自己来做。

 

 

[参考二] 如何和摩托罗拉办理签名手续

请阅读

https://motocoder.custhelp.com/cgi-bin/motocoder.cfg/php/enduser/std_adp.php?p_faqid=708&p_created=1119609364&p_sid=r7EU8p4i&p_lva=442 上的这段话。


论坛贴子之摘录


我总结一下步骤:

1.        如果你没有NDA,那么请到MOTOcoder.com的首页,上面有一个“Innovate”的链接,在这里提交申请。

2.        确定你的公司和摩托罗拉之间有一个有效的NDA (Non Disclosure Agreement)!而且必须是和Motorola Mobile Devices Business or PCS (Personal Communications Sector)的协议!

3.        告诉摩托罗拉你的应用(MIDlet)需要在哪些设备上运行!

4.        告诉摩托罗拉为什么要提出Signing Request?你的应用都要使用到哪些受限制的API?

5.        通知Motorola Business Sponsor。通过motocoder站点的“Ask A Question”这个链接来提交。

 

[参考3] 用证书权威机构的证书签署Midlet
作者 dingjf7516
http://www.j2medev.com/bbs/dispbbs.asp?BoardID=2&ID=7622&replyID=38045&skin=1

一:证书权威机构以及证书的选择策略

1:确定目标手机是否实现了第三方信任域,是否支持证书权威机构的证书。

多数Moto的手机不支持证书权威机构的证书,不支持Java Verified的认证。我个人只能确定大部分诺基

亚和索爱的手机是支持的。

2:确定目标手机安装了该证书权威机构的根证书。

因为验证的过程需要从JAD属性包含的证书路径追溯到安装在手机上根证书,所以在选择证书权威机构之

前,必须确认目标手机上安装了该机构的根证书。一般认为最通用的是Verisign,其次是Thawte。

3:向选定的证书权威机构申请正确的证书。

这些机构一般提供多种的安全证书,必须选择正确的证书。对于Midlet,应该选择java code signing证

书。

4:关于价格。

据我个人了解,Verisign的一年有效期的证书是400$,Thawte是199$,我们最后选择的是Thawte的。

二:相关keytool 命令简介

1:生成公用/私用密钥

keytool -genkey

2:生成CSR(certificate signing Request)

keytool -certreq

3:导入证书

keytool -import

三:wtk签署的步骤说明

1:打开工程执行build和package

2:菜单project-》Sign-》import keypair,选择用keytool导入了证书的keystore

3:sign midlet suite

四:向证书权威机构申请购买证书的流程。

1:用keytool生成CSR

2:登录Thawte的网站。

3:注册购买java code signing证书,按照提示流程填写相关信息,其中包含CSR。

4:提供公司注册证明和公司电话号码的证明,等待对方验证。

5:完成相关证明的验证后,Thawte会把证书放在网页上,下载得到签署者证书。

 

[参考4] 用自制证书签署Midlet
作者 dingjf7516

抱歉,前面关于购买证书的流程,忘记了最重要的一步,付款。不给钱是不行的哟。:)

一:自制证书签署是否可行?

1:无论David Hayes还是诺基亚论坛的网友random john doe,都需要把自制的根证书安装到手机上。所

以用自制证书签署Midlet的前提是手机支持某种方法可以让用户安装证书到第三方信任域。而具有这种功

能的手机并不多。

2:JSR118-MIDP2.0规范规定,“Third party Protection Domain Root Certificates downloaded

after device manufacture MUST NOT be used for
authentication of MIDlet suites.”也就是后安装的证书是不可以用来验证Midlet的证书和数字签名的

所以,如果在S60上可以用自制证书将安装到第三方信任域的话,说明该手机的安全机制的实现是不符合

规范的,可能带来安全问题。

3:我个人没有验证过自制证书签署Midlet,所以只是对David Hayes和John Doe如何做给出一个介绍。

二:David Hayes的方法

1:keytool生成公用/私用密钥。

2:keytool -export导出自制根证书。

3:安装根证书到手机。

4:build并packageMidlet

5:jarsigner修改jar。

6:jadtool加入证书。

7:jadtool加入数字签名。

三:John Doe的方法

1:keytool生成公用/私用密钥。

2:keytool -selfcert生成自制的根证书。

3:keytool -export 导出根证书。

4:安装根证书到手机。

5:build并packageMidlet

6:用WTK签署Midlet,加入证书和数字签名。

比较两个人的做法,David Hayes没有keytool -selfcert自制证书的步骤,而多了jarsigner把签名写入

jar的步骤。相比较之下,John Doe的做法可能更正确一些。

在John Doe的帖子中,schnejan表示6600的版本必须是4.09.1或以后,daniele.pinto表示Midlet不能用

到precompile library。

不过手机的中文版和英文版也可能是不同的,需要大家自己去验证。:)

时间: 2024-09-14 17:20:56

[J2ME] Signing a midlet suite的讨论稿[Update]的相关文章

使用J2ME程序测试MIDlet的生命周期

在MIDlet程序学习中,生命周期是一个比较抽象的概念.其实生命周期就是一个简单的规定,规定了MIDlet中的每个方法,什么时候被系统调用.下面是一个示例代码,在每个方法的内部都输出一条语句,可以根据程序的输出结果来验证各方法被调用的顺序,具体代码如下: 以下是引用片段://文件名:LifeCircleMIDlet.Javaimport javax.microedition.midlet.*;/*** 测试MIDlet的生命周期*/public class LifeCircleMIDlet ex

J2ME开发环境搭建 之 EclipseMe

J2ME开发环境搭建 之 EclipseMe   第一节    初识Eclipse Eclipse是一个开发源代码,基于java的可扩展开发平台,它是在OSI(Open Software Initiative 开发源代码计划)认可的通用公共许可证(CPL)版下被授予许可证的集成开发平台(IDE).作为当今最流行的java开发IDE之一,java社群使用Eclipse以及基于Eclipse技术而来的IBM Websphere的开发者已经超过了半数. Eclipse本身只是一个框架和一组响应的服务,

在你的JDeveloper里扩展J2ME

在你的JDeveloper里扩展J2MEIndex目录Description描述  Download and Installation 下载和安装Online Walkthrough 在线预览 Description描述Oracle9i JDeveloper的J2ME扩展提供了Jdeveloper和各种各样的J2ME兼容无线工具包之间的整合.要使用这个扩展,你需要: 1.       在你的机器安装至少一个Wireless Toolkit(无线工具包) 2.       在JDeveloper里

Antenna 打包 J2ME 程序

程序|打包 Antenna 打包 J2ME 程序 作者: Jeru 很多人喜欢用 ant 来编译打包 Java 应用程序,可以很方便的生成 war 包在 J2EE 容器中运行,我在 sun 的网站上也看到了一篇用 ant 打包 J2me 程序的教程:http://wireless.java.sun.com/midp/articles/ant/ 测试了一下,还不错,但美中不足的是,需要自己事先写好 manifest.mf 和 jad 文件,于是心有不甘,继续在 google 上搜索,终于找了一个很

用EclipseME0.5.5创建一个简单的J2ME程序

程序|创建 用EclipseME0.5.5创建一个简单的J2ME程序 上一篇文章<如何在Eclipse3.0.1上安装EclipseME 0.5.5版本>,我们已经讲了如何在Eclipse3.0.1上安装Eclipse程序. 今天我们就要用他来创建我们的第一个程序.绝大多数程序教程的第一个程序,都叫做HelloWorld.那么我们就来编一个HelloWorld程序. 1, 文件2, 新建项目3, 选择J2ME,J2ME Midlet Suite4, 输入项目名称:MyFirstJ2ME5, 选

J2ME小游戏-fly

1.FlyMidlet.java package fly; import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import java.util.*; /** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Compan

介绍J2ME的几个重要概念

概念 J2ME平台中有几个重要的概念,例如内存.CLDC.MIDP等.初学J2ME往往对这些概念理解不深,甚至出现偏差.本文的目的在于对J2ME中的相关重要概念进行阐述. 1. 内存 我们一直在强调,移动信息设备的内存非常小,使用起来应该加倍的珍惜,但是我们却很少知道这些内存是如何分类的,下面将做详细的介绍.事实上MIDP设备的内存分为三种,Programme Memory.Heap.persistent Storage. Programme Memory是移动信息设备分配给MIDlet sui

J2ME HELLOWORLD 小试牛刀

T628降价了,买了一个玩玩,这个"鸡鸡"支持JAVA扩展,所以第一时间去http://developer.sonyericsson.com/site/global/home/p_home.jsp下载了最新的SDK(FILE SIZE:42M),下载的时候要注意,SDK说明中应该指出支持T628,eclipse和eclipseme是早就下好的,下面就该安装了: 1.安装j2se 1.4.2,并配置path和classpath2.安装semc_j2me_sdk_2_1_5.exe,装完后

Eclipse开发J2ME程序之Hello World

引言 前面几篇文章已经介绍了Eclipse及其工作环境的安装.配置过程,并完成各 项相关准备工作.因此从本文开始将讲述如何使用前面配置好的Eclipse开发环 境来创建J2ME项目,开始真正的J2ME开发之旅.由于这是创建的第一个J2ME程序 ,按照程序开发的惯例,这头把交椅自然又是非"Hello World"莫属了. HelloWorld虽然功能简单,但是麻雀虽小,五脏俱全,通过这个小程序的开发, 完全能够达到让读者熟悉J2ME程序开发一般流程的目的. 创建J2ME项目 与其他语言应