1. 程式人生 > >《Maven官方文件》密碼加密

《Maven官方文件》密碼加密

原文連結   譯者:carvendy

密碼加密

  1. 介紹
  2. 怎麼建立一個主密碼
  3. 怎麼加密服務端密碼
  4. 怎麼保持主密碼可移動驅動器
  5. 提示

介紹

Maven 2.1.0以上現在支援服務密碼加密。這個主要用例,給的解決方案是:

  • 多使用者分享同樣的構建機器(server,CI box)
  • 一些使用者有特定上傳的Maven工件到倉庫,一些沒有。
    • 這允許任何服務端操作,需要授權,不僅僅是釋出。
  • setting.xml是分享給使用者的。

實現的解決方案加入了一下能力:

  • 授權使用者有一個額外的settings-security.xml在他們的==${user.home}/.m2==目錄下
    • 這檔案包含了加密的主密碼
      ,使用加密的其他密碼
    • 或者他包含一個搬遷-引用其他檔案,可能在可遷移的倉庫
    • 現在,密碼是通過CLI建立
  • 服務端的條目在settings.xml有密碼或鍵倉庫加密指令。
    • 目前 – 通過CLI做的之後,主密碼已經被建立和儲存在適當的地方

怎麼建立主密碼

使用下面的命令:

mvn --encrypt-master-password <password>

注意:自從Maven 3.2.1密碼引數不在被使用(看提示獲取更多資訊)。Maven將提示密碼。更早的版本不會提示密碼,必須在明文命令列上鍵入。

這密碼將嘗試一個加密的密碼,像這樣:

{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}

儲存密碼在==${user.home}/.m2/settings-security.xml==;它應該像這樣:

<settingsSecurity>
  <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>

當你做了這個,你可以開始加密已經存在的服務密碼。

怎麼加密服務端密碼

你將使用下面的命令列:

mvn --encrypt-password <password>

注意:像== –encrypt-master-password ==的密碼引數應該不能在Maven 3.2.1使用(看

下面的提示獲取更多資訊)

命令將產生一個加密版本,像這樣:

{COQLCE6DU6GtcS5P=}

貼上到你的settings.xml檔案在server部分。像這樣:

<settings>
...
  <servers>
...
    <server>
      <id>my.server</id>
      <username>foo</username>
      <password>{COQLCE6DU6GtcS5P=}</password>
    </server>
...
  </servers>
...
</settings>

請注意密碼可以包含花括號以外的任何資訊,所以這樣依舊可以:

<settings>
...
  <servers>
...
    <server>
      <id>my.server</id>
      <username>foo</username>
      <password>Oleg reset this password on 2009-03-11, expires on 2009-04-11 {COQLCE6DU6GtcS5P=}</password>
    </server>
...
  </servers>
...
</settings>

然後你可以使用,釋出外掛,寫入到服務端

mvn deploy:deploy-file -Durl=https://maven.corp.com/repo \
                       -DrepositoryId=my.server \
                       -Dfile=your-artifact-1.0.jar \

怎麼保持主密碼可移動驅動器

建立明確的主密碼像上面所描述的,儲存它在一個可遷移的驅動,例如在OSX,我的USE驅動掛載到==/Volumes/mySecureUsb==,所以儲存:

<settingsSecurity>
  <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>

在==/Volumes/mySecureUsb/secure/settings-security.xml==

和我建立的==${user.home}/.m2/settings-security.xml==的內容:

<settingsSecurity>
  <relocation>/Volumes/mySecureUsb/secure/settings-security.xml</relocation>
</settingsSecurity>

這保證加密只有在usb驅動器被作業系統掛載時才起作用。這地址使用方式是隻有確定的人才有許可權釋出和發出這些裝置。

提示

轉義密碼中的花括號文字(自從:Maven 2.2.0)

有時,你可能找到你的密碼(或者加密過的密碼)可能包含“{”或“}”作為字面值。如果加入一個密碼到你的配置檔案,你將發現Maven的奇怪事情。特別地,Maven將對於所有前面有“{”或者後面有“}”的字元,作為註釋。很明顯,在這種情況下,這不是你想要的行為。你需要準備的一種方式轉義你密碼的大括號。

在Maven 2.2.0 ,你可以使用“\”轉義字元。如果你密碼看起來像這樣:

jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+{EF1iFQyJQ=

Then,你將加入到你的settings.xml像這樣:

{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+\{EF1iFQyJQ=}

密碼許可權

編譯 setting.xml 和 執行上面的命令可以讓你的密碼以純文字儲存在本地。你可能想檢查地址:

  • 歷史shell指令碼(例如執行history)。你可能想清楚你的歷史記錄在你執行加密密碼之後。
  • 編輯快取(例如 ~/.viminfo

注意加密密碼可以被一些人解密,有master密碼和settings檔案許可權的人。保持檔案保護(或分開儲存),如果你可能會期望settings.xml檔案可以被恢復。

密碼在不同平臺轉義

在一些平臺這可能很重要地去引用你的密碼基於密碼中特有的字元想==%!$==等。作為例子在Windows你必須關心的事:

下面例子在Windows將不起作用

mvn --encrypt-master-password a!$%^b

這樣在Windows下才會起作用:

mvn --encrypt-master-password "a!$%^b"

如果你在linux/unix平臺,你應該使用單引用上面的master密碼,因為你將會驚訝使用master密碼將不起作用(因為$符號和此外的!標記)

密碼提示

在Maven 3.2.1以前你不得不給密碼在密碼作為引數輸入,這意味著你可能需要轉義你的密碼。此外,shell儲存所有命令的歷史記錄,因此任何有你電腦許可權的就可以從shell歷史獲取密碼。

在Maven 3.2.1密碼是可選引數,意味著如果你省略密碼,你將被提示防止上面的所有問題。 因此我們強烈推薦使用Maven 3.2.1 和避免轉義特殊字元的問題和許可權獲取bash歷史或者環境問題與密碼的關係。