程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> j2me Signing a midlet suite的討論稿

j2me Signing a midlet suite的討論稿

編輯:J2ME
[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。

不過手機的中文版和英文版也可能是不同的,需要大家自己去驗證。:)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved