<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java中的認證

    Posted on 2009-12-03 23:17 深夜兩點 閱讀(1116) 評論(0)  編輯  收藏
    (上一篇:計算機中的加密和認證http://www.tkk7.com/deepnighttwo/archive/2009/12/03 /304631.html
    A公司開發(fā)了一個軟件,打成了一個jar包,然后發(fā)布出去liao。作為一個用戶,如何來確認這個jar包確實是A公司發(fā)布的哪個?而且,如何確定這個jar包沒有被別有用心的一小撮篡改過?這就需要Java中的簽名來保證。

    Java中的可執(zhí)行代碼就是class文件。直接使用class文件是很naive的。通常的做法是是對一個jar包中的所有class文件進行簽名。過程可以分為如下步驟。
    1. 首先使用JDK自帶的keytool工具生成一個keystore,命令如下: keytool -genkey -keystore keystore文件 -alias 別名?;剀嚭筮€有一些信息需要填寫。keystore里面包含了很多信息,包括公鑰和私鑰信息。當然可以使用keytool命令從keystore文件里面導(dǎo)出公鑰和私鑰。keytool命令還有很多參數(shù),比如你可以指定使用的摘要算法等。(具體用法可以Google之)。
    2. 然后,第二步當然是找個CA給公鑰簽名。自娛自樂的用途就可以不用這一步了。
    3. 第三步是給jar包簽名。JDK中提供了給jar包簽名的工具,叫做jarsinger。命令各式如下:jarsigner -keystore keystore文件 jar文件 別名(就是生成keystore時用的那個別名)?;剀嚭笠斎朊艽a,也跟生成keystore時候的密碼一樣就行了。
    好,到這里就算簽名結(jié)束了。命令執(zhí)行完畢后,jar包會陡然多出幾k來。這幾k就是簽名的內(nèi)容。


    Java(或者說是Java Runtime)是支持簽名和認證的。也就是說一個jar包一旦被簽名了,Java Runtime會對這個jar包進行驗證。下面是驗證簽名的過程。
    首先需要知道簽名后jar包里面多出了什么。簽名并不會改變jar包中已經(jīng)有的內(nèi)容,而是添加了一個.DSA(說明使用的是DSA算法)文件和一個.SF(signed file)文件,然后在.MF文件里面增加一些內(nèi)容。驗證的過程是這樣的(我猜的。。。覺得不對可以去http://java.sun.com/javase/6/docs/technotes/guides/jar /jar.html,Sun公司的jar包規(guī)范,自己看自己猜),首先是DSA文件,它里面存儲了公鑰內(nèi)容和對SF文件摘要的加密內(nèi)容,所以,首先驗證公鑰(跟https里面的那個驗證是一樣的過程),驗證完畢證書后,用公鑰解密加密的內(nèi)容,然后得到SF文件的摘要值,把這個值和實際 SF文件的摘要值比較,這樣就可以保證SF文件沒問題了。SF文件里面的內(nèi)容包含了很多條目的簽名值。首先是對MF文件的簽名值,這就是驗證MF文件了。而MF文件里面對每個class文件都有一段描述的內(nèi)容,比如:
    Name: common/class2.class

    MD5-Digest: (base64 representation of MD5 digest)

    SHA-Digest: (base64 representation of SHA digest
    它代表這個class文件對應(yīng)摘要算法的摘要值。這個條目在SF里面有一個對應(yīng)的條目:
    Name: common/class2.class
    MD5-Digest: (base64 representation of MD5 digest)


    注意,SF文件中的這個摘要值不是class文件的,而是MF文件里面對應(yīng)條目的。也就是說,SF里面的簽名值統(tǒng)統(tǒng)是用來驗證MF文件或者MF文件中的條目的,而MF文件中的摘要值才是用來驗證class文件的。真繞。。。

    總之,最后一層層的驗證后,整個jar包中的內(nèi)容都被驗證了。過程:CA的證書->自己的公鑰->SF文件簽名 ->MF文件簽名和MF文件每個條目的簽名->jar包中的每個文件(當然主要是clas文件。別的文件應(yīng)該也會被驗證的,至少properties文件會被簽名認證)

    驗證完了之后,就可以保證jar包確實出自某公司之手,也確實沒有被別有用心的一小撮人篡改過。如果你信任某公司,那就可以用這個jar包了。

    同樣,如果一個applet的jar包是簽名了的,而且在啟動applet的時候用戶選擇信任這個簽名,那么這個applet就擁有了訪問本機資源的權(quán)限,如果選擇不信任,那么applet就不會被啟動。如果一個applet沒有被簽名,那么applet可以啟動,但是不會被允許訪問本機資源(文件等)。

    如果一個證書沒有被CA的證書認證,比如說,對于我寫的這個applet,它就是用我自己搞出來的沒認證過的證書簽了名的:http://appletfarm.appspot.com/juliaappletsigned.html
    這時候Java會提示說:

    “該應(yīng)用程序的數(shù)字簽名無法驗證”,因為我沒給過VeriSign年費。如果證書是驗證過的,對話框就會是詢問你是否信任“某公司”,這個意思就是說,此jar包確實是“某公司”搞出來的,信任那個公司就可以運行它了。


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 最刺激黄a大片免费网站| 午夜免费不卡毛片完整版| 97se亚洲综合在线| 国产福利在线免费| 特级毛片A级毛片免费播放| 久久久久久久久亚洲| 成年女人毛片免费播放视频m| 视频免费1区二区三区| 亚洲成人黄色在线观看| 亚洲女同成人AⅤ人片在线观看| 少妇性饥渴无码A区免费| 国产精品高清视亚洲一区二区| 亚洲人成国产精品无码| 毛片免费全部播放一级| 巨胸狂喷奶水视频www网站免费| 久久精品国产亚洲αv忘忧草| 日日噜噜噜噜夜夜爽亚洲精品| 2021免费日韩视频网| 国产区在线免费观看| 午夜亚洲国产理论片二级港台二级| 亚洲AV日韩AV永久无码久久| 国产一区二区视频免费| 亚洲日韩中文字幕日韩在线| 亚洲另类激情专区小说图片| 亚洲AV无码专区亚洲AV桃| 久久久久亚洲AV无码专区首| 亚洲爆乳大丰满无码专区| 亚洲区不卡顿区在线观看| 一级毛片在线免费看| 亚洲综合一区无码精品| 亚洲精品和日本精品| 免费国产黄网站在线观看可以下载| 亚洲欧洲中文日产| 又粗又硬又黄又爽的免费视频 | 亚洲va在线va天堂va四虎 | 午夜亚洲国产精品福利| 亚洲一区二区三区影院| 日本在线高清免费爱做网站| 黄色网址大全免费| 亚洲国产综合第一精品小说| 四只虎免费永久观看|