2010-08-30 50 views
23

Chúng tôi có một số dự án maven, được xây dựng trên máy chủ xây dựng. Trong một số trường hợp, chúng tôi muốn ký các sản phẩm của chúng tôi. Chúng tôi sử dụng Maven Jarsigner Plugin để thực hiện điều đó.Chiến lược ký kết Jar trong dự án Maven

Chúng tôi đối mặt với những câu hỏi sau:

  • đâu chúng ta nên lưu trữ các mật khẩu cho các ký?
  • Chiến lược tốt để ký dự án maven là gì?

Chúng tôi không muốn đặt kho khóa của mình ở đâu đó trên máy chủ của chúng tôi và mã hóa đường dẫn đến nó. Vì vậy, chúng tôi chỉ gói keystore này trong một cái lọ và tải nó lên như một tạo phẩm cho kho lưu trữ maven bên trong của chúng ta. Khi chúng ta muốn ký một dự án maven, chúng ta tải xuống tạo kho khóa bằng cách sử dụng Maven Dependency Plugin và đính kèm mục tiêu ký vào vòng đời xây dựng maven. Here là thông tin chi tiết hơn.

Để ẩn mật khẩu cho kho khóa, chúng tôi đặt chúng vào tệp pom.xml của công ty. Chúng tôi cũng nghĩ về việc lưu trữ mật khẩu trong settings.xml trên máy chủ xây dựng.

Khi dự án được xây dựng và ký trên máy phát triển, chúng tôi ký tên bằng chứng chỉ tự ký. Nhưng khi dự án được xây dựng và được ký trên máy chủ xây dựng, chúng tôi ký tên bằng chứng chỉ "chính thức" của chúng tôi.

Đây có phải là chiến lược tốt không?

Trả lời

30

tôi sử dụng 2 keystores:

  • một keystore phát triển mà được lưu trữ trong SCM. Do đó, máy chủ CI có thể ký các ảnh chụp nhanh.
  • kho khóa sản xuất có chứng chỉ sản xuất thực do cơ quan cấp chứng nhận tin cậy cấp.

Mật khẩu kho khóa phát triển nằm trong pom.xml. Dưới đây là một đoạn pom.xml tôi:

<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> 

Trong ~/.m2/settings.xml tôi xác định một hồ sơ 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> 

khi tôi muốn ký vào giấy chứng nhận thực tôi gọi maven với các thông số -Pcodesigning -Dkeystore.password=strongPassword. Tôi cũng đã định cấu hình maven-release-plugin để sử dụng cấu hình codesigning.

Trên thực tế, bạn có thể lưu trữ mật khẩu trong settings.xml miễn là tệp có thể đọc được bởi không ai ngoài bạn.

+0

Chúng tôi đã đi theo cùng một cách. Ngoại trừ mật khẩu kho khóa sản xuất được lưu trữ trong hồ sơ settings.xml. Và hồ sơ đó được gọi tự động bởi máy chủ xây dựng. –

+0

Cũng lưu ý, bí danh của bạn không thể chứa ký tự một trích dẫn do lỗi này: http://jira.codehaus.org/browse/MJARSIGNER-11 –

+1

Kể từ phiên bản 1.3, plugin trình ký kết jar hỗ trợ mã hóa maven. Điều này làm cho nó tương đối an toàn để lưu trữ mật khẩu trong settings.xml. Xem http://maven.apache.org/guides/mini/guide-encryption.html để biết chi tiết. – Rob

Các vấn đề liên quan