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所示,會顯示一些運行信息,同時系統會啟動仿真器運行。如果仿真測試沒有問題就可以上傳到服務器上。


我們來對比一下如果沒有簽名安裝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 ,則會 顯示如下警告信息:

(出處:http://m.survivalescaperooms.com)
新聞熱點
疑難解答