2010-08-30 140 views
23

我們有幾個Maven項目,它們構建在構建服務器上。在某些情況下,我們希望簽署我們的交付物。我們使用Maven Jarsigner Plugin來做到這一點。Maven項目中的Jar簽名策略

我們面臨以下幾個問題:

  • 我們應該在哪裏存儲密碼進行簽名?
  • 什麼是簽署maven項目的好策略?

我們不想將我們的密鑰庫放在我們服務器的某個地方,並硬編碼到它的路徑。所以我們只是將這個密鑰庫封裝在一個jar中,並將其作爲一個工件上傳到我們的內部maven倉庫。當我們想簽署maven項目時,我們使用Maven Dependency Plugin下載密鑰存儲工件,並將簽名目標附加到maven構建生命週期。 Here是更詳細的信息。

爲了隱藏密鑰庫的密碼,我們把它們放到我們公司的pom.xml文件中。我們還考慮在構建服務器上將密碼存儲在settings.xml中。

當在開發人員計算機上構建並簽署項目時,我們使用自簽名證書對其進行簽名。但是當項目在構建服務器上構建並簽署時,我們使用「官方」證書對其進行簽名。

這是一個很好的策略嗎?

回答

30

我使用2個密鑰庫:

  • 其被存儲在SCM開發密鑰庫。 CI服務器因此可以簽署快照。
  • 生產密鑰庫具有由信任的證書頒發機構頒發的真實生產證書。

開發密鑰庫密碼位於pom.xml。這裏是我的pom.xml片段:

<plugin> 
    <artifactId>maven-jarsigner-plugin</artifactId> 
    <version>1.2</version> 
    <configuration> 
     <storetype>${keystore.type}</storetype> 
     <keystore>${keystore.path}</keystore> 
     <alias>${keystore.alias}</alias> 
     <storepass>${keystore.store.password}</storepass> 
     <keypass>${keystore.key.password}</keypass> 
    </configuration> 
    </plugin> 
    <!-- 
     ... rest of the pom.xml ... 
    --> 
    <properties> 
    <keystore.path>cert/temp.keystore</keystore.path> 
    <keystore.type>JKS</keystore.type> 
    <keystore.alias>dev</keystore.alias> 
    <keystore.password>dev_password</keystore.password> 
    <keystore.store.password>${keystore.password}</keystore.store.password> 
    <keystore.key.password>${keystore.password}</keystore.key.password> 
    </properties> 

~/.m2/settings.xml我定義了一個codesgining簡介:

<settings> 
    <profiles> 
    <profile> 
     <id>codesigning</id> 
     <properties> 
     <keystore.path>/opt/prod/prod.keystore</keystore.path> 
     <keystore.alias>prod</keystore.alias> 
     <keystore.type>JKS</keystore.type> 
     <keystore.store.password>${keystore.password}</keystore.store.password> 
     <keystore.key.password>${keystore.password}</keystore.key.password> 
     </properties> 
    </profile> 
    </profiles> 
</settings> 

當我要簽署真實證書我調用行家與-Pcodesigning -Dkeystore.password=strongPassword參數。我還配置了maven-release-plugin以使用codesigning配置文件。

實際上,只要該文件除了您之外別人都可讀,就可以將密碼存儲在settings.xml中。

+0

我們以同樣的方式。除了生產密鑰庫密碼存儲在配置文件settings.xml中。並且該配置文件由構建服務器自動調用。 – 2010-09-03 06:59:27

+0

另請注意,由於此錯誤,您的別名不能包含單引號字符:http://jira.codehaus.org/browse/MJARSIGNER-11 – 2010-12-20 22:38:22

+1

從版本1.3開始,jar簽名插件支持maven加密。這使得在settings.xml中存儲密碼相對安全。詳情請參閱http://maven.apache.org/guides/mini/guide-encryption.html。 – Rob 2014-01-31 04:55:40