Jar檔案的數位簽章

來源:互聯網
上載者:User

JAR檔案可以用 jarsigner工具或者直接通過 java.securityAPI 簽名。簽名後的JAR 本身的檔案檔案與原來JAR本身的 檔案完全相同,只是更新了它的 manifest檔案,並在 META-INF 目錄中增加了兩個檔案,一個簽名檔案和一個簽名塊檔案。如果你對數位簽章還不熟悉,請先閱讀《 數位簽章簡介》,《Java的數位簽章和數位憑證》JAR檔案可以用一個儲存在 Keystore資料庫中的認證進行簽名的。儲存在 keystore 中的認證有密碼保護,必須向 jarsigner工具提供這個密碼才能對 JAR 檔案簽名。圖 1. Keystore 資料庫

 Jar檔案使用jarsigner簽名以後,在META-INF檔案夾下會多出兩個檔案:XXX.SF檔案與XXX.YYY檔案。XXX應該與你簽名時使用密鑰的別名一致.而XXX.YYY的副檔名,根據數位簽章的類型RSA、DSA
或者 PGP 以及用於簽名 JAR 的認證類型而有不同的副檔名。XXX.SF檔案的格式類似於 manifest 檔案(一組 RFC-822 頭)。XXX.SF檔案主要包括的對JAR本身檔案及Manifest檔案的簽名碼(加密後的散列碼)。奇怪的是進行簽名後Manifest檔案中也有針對JAR本身檔案的簽名碼,且和XXX.SF檔案中的不一樣。為什麼會有兩個呢?不解。在XXX.YYY檔案(比如TEST.RSA)中,除了簽名私密金鑰所對應的公開金鑰外,還包含了簽名者的一些資訊。在驗證一個簽名的 JAR 時,將簽名檔案的摘要值與對 JAR 檔案中的相應項計算的摘要值進行比較。MANIFEST.MF檔案:Manifest-Version: 1.0Created-By: 1.6.0_11 (Sun Microsystems Inc.)Main-Class: Hello
Name: Util.classSHA1-Digest: UQkSPocH+hEH4W8d4/E7ifo7Y2A=
Name: Hello.classSHA1-Digest: HQJfMvXm5JhrX2afxITiicvzDdQ=TEST.SF檔案Signature-Version: 1.0SHA1-Digest-Manifest-Main-Attributes: +yrcddwVI7QFdviahKRNKIHg2Zc=Created-By: 1.6.0_11 (Sun Microsystems Inc.)SHA1-Digest-Manifest: dCxOoUzPsGXrxxYH5PRNx47Er7M=
Name: Util.classSHA1-Digest: 5g4n0t4ScMDowIF10vD7pMtcM1g=
Name: Hello.classSHA1-Digest: OvGpI1SCZ7Py8O0rjqUUsZT6H/Q=Keystore要簽名一個 JAR 檔案,必須首先有一個私密金鑰。私密金鑰及其相關的密鑰憑證儲存在名為keystores的、有密碼保護的資料庫中。JDK 包含建立和修改 keystores 的工具。keystore 中的每一個密鑰都可以用一個別名標識,它通常是擁有這個密鑰的簽名者的名字。所有 keystore 項 ( 密鑰和信任的認證項 ) 都是用唯一別名訪問的。別名是在用 keytool -genkey 命令產生金鑰組 ( 公開金鑰和私密金鑰 ) 並在 keystore 中添加項時指定的。之後的 keytool命令必須使用同樣的別名引用這一項。例如,要產生一個別名為“robin”產生一個新的公開金鑰 / 私密金鑰對並將公開金鑰封裝到自簽名的認證中,要使用下述命令:例1keytool -genkey -alias robin -keystore robin.keystore -storepass GL2009 -keypass gl2009 -validity 100 -keyalg RSA -keysize 1024 -sigalgMD5withRSA這個命令序列用於產生一個名為的公開金鑰/私密金鑰對名字為robin,並把它添加到檔案名稱為robin.keystore的keystore檔案中,如果該檔案還不存在,則建立它。其中檔案名稱密碼為GL2009,要添加的公開金鑰/私密金鑰對的私密金鑰密碼為gl2009,檔案有效期間為100天,公開金鑰/私密金鑰對名字為robin,公開金鑰/私密金鑰對採用RSA演算法,公開金鑰/私密金鑰的長度為1024,簽名時採用MD5withRSA演算法(用MD5演算法進行散列,用RSA演算法對其散列碼進行加密)然後按照提示輸入一些資訊,如下:What is your first and last name?  [Unknown]:  hubingWhat is the name of your organizational unit?  [Unknown]:  GLWhat is the name of your organization?  [Unknown]:  gameloftWhat is the name of your City or Locality?  [Unknown]:  chengduWhat is the name of your State or Province?  [Unknown]:  shichuanWhat is the two-letter country code for this unit?  [Unknown]:  cnIs CN=hubing, OU=GL, O=gameloft, L=chengdu, ST=shichuan, C=cn correct?  [no]:  yesjarsigner 工具通過jarsigner工具,可以使用 keystore 產生或者驗證 JAR 檔案的數位簽章。假設像例1那樣建立了keystore檔案robin.keystore,可以用下面的命令簽名一個
JAR 檔案:例2jarsigner -keystore robin.keystore -storepass GL2009 -keypass gl2009 Hello.jar robin這個命令用密碼“GL2009”從名為“robin.keystore”的keystore檔案中提出名字為“robin”、密碼為“gl2009”的公開金鑰/私密金鑰對,並對Hello.jar
檔案按照keystore檔案robin.keystore中的約定進行數位簽章。例3jarsigner -keystore robin.keystore -storepass GL2009 -keypass gl2009 -signedjar Hello_signed.jar Hello.jar
robin這個命令用密碼“GL2009”從名為“robin.keystore”的keystore檔案中提出名字為“robin”、密碼為“gl2009”的公開金鑰/私密金鑰對,並對Hello.jar
檔案按照keystore檔案robin.keystore中的約定進行數位簽章,簽名的輸出檔案為Hello_signed.jar。jarsigner工具還可以驗證一個簽名的 JAR 檔案,很簡單,只需執行以下命令: jarsigner -verify Hello.jar 如果簽名的 JAR 檔案沒有被篡改過,那麼 jarsigner工具就會告訴您 JAR 通過驗證了。否則,它會拋出一個 SecurityException, 表明哪些檔案沒有通過驗證。還可以用 java.util.jar和 java.securityAPI
以編程方式簽名 JAR

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.