讀古今文學網 > Maven實戰 > 13.6.1 GPG及其基本使用 >

13.6.1 GPG及其基本使用

GnuPG(簡稱GPG,來自http://www.gnupg.org/)是PGP標準的一個免費實現,無論是類UNIX平台還是Windows平台,都可以使用它。GPG能夠幫助我們為文件生成簽名、管理密鑰以及驗證簽名等。

首先,訪問http://www.gnupg.org/download/並下載對應自己平台的GPG分發包,按照官方的文檔將GPG安裝完畢,運行如下命令檢查安裝:

在使用GPG之前,先得為自己準備一個密鑰對,即一個私鑰和一個公鑰。之後才可以使用私鑰對文件進行簽名,並且將公鑰分發到公鑰服務器供其他用戶下載,用戶可以使用公鑰對簽名進行驗證。

使用如下命令生成密鑰對:

GPG會問你密鑰的類型、大小和有效時間,通常使用默認的值即可。GPG還會要求你輸入自己的名稱、電子郵件地址和對密鑰的註釋,這些內容會被包含在公鑰中並被你的用戶看到,因此務必正確填寫。最後,還可以提供一個密碼來保護密鑰,這不是強制性的,但通常最好提供以防止別人得到你的密鑰後惡意使用。你將來需要使用私鑰和密碼為文件提供簽名,因此一定要認證保護它們。

現在已經有了密鑰對,就可以在命令行中查看它們(其他導入到本地機器的密鑰也會被顯示),如下面的命令可用來列出所有公鑰:

這裡的/home/juven/.gnupg/pubring.gpg表示公鑰存儲的位置。以pub開頭的一行顯示公鑰的長度(1024D)、ID(C6EED57A)以及創建日期(2010-01-13)。下一行顯示了公鑰的UID,也就是一個由名稱、註釋和郵件地址組成的字符串。最後一行顯示的子鑰不用關心。

類似地,下面的命令用來列出本機私鑰:

對GPG的公私鑰有了基本的瞭解之後,就可以使用如下命令為任意文件創建一個ASCII格式的簽名:

這裡的-a選項告訴GPG創建ASCII格式的輸出,而-b選項則告訴GPG創建一個獨立的簽名文件。如果你的私鑰擁有密碼,這個時候就需要輸入密碼。如果私鑰沒有密碼,那麼只要他人獲得了你的私鑰,就能夠以你的名義對任何內容進行簽名,這是非常危險的。

在該例中,GPG會創建一個名為temp.java.asc的簽名文件,這時就可以將這個後綴名為.asc的簽名文件連同原始文件一起分發給你的用戶。如果你的用戶已經導入了你的公鑰,就可以運行如下命令驗證原始文件:

為了能讓你的用戶獲取公鑰並驗證你分發的文件,需要將公鑰分發到公鑰服務器中。例如,hkp://pgp.mit.edu是美國麻省理工學院提供的公鑰服務器,運行如下命令可將公鑰分發到該服務器中:

這裡的--keyserver選項用來指定分發服務器的地址,--send-keys用來指定想要分發公鑰的ID。你可以羅列本地公鑰來查看它們的ID。需要注意的是,公鑰會在各個公鑰服務器中被同步,因此你不需要重複地往各個服務器分發同一公鑰。

現在,你的用戶可以將服務器上的公鑰導入到本地機器:

上述就是一個基本的簽名、分發並驗證的流程,在使用Maven發佈項目的時候,可以使用GPG為發佈文件提供簽名。現在讀者應該已經知道如何手工完成這一步驟了,下面介紹如何使用Maven GPG Plugin自動化簽名這一步驟。