国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Java2下Applet數(shù)字簽名

2019-11-18 11:57:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  自從java技術(shù)開(kāi)始應(yīng)用以來(lái),人們對(duì)Java平臺(tái)的安全性以及由于部署Java技術(shù)所引發(fā)的安全問(wèn)題給予了極大的關(guān)注。非凡是在1998年11月Java2發(fā)布后,Java的安全體系結(jié)構(gòu)發(fā)生了根本的改進(jìn),對(duì)于終端用戶而言,它可以保護(hù)文件和私人數(shù)據(jù)不被惡意的程序或病毒感染和破壞,鑒別代碼提供者的身份。對(duì)于開(kāi)發(fā)者而言,通過(guò)使用API方法,能夠?qū)踩怨δ芗傻綉?yīng)用程序中,因?yàn)锳PI的體系結(jié)構(gòu)能夠定義和集成對(duì)特定的資源的使用權(quán)限、加密、安全性治理、策略治理,并提供了一些類來(lái)治理公鑰/密鑰對(duì)及信任用戶群的公鑰證書(shū)。同時(shí)系統(tǒng)治理員、開(kāi)發(fā)者和用戶可以使用它提供的工具治理鑰匙庫(kù),在JAR文件中生成數(shù)字簽名、簽名的完整性檢測(cè)、創(chuàng)建和修改策略文件。按照J(rèn)ava設(shè)計(jì)者的觀點(diǎn),Java安全包括2個(gè)方面的內(nèi)容,首先將Java作為一種安全的平臺(tái)提供給用戶,在此平臺(tái)上,可安全地運(yùn)行Java程序;其次提供用Java編程語(yǔ)言實(shí)現(xiàn)的安全工具和服務(wù),它使得諸如企業(yè)界這樣一些對(duì)安全非常敏感的領(lǐng)域也可應(yīng)用Java技術(shù)。本文將就這二個(gè)方面介紹Java2的安全性新特性以及該新特性下的Applet數(shù)字簽名的具體實(shí)現(xiàn)方法。 
  
   Java2采用了如圖1所示的新的安全體系結(jié)構(gòu),并基于這種安全體系結(jié)構(gòu)提供了很多新特?
  
  
  1.1 密紋訪問(wèn)控制
  
  
    這種能力從一開(kāi)始就在JDK中存在。但要使用它,應(yīng)用程序的編寫(xiě)者不得不做大量的編程工作例如,創(chuàng)建SecurityManager和Classloader類的子類并使其用戶化。HotJava1.0就是一個(gè)這樣的應(yīng)用程序,它答應(yīng)瀏覽器用戶在幾個(gè)不同的安全等級(jí)上進(jìn)行選擇。然而,這種編程涉及非常敏感的安全問(wèn)題,它要求程序員對(duì)計(jì)算機(jī)安全有精深的理解和熟練的技巧。新的安全體系結(jié)構(gòu)將使這些變得簡(jiǎn)單而安全。
  
  
  1.2 易于配置的安全策略
  
  
    與上述情況相似,這種能力在原來(lái)的JDK中也是存在的,但是不便于使用,而且編寫(xiě)安全代碼也不是簡(jiǎn)單明了的事情。于是,人們期望能夠答應(yīng)應(yīng)用程序的編寫(xiě)者和用戶能夠不通過(guò)編程來(lái)設(shè)置安全策略。
  
  
  
  1.3 便于擴(kuò)展的訪問(wèn)控制結(jié)構(gòu)
  
  
    一直到JDK1.1為止,為了創(chuàng)建1個(gè)新的訪問(wèn)許可,你必須在SecurityManager類中增加1個(gè)新的check方法。新的安全體系結(jié)構(gòu)則答應(yīng)設(shè)置各類訪問(wèn)許可(每個(gè)都表示對(duì)1個(gè)系統(tǒng)資源的訪問(wèn)),并能對(duì)所有正確訪問(wèn)許可(包括未定義的許可)進(jìn)行自動(dòng)處理。
  
  
  1.4 安全檢查擴(kuò)展至所有Java程序
  
  
    那種所有本地代碼是可信的內(nèi)置概念將不復(fù)存在,取而代之的將是本地代碼(例如非系統(tǒng)代碼,安裝在本地的應(yīng)用程序包等)服從于與Applet相同的安全控制,但是可以聲明對(duì)本地代碼的政策是最寬容的,從而使這些代碼可被認(rèn)為是完全可信而有效地運(yùn)行。上述原則也可應(yīng)用于已簽字的Applet和任何Java應(yīng)用程序。
  
  
  2 Java2安全體系的概念及運(yùn)行機(jī)制
  
  
  2.1 保護(hù)域
    Java2安全體系結(jié)構(gòu)中的一個(gè)基本的概念是保護(hù)域(PRotected Domain)。1個(gè)域可通過(guò)對(duì)象集來(lái)劃分范圍,這些對(duì)象當(dāng)前可由1個(gè)主體直接訪問(wèn)。而主體是在計(jì)算機(jī)系統(tǒng)中被授予許可的實(shí)體。JDK1.0所利用的沙箱就是一個(gè)有著固定邊界的保護(hù)域?qū)嵗1Wo(hù)域的概念是一種在保護(hù)單元間起著分組和隔離作用的便利機(jī)制。例如,我們可以將保護(hù)域分開(kāi)以避免它們之間的直接交互作用,于是,任何答應(yīng)的交互作用必須通過(guò)可信系統(tǒng)代碼或被有關(guān)的域所明確答應(yīng)。
  
  
    保護(hù)域通常分為明確的2個(gè)類別,系統(tǒng)域和應(yīng)用程序域。所有被保護(hù)的外部資源如:文件系統(tǒng)、網(wǎng)絡(luò)設(shè)施以及屏幕和鍵盤等僅能通過(guò)系統(tǒng)域來(lái)訪問(wèn)。圖2中顯示了1個(gè)Java應(yīng)用環(huán)境的域的組成。從概念上講,1個(gè)域包括1組類,這些類的實(shí)例被授予相同的一組許可。保護(hù)域是由現(xiàn)行策略所確定的。Java應(yīng)用程序環(huán)境保持了來(lái)自代碼(類和實(shí)例)到它們的保護(hù)域然后再到它們的許可的映射,如圖3所示。1個(gè)線程的執(zhí)行可能完全發(fā)生在1個(gè)單一的保護(hù)域中,也可能涉及1個(gè)應(yīng)用程序域或是系統(tǒng)域。例如:1個(gè)打印消息的應(yīng)用程序?qū)⒉坏貌慌c系統(tǒng)域發(fā)生交互作用,因?yàn)橄到y(tǒng)域是唯一對(duì)輸出流的訪問(wèn)點(diǎn)。在此種情況下的任何時(shí)候,應(yīng)用程序域都不能通過(guò)調(diào)用系統(tǒng)域獲得除打印消息外的任何額外許可,否則將是一個(gè)嚴(yán)重的安全性隱患。在相反的情形下,1個(gè)系統(tǒng)域從1個(gè)應(yīng)用程序域中調(diào)用1個(gè)方法,如當(dāng)1個(gè)AWT系統(tǒng)域調(diào)用1個(gè)Applet的繪畫(huà)方法來(lái)顯示這個(gè)Applet時(shí),有效訪問(wèn)權(quán)限與應(yīng)用程序域所答應(yīng)的當(dāng)前權(quán)限在任何時(shí)候都相同,這一點(diǎn)也是同樣至關(guān)重要的。換句話說(shuō),一個(gè)具有較低權(quán)限的域不能通過(guò)調(diào)用一個(gè)更高權(quán)限的域,或被一個(gè)更高權(quán)限的域所調(diào)用來(lái)獲得額外的許可。上述有關(guān)1個(gè)線程涉及2個(gè)保護(hù)域的討論自然地歸納為1個(gè)遍歷多重保護(hù)域的線程,計(jì)算許可的一個(gè)簡(jiǎn)單而謹(jǐn)慎的經(jīng)驗(yàn)做法是:
  
  
  
    (1)一個(gè)執(zhí)行線程的許可集可被認(rèn)為是由該線程所遍歷的所有保護(hù)域的許可的交集。
    (2)當(dāng)1條代碼調(diào)用doPrivileged方法時(shí),執(zhí)行線程的許可集被認(rèn)為是包括所有代碼的保護(hù)域以及由它直接或間接調(diào)用的保護(hù)域的權(quán)限。即通過(guò)doPrivileged方法可使1條可信代碼能臨時(shí)訪問(wèn)更多的資源,這在某些情況下是必要的。例如,1個(gè)應(yīng)用程序可能不被答應(yīng)直接訪問(wèn)包含字體的文件,但是,顯示文本的系統(tǒng)實(shí)用程序必須代表用戶獲得那些字體。
  
  
    在執(zhí)行期間,當(dāng)請(qǐng)求訪問(wèn)1個(gè)要害系統(tǒng)資源(如文件I/O和網(wǎng)絡(luò)I/O)或者API方法需要執(zhí)行1個(gè)敏感的操作時(shí),例如讀1個(gè)文件,資源處理代碼直接或間接地調(diào)用1個(gè)非凡的稱為訪問(wèn)控制(accessController)類的方法,訪問(wèn)控制類通過(guò)檢查調(diào)用棧來(lái)作出決定是否準(zhǔn)予該請(qǐng)求或操作發(fā)生。在調(diào)用棧中是執(zhí)行該操作需要調(diào)用的一些類的成員方法,因?yàn)槊總€(gè)類都屬于一些保護(hù)域,每個(gè)保護(hù)域都建立了一些策略,因此在調(diào)用棧的每個(gè)方法都被分配了1組權(quán)限。訪問(wèn)控制類由棧頂開(kāi)始,自頂向下檢查每個(gè)方法,看是否方法被所在的保護(hù)域所答應(yīng),假如發(fā)現(xiàn)一個(gè)方法權(quán)限沒(méi)有得到答應(yīng),訪問(wèn)控制
  就拋出安全性異常;反之,假如到達(dá)棧底仍未拋出異常,即說(shuō)明調(diào)用棧中的所有方法均滿足保護(hù)域的權(quán)限要求,訪問(wèn)控制答應(yīng)操作發(fā)生。其中有一種非凡的情況,即當(dāng)訪問(wèn)控制遍歷調(diào)用棧時(shí),將查找是否存在優(yōu)先域(Privileged Domain),假如存在優(yōu)
  域,即使沒(méi)有到達(dá)棧底,訪問(wèn)控制也將停止遍歷調(diào)用棧并答應(yīng)操作發(fā)生。雖然新的安
  機(jī)制初看上去增加了許多調(diào)用API方法的消耗,但是Java2確實(shí)使用了一些技術(shù)去加速
  查權(quán)限的過(guò)程,例如訪問(wèn)控制將過(guò)濾掉重復(fù)的域并在碰到第一個(gè)優(yōu)先域時(shí)停止檢查,
  說(shuō)明額外的操作將是一個(gè)本地的方法調(diào)用,SUN的基準(zhǔn)測(cè)試顯示了新的安全檢查是相當(dāng)快的。
  
  
    最后,每個(gè)域包括系統(tǒng)或應(yīng)用程序域可以對(duì)其域邊界內(nèi)的內(nèi)部資源進(jìn)行附加保。例如,一個(gè)銀行系統(tǒng)的應(yīng)用程序可能需要支持并保護(hù)其內(nèi)部的一些概念,如查帳、存
  和取款等。由于此種保護(hù)的語(yǔ)義不像那些可猜測(cè)的語(yǔ)義可以被JDK預(yù)置,因而,在這個(gè)
  次上的保護(hù)最好留給系統(tǒng)或應(yīng)用程序開(kāi)發(fā)員來(lái)做。
  
  
    目前,1個(gè)域單獨(dú)地由1個(gè)代碼來(lái)源(CodeSource)鑒別,它封裝了在該域中運(yùn)行的代碼的2個(gè)特性:代碼基址和公共密鑰證書(shū)集,公共密鑰對(duì)應(yīng)于在該域中為所有代碼簽字的私有密鑰。因而,由相同的密鑰簽字和來(lái)自相同URL的類被放在同一個(gè)域中。1個(gè)域還包含在該域中授予代碼的許可,它是由現(xiàn)行安全策略所決定的。
  
  
  2.2 證書(shū)、鑰匙庫(kù)及其相關(guān)工具
  
  
    在Java2的安全體系下,1個(gè)Applet開(kāi)發(fā)和運(yùn)行的過(guò)程如下:
  
  
    在代碼的分發(fā)端:
  
  
    (1)開(kāi)發(fā)Java源程序并對(duì)其進(jìn)行編譯。
    (2)用JAR工具對(duì)類文件和資源文件進(jìn)行封裝。
    (3)用keytool創(chuàng)建公鑰和密鑰,生成X。509V1簽名證書(shū),輸出證書(shū)。
    (4)通過(guò)jarsigner工具用生成的密鑰對(duì)JAR文件進(jìn)行數(shù)字簽名。
    在代碼的接收端:
    (1)用keytool輸入證書(shū)視其為可信任。
    (2)用policytool創(chuàng)建和修改安全性策略配置文件,授權(quán)請(qǐng)求的訪問(wèn)權(quán)限。
    (3)從網(wǎng)絡(luò)取得字節(jié)碼,用公鑰驗(yàn)證數(shù)字簽名證書(shū)和文檔代碼的完整性。
    (4)驗(yàn)證字節(jié)碼的合法性,根據(jù)策略文件分配相應(yīng)權(quán)限。
    (5)執(zhí)行代碼,完成后被垃圾回收器回收內(nèi)存。
  
  
    在用公鑰驗(yàn)證數(shù)字簽名證書(shū)之前,接收方需要確認(rèn)公鑰自身的可靠性,因此通常情況是提供一個(gè)包含公鑰的證書(shū)而不是公鑰自身。1個(gè)證書(shū)包括:
  
  
    (1)1個(gè)公鑰。
    (2)1個(gè)唯一的名字實(shí)體(個(gè)人或公司),它是證書(shū)的所有者,包含用戶名字、公司、組織、城市、地址、國(guó)家代碼、省份等信息。
    (3)數(shù)字簽名:1個(gè)證書(shū)被1個(gè)分發(fā)者的實(shí)體簽名,保證證書(shū)確實(shí)包含另1個(gè)
  實(shí)體(所有者)的公鑰。
    (4)分發(fā)者的標(biāo)識(shí)名信息。
  
  
    對(duì)于接收者可以用分發(fā)者的公鑰來(lái)驗(yàn)證他的數(shù)字簽名,檢查證書(shū)的合法性。然而公鑰可能包含在另一個(gè)證書(shū)中,而數(shù)字簽名需要用另一個(gè)證書(shū)的分發(fā)者的公鑰來(lái)驗(yàn)證,這樣嵌套下去,直到一個(gè)公鑰被接收者確認(rèn)是可信任的。假如接收者不能建立信任鏈,例如:1個(gè)分發(fā)者的證書(shū)不合法,那么可以用keytool-import命令來(lái)計(jì)算指紋,每個(gè)指紋是一個(gè)相關(guān)的短數(shù)字,它唯一可靠地標(biāo)識(shí)證書(shū)(指紋是一個(gè)用信息摘要算法計(jì)算的證書(shū)信息的哈希值),接收者可以呼叫證書(shū)的所有者,并比較發(fā)出的證書(shū)和接收證書(shū)的指紋,假如指紋相同,則證書(shū)不同。因此能夠保證證書(shū)在傳遞的過(guò)程中未被修改。另一個(gè)潛在的問(wèn)題是發(fā)送者身份的標(biāo)識(shí),有時(shí)一

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘谷县| 弋阳县| 台州市| 衡东县| 拉孜县| 巴彦县| 桐乡市| 南溪县| 镇赉县| 灵武市| 亳州市| 彝良县| 手机| 太原市| 新闻| 巴彦淖尔市| 固镇县| 三门县| 莒南县| 苏州市| 南汇区| 永新县| 怀安县| 兴仁县| 柘荣县| 余庆县| 滁州市| 东源县| 绥芬河市| 称多县| 正安县| 清涧县| 兴和县| 同仁县| 三都| 汉中市| 苍梧县| 光泽县| 黄龙县| 乾安县| 时尚|