日期:2014-05-20  浏览次数:20775 次

J2ME签名备忘

?? ?今天拿到VeriSign的签名,使用过程中碰到几个问题

1 备份和导入签名数据,密钥备份就是保存C:\Documents and Settings\登陆用户\j2mewtk\2.5.2\appdb目录下的keystore.ks,还原同样也是很简单,覆盖掉这个文件即可,而不是在签署工具中导入,这是我一开始就误解的,弄了老半天,大概文档的作者以为这是很明白的道理,不屑于说吧。

2 签名的步骤很重要,一开始我直接签eclipse项目下的jad,提示没有对应的jar文件,于是签到.eclipseme.tmp\emulation下的打包文件,再把jad覆盖回来项目,这样打包的程序在安装后提示“证书错误,请与程序提供商联系”。正确的方法是打包(混淆)后直接给打包好的jad签名,项目有修改的话发布时都需要重新签名。

3 签了名和未签名的Midlet有很大的不同,不是签了名就有所有权限的,而是需要在MIDlet-Permissions写明你有的权限,否则签名之后你连提示都没有,直接就不给你调用,这个好像也是没有在书或者教程上提到的。要了解需要授权的Midlet权限可以打开Wireless toolkit,打开一个项目,选择设置按钮,选择“权限”,点填加。

?

为了简化用户管理操作, MIDlet 把一些类似功能分组,这样,用户只需对功能组设置许可即可。如:
许可 “Net Access”( 网络访问 ) 组来代替许可 javax.microedition.io.Connector.http ,这对于简化
手机的交互操作非常有用。 

MIDP 2.0 和 JTWI 定义了如下 7 个功能组: 

(1) Net Access: 包括所有网络连接许可; 

(2) Messaging: 包括所有与发送和接收短消息 ( 短信和彩信 等 ) 相关的许可; 

(3) Auto Invocation : 包括与自动启动 MIDlet 相关的许可,如: Push Registration 

(4) Local Connectivity : 包括与本地连接相关的许可,如: IrDA 或 蓝牙; 

(5) Multimedia Recording : 包括与允许录音、照相、摄像等相关的许可; 

(6) Read User Data : 包括读取用户数据相关的许可,如:通讯录、日程表等; 

(7) Write User Data : 包括写用户数据相关的许可。 

??untrusted 的 MIDlets 只能调用一个不需要许可保护的 API ,如:

java.util 
java.lang 
java.io 
javax.microedition.rms 
javax.microedition.midlet 
javax.microedition.lcdui 
javax.microedition.lcdui.game 
javax.microedition.media 
javax.microedition.media.control 
?

4 VeriSign申请中使用的公司名称必须是英文名,而Thawte可是使用中文名,不知道卖签名的公司会不会因为怕麻烦忽悠我,不过安装时显示的公司名是在jad中填写的,这似乎没有太大的影响。

?

引用:MIDP2.0安全机制与MIDlet数字签名

?

关于签名的效果(就不开另外的帖子了):

1 Nokia S60的机子上不签名无法使用https协议,签名后才可以,其他手机上未发现这个情况,测试的S40手机无法支持Https协议,而且本身不支持个人证书导入。(未签名前会崩溃报空指针错,签名后可以,但如果地址写错也会报空指针,注意到S60的符号键盘里面就有两个冒号,一个是全角的--c它大爷的,浪费我好多时间)

2 (据说只有部分)S60机上不用签名就可以获得串号,S40则需要签名,而且部分s40的机器签名也不能获取串号,mobile签了名也无法获取串号。

3 S60上签名对sms-push和写文件都有效,而mobile测试结果对sms-push无效,奇怪的是安装的时候如果以前版本不删除会提示资源被占用(就是sm port),无法安装。

4 在se610c上测试发现签名的包无法安装,询问销售商的结果是部分手机不支持java签名证书,只支持server签名证书,也就是说购买的签名在这些手机上无法安装,会报告“安装错误”