MIDlet签名及安装全攻略

为了更好的了解签名的MIDlet的部署流程,本文对签名的MIDlet的产生,发布,安装整个流程做了分析。
 
本文的基本思路是:
1.采用openSSL自己做CA;
2.使用SUN WTK来对已有的MIDlet进行签名;
3.使用SUN WTK的OTA运行方式来安装,从中看到签名的验证
 
本文包含的步骤包括:
1.基于openSSL创建自己的CA,并生成顶级和二级CA证书;
2.使用WTK工具来新建密匙对,并提交CSR(Certification Request Standard);
3.采用二级CA证书对第1步中提交的CSR进行签名,生成经CA签名的证书;
4.将签名后的证书导入WTK;
5.将顶级CA证书安装到WTK;
6.在WTK中使用经CA签名的证书来对MIDlet进行签名;
7.通过OAT安装MIDlet,证书验证通过,能正常安装
 
准备工具:
1.openSSL( http://www.openssl.org/
 
具体步骤:
1.1 基于openSSL生成顶级和二级CA证书
(1)    安装 openSSL
下载 openSSL源码后,解压缩,依据 $openssl-0.9.8d/ INSTALL.W32中的说明(我是在Windows+cygwin上安装的,别的平台请参考相应的INSTALL.XXX文件),执行
./config
make
make test
make install
安装完后,使用cygwin(任何命令行终端)执行 openssl,确认该命令可执行(主要是保证$ openssl-0.9.8d/apps在 $PATH 变量中)
(2)    准备创建CA
  cd $yourpath
   mkdir CA req
   cd CA
   mkdir newcerts private
   echo '01' > serial
   touch index.txt
   touch openssl.conf
(3)    编辑配置文件 openssl.conf
    请参考 openssl.txt,将文件内容保存为 openssl.conf 即可
(4)    生成CA公私钥cakey.pem(顶级CA证书的密匙对)
   (以下命令在$yourpath下执行。以后如无特别说明,所有命令均在$yourpath下执行)
   openssl req -new -x509 -extensions v3_ca -keyout ./CA/private/cakey.pem -out ./CA/cacert.pem -days 7300 -config ./CA/openssl.conf
    这是系统会提示你输入各种属性值,比如:Common Name (CN),Country Name (C),State Or Province Name(S),Locality Name(L)等,你依此填写即可。不过,按照目前的 ./CA/openssl.conf的配置,你必须牢记countryName, stateOrProvinceName, organizationName这几个属性值,以后所有的证书申请的这几个域的值必须保持与该CA顶级证书的一致,否则无法使用CA证书给他们签名。当然,你也可以修改 ./CA/openssl.conf中的[policy_match],来确认哪些域要与CA顶级证书保持一致
    这里其实就已经生成了顶级CA证书的密匙对cakey.pem和证书cacert.pem。只不过,这里的证书是PEM格式,可以使用命令
openssl x509 -in ./CA/cacert.pem -inform PEM -out ./CA/cacert.der -outform DER
来PEM格式证书转换成X509标准格式的证书(DER格式)
(5)    生成二级CA证书请求
    openssl req -new -extensions v3_req_ca -keyout ./Class_2/Class_2_key.pem -out ./Class_2/Class_2_req.pem -days 7300 -config ./CA/openssl.conf
(6)    使用顶级CA证书对二级CA证书申请进行签名
openssl ca -policy policy_anything -extensions v3_req_ca -out ./Class_2/Class_2_cert.pem -config ./CA/openssl.conf -infiles ./Class_2/Class_2_req.pem
将证书Class_2_cert.pem转换成x509标准格式证书
生成PEM格式的X509标准格式证书
openssl x509 -in ./Class_2/Class_2_cert.pem -inform PEM -out ./Class_2/Class_2_cert.cer -outform PEM
生成DER格式的X509标准格式证书
openssl x509 -in ./Class_2/Class_2_cert.pem -inform PEM -out ./Class_2/Class_2_cert.der -outform DER
这时,在Windows下双击cacert.der,可以看到该证书信息,但是系统提示该CA证无法信任。双击Class_2_cert.der,系统也提示该证书无法信任。但是当你安装了cacert.der之后,Class_2_cert.der也就可以被信任了,并且能够看出Class_2_cert.der是cacert.der签发的证书。
 
1.2 使用WTK提交CSR
(1)    下载SUN WTK并安装之后,启动KToolbar;
(2)    打开项目UIDemo,并打开菜单“项目->签署”;
(3)    在弹出的对话框中点击“新建密匙对”。注意,按照./CA/openssl.conf配置中的要求, 新建密匙对中的countryName, stateOrProvinceName, organizationName值必须与CA顶级证书保持一致;然后点击“创建”
(4)    点击”生成CSR”,生成 mykey.csr;
 
1.3 对CSR进行签名
(1)    将生成的mykey.csr文件放到 $ yourpath /req 目录下,
(2)    执行
openssl ca -policy policy_anything -keyfile ./Class_2/Class_2_key.pem -cert ./Class_2/Class_2_cert.pem -config ./CA/openssl.conf -out ./req/mykey_cert.pem -infiles ./req/mykey.csr
将证书mykey_cert.pem转换成X509标准格式
openssl x509 -in ./req/mykey_cert.pem -inform PEM -out ./req/mykey_cert.der -outform DER
这是双击./req/mykey_cert.der 就会看到一个三级的证书链
 
1.4 将新证书导入WTK
    这里有一点问题要注意,WTK的证书管理底层使用的是 keytool.exe,导入证书时,要求导入PKCS#7格式的证书。这种证书将证书链的上的相关证书都打包放在一个文件中,在MIDlet的jad中的MIDlet-Certificate-1-1, MIDlet-Certificate-1-2, MIDlet-Certificate-1-3之类的,就是证书链的各个证书。
有个细节问题,一般的MIDlet的jad中包含的证书链不要包括证书链上的顶级证书,因为有些JVM在验证证书链时,要计算证书链上的证书数,而一般的证书链上的顶级证书是要求安装在手机上的,不是在jad文件中的。因此,将新证书所在的证书链导入WTK时,不能包括顶级证书。
如何获得一个证书所在的证书链上的所有证书呢?呵呵,windows系统内置了这一工具(MS的证书管理工具还是挺方便的)。
(1)    首先通过IE的 Tools->Internet Options->Content->Certificates,从中删除你刚才点击安装的顶级CA证书(否则待会到处证书链的时候,就会包含顶级证书)
(2)    你可以双击./req/mykey_cert.der;
(3)    在弹出窗口中点击“details”属性页;
(4)    点击“Copy to File…”;
(5)    选择 PKCS#7格式,并选择将证书链中的所有证书到处;
(6)    存为 mykey_cert.p7b,这样,mykey_cert.p7b就是一个包含证书链上所有证书(除顶级证书外)的一个证书package.
(7)    在WTK中,点击“项目->签署”,选中刚才生成CSR的那个密匙对(mykey),然后点击“导入证书”,选择mykey_cert.p7b导入即可。如果没有什么地方操作失误,这时 mykey 应该能够显示处该证书链的深度,以及证书链上各证书的一些基本信息。
(8)    点击“签署MIDlet套件”,会提示签署成功。
 
1.5 安装MIDlet
(1)    在WTK中,点击“通过OTA运行(Run via OTA)”,一步一步的安装,系统最后会提示你UIDemo.jad中包含的证书无法通过验证。这是意料之中的;
(2)    在WTK中,点击“文件(File)->工具机(Utilities)->证书管理”,将CA顶级证书导入;
(3)    再次通过OTA安装UIDemo,应该能成功。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值