j2me制作自签名证书和给jar签名

先说明一点,貌似serial 40和s60v3的操作系统不支持自签名证书,如果碰巧是这两个平台,就不用往下看了.

 

做j2me开发的时候,如果程序试图访问一写敏感API,比如调用摄像头,访问网络,读写通讯录等等,总会弹出一个 确认框,需要用户确认是否同意,影响程序使用的流畅度. 诺基亚的塞班操作系统中,通过菜单-设置-程序管理- 已安装的程序-中选择某个应用程序,在选项中选择-套件设置,然后可以设置程序的访问权限,将其中的选项设 置为 仅第一次询问 或者 总是允许,就可以取消烦人的提示确认框.

 

问题是:如果应用程序没有获得有效的签名,可能在对应的 菜单中根本就不会出现 套件设置 这个选项, 或 者,即使有 套件设置 这个 选项, 在设置程序的访问权限时,在选项中根本没有 总是允许 或者 仅第一次询 问 这样类似的选项以供选择. 换句话说 如果程序缺少有效的签名和证书, 则无法为其设置访问权限. 程序签名以后,相应的菜单才会显示显示出来.才能对其进行配置. 由于申请第3方签名多有不便,而且要收取一定费用,对于我们这些只是编写用于个人使用的程序的人来说 不是一个很好的选择.

 

自签名: 为j2me程序制作自签名证书,可以解决这一问题 相关概念和机制就不多说了. 直接上代码 通过执行4个批处理文件,为jar和jad签名-------当然,整个签名过程也可以通过SDK集成工具完成,无需 调用cmd命令,这里只介绍通过cmd命令签名的过程

 

前提条件:

1,安装有 sun wtk程序 现在一般版本都是2.5的

2,配置好环境变量,以便于在任意目录下都可以通过cmd执行java命令和wtk/bin目录下的工具

3,j2me程序打包之后应该是两个文件,.jad和.jar,其中,.jad文件中应该包含将要被授权的API包信息 ,在打包之前就应该添加到.jad文件中 本文最后会附上一个样例内容.

 

接着是4个批处理文件

创建密钥.bat

第一个批处理文件全部内容如下:

@echo off

@echo 密钥库是名为.keystore的文件 一般默认位于C:/Documents and Settings/当前用户名/目录下

@echo 如果密钥库文件不存在 则先创建一个密钥库文件 如果密钥库已存在 则会更新密钥库

@echo 密钥库文件中存放的便是key-value的键值对,一个密钥库文件中可以存放多个key-value键值对

@echo 如果命令无效 请检查环境变量中是否包括wtk的bin目录

@echo 如果出现异常 可能是key值重复了,换个名称重新执行本程序即可

@set errorlevel=>nul

@echo 键值对的别名不能重复...若生成不成功 请换别名再试

@echo 请输入你的键值对的别名:

@set/p keystorename= >nul keytool -genkey -alias %keystorename% -keyalg RSA -validity 365

@echo 键值对创建完成 key值为%keystorename%,算法为RSA,有效期 一年,信息存储在.keystore文件中 pause 执行此程序将创建密钥库文件,并写入密钥键值对

 

查看键值对.bat

第二个批处理文件 只是用来查看密钥库中存储可哪些密钥键值对: @echo off @echo 查看密钥库中的所有键值对 keytool -list -v pause //

 

导出证书.bat

第三个批处理文件:

@echo

@echo 请输入你的键值对的别名,也就是密钥对的key值:

@set/p keystorename= >nul

@echo 要导出键值为 %keystorename% 的证书,请按回车:

@set/p enter= >nul

@echo 请输入证书名(带扩展名.cer):

@set/p cername= >nul keytool -export -alias %keystorename% -file %cername%

@echo %cername%证书存储位置为当前批处理文件所在目录

@echo 如果没有出现异常 则证书导出成功....{-.-}.... pause 此批处理文件会导出一个后缀为.cer的证书文件, ///

 

签名.bat

第4个批处理文件内容:

@echo off @echo 给jad和jar签名

@echo 请输入密钥库中的键值,也就是可以值:

@set/p wtkkey= >nul

@echo 请输入你要签名的jad文件位置(绝对路径):

@set/p wtkjad_before= >nul

@echo 请输入wtk的bin目录位置:

@set/p wtkbinpath= >nul

@set wtkbinDpath=%wtkbinpath:~0,2% cd %wtkbinpath% %wtkbinDpath% java -jar jadtool.jar -addcert -alias %wtkkey% -keystore .keystore -inputjad %wtkjad_before% -outputjad %wtkjad_before%

@echo jad签名完成,现在给jar签名,请输入jar文件位置:

@set/p wtkjar_bofore= >nul

@echo 请输入密钥库的密码(在创建密钥库时输入的密码):

@set/p wtkkeypass= >nul java -jar jadtool.jar -addjarsig -jarfile %wtkjar_bofore% -keypass %wtkkeypass% -alias %wtkkey% -keystore .keystore -inputjad %wtkjad_before% -outputjad %wtkjad_before%

@echo 签名完成..%wtkjar_bofore%的签名信息被保存在%wtkjad_before%中

@echo 安装到手机的时候 要安装3个文件 .cer的证书文件, .jad的签名文件以及jar包 pause

 

在手机中,先将.cer证书装好(直接打开就会提示安装),再打开.jad文件,注意 里应通过.jad文件安装,因为签名 信息全写在.jad文件中 可用记事本打开查看 然后,在程序管理中给应用程序设置访问权限吧!

 

附;

j2me1.jad 签名前(包含了要授权的API信息) MIDlet-Version: 1.0.0 MIDlet-Vendor: Midlet Suite Vendor MIDlet-Jar-URL: j2me1.jar MicroEdition-Configuration: CLDC-1.1 MIDlet-1: MainMIDlet,/img.png,com.main.MainMIDlet MicroEdition-Profile: MIDP-2.0 MIDlet-Permissions: javax.microedition.media.Player,javax.microedition.media.control.VideoControl,javax.microedition.media.control.RecordControl,javax.microedition.media.Manager MIDlet-Name: j2me1 Midlet Suite

 

j2me1.jad 签名后 MIDlet-Version: 1.0.0 MIDlet-Vendor: Midlet Suite Vendor MIDlet-Jar-URL: j2me1.jar MicroEdition-Configuration: CLDC-1.1 MIDlet-1: MainMIDlet,,main.MainMIDlet MicroEdition-Profile: MIDP-2.0 MIDlet-Permissions: javax.microedition.media.Player,javax.microedition.media.control.VideoControl,javax.microedition.media.control.RecordControl,javax.microedition.media.Manager MIDlet-Name: j2me1 Midlet Suite MIDlet-Certificate-1-1: MIICSTCCAbKgAwIBAgIES0K26TANBgkqhkiG9w0BAQUFADBpMQswCQYDVQQGEwJDTjERMA8GA1UECBMIc2hhbmdoYWkxETAPBgNVBAcTCHNoYW5naGFpMREwDwYDVQQKEwhERUFMRUFTWTEMMAoGA1UECwwDUiZEMRMwEQYDVQQDEwpjYWkgbGltaW5nMB4XDTEwMDEwNTAzNTAwMVoXDTExMDEwNTAzNTAwMVowaTELMAkGA1UEBhMCQ04xETAPBgNVBAgTCHNoYW5naGFpMREwDwYDVQQHEwhzaGFuZ2hhaTERMA8GA1UEChMIREVBTEVBU1kxDDAKBgNVBAsMA1ImRDETMBEGA1UEAxMKY2FpIGxpbWluZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAgXnBQv7bqLo2i1xkBOhXcrgHRwwvM6YHXlJX2oZF5B1WAEOady1T9cPgqeJXD37UBLIRg0uabyB/D0mP/t8rkdEBzHT2u+B8+xqilf5Fmed3kduegs+PpXDXyl4pIxlKNUnBICLSSSpYAlmijvCQx66Hs+TDb4kadf7mDBBcQKkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQB144TNGLrjsdoVbne4Qz5rbYnlhvXpthTDxlDbuZyG/y9om2V65+E2v3nrX5ZfACCjGMcgSi0oDcdoTkcdICNwIh4dUeOHcp/ykxvHTN7l9p7uPjGUIS2QPs077t4zGkC5adj9YgTp2ixNy8WnuFTwnHsrq+WjBPEsbcFwnC0tMQ== MIDlet-Jar-RSA-SHA1: JU9zjfVMcYkW3Cbve53bHV90qEOOCB4OnaJ2yhWDRJJhV3S+6WaDiRI4JXBZQj5li0UBFz0ZVyp3TZ+JYQnb2IZpDE38t7Ct4u32j67vL4+BFujka2GQD0juPdXDM3IfurmLFmnLODzjLrr9gP2sLl74umGGM0HpkOx8JLoLuBY=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值