GPG及其基本使用。
PGP
PGP(Pretty Good Privacy)就是這樣一個用來幫助提高安全性的技術。PGP最常用來給電子郵件進行加密、解密以及提供簽名,以提高電子郵件交流的安全性。
GPG
GnuPG(簡稱GPG)是PGP標準的一個免費實現,無論是類UNIX平臺還是Windows平臺,都可以使用他。GPG能夠幫助我們為檔案生成簽名、管理密碼以及驗證簽名等。
首先,訪問http://www.gnupg.org/download/並下載對應自己平臺的GPG分發包,按照官方的文件將GPG安裝完畢,執行如下命令檢查安裝:
gpg --version
在使用GPG之前,先得為自己準備一個金鑰對,即一個私鑰和一個公鑰。之後才可以使用私鑰對檔案進行簽名,並且將公鑰分發到公鑰伺服器供其他使用者下載,使用者可以使用公鑰對簽名進行驗證。
使用如下命令生成金鑰對:
gpg --gen-key
GPG會問你金鑰的型別、大小和有效時間,通常使用預設的值即可。GPG還會要求你輸入自己的名稱、電子郵件地址和對金鑰的註釋,這些內容會被包含在公鑰中並被你的使用者看到,因此務必正確填寫。最後,還可以提供一個密碼來保護金鑰,這不是強制性的,但通常最好提供以防止別人得到你的金鑰後而已使用。你將來需要使用金鑰和密碼為檔案提供簽名,因此一定要認證保護他們。
現在已經有了金鑰對,就可以在命令列中檢視他們(其他匯入到本地機器的金鑰也會被顯示),如下面的命令可用來列出所有公鑰:
gpg --list-keys /home/test/.gnupg/pubring.gpg
這裡的/home/test/.gnupg/pubring.gpg表示公鑰儲存的位置。以pub開頭的一行顯示公鑰的長度、ID以及建立日期。下一行顯示了公鑰的UID,也就是一個由名稱、註釋和郵件地址組成的字串。最後一行顯示的子鑰不用關心。
類似的,下面的命令用來列出本機私鑰:
$gpg --list -secret-keys /home/test/.gnupg/secring.gpg
對GPG的公私鑰有了基本的瞭解之後,就可以使用如下命令為任意檔案建立一個ASCII格式的簽名:
gpg -ab temp.java
這裡的-a選項告訴GPG建立ASCII格式的輸出,而-b選項則告訴GPG建立一個獨立的簽名檔案。如果你的私鑰擁有密碼,這個時候就需要輸入密碼。如果私鑰沒有密碼,那麼只要他人獲得了你的私鑰,就能夠以你的名義對任何內容進行簽名,這是非常危險的。
在該例中,GPG會建立一個名為temp.java.asc的簽名檔案,這時就可以將這個字尾名為.asc的簽名檔案連同原始檔案一起發放給你的使用者。如果你的使用者已經匯入了你的公鑰,就可以執行如下命令驗證原始檔案:
gpg --verify temp.java.asc
為了能讓你的使用者獲取公鑰並驗證你分發的檔案,需要將公鑰分發到公鑰伺服器中。例如,hkp://pgp.mit.edu是美國麻省理工學院提供的公鑰伺服器,執行如下命令可將公鑰分發到該伺服器中:
gpg --keyserver hkp://pgp.mit.edu --send-keys C6EED57A
這裡的 --keyserver選項用來指定分發伺服器的地址,--send-keys用來指定想要分發公鑰的ID。你可以羅列本地公鑰來檢視他們的ID。需要注意的是,公鑰會在各個公鑰伺服器中被同步,因此你不需要重複的往各個伺服器分發同一公鑰。
現在,你的使用者可以將伺服器上的公鑰匯入到本地機器:
gpg --keyserver hkp://pgp.mit.edu --recy-keys C6EED57A
上述就是一個基本的簽名、分發並驗證的流程,在使用Maven釋出專案的時候,可以使用GPG為釋出檔案提供簽名。