2010-08-30 13 views
23

हमारे पास कई मेवेन प्रोजेक्ट हैं, जो बिल्ड सर्वर पर बनाए गए हैं। कुछ मामलों में हम अपने डिलिवरेबल्स पर हस्ताक्षर करना चाहते हैं। हम ऐसा करने के लिए Maven Jarsigner Plugin का उपयोग करते हैं।मेवेन प्रोजेक्ट्स में जार साइनिंग रणनीति

हम निम्नलिखित सवालों का सामना:

  • हम कहाँ हस्ताक्षर करने के लिए पासवर्ड संग्रहीत करना चाहिए?
  • मेवेन परियोजनाओं पर हस्ताक्षर करने के लिए एक अच्छी रणनीति क्या है?

हम अपने कीस्टोर को कहीं भी हमारे सर्वर पर नहीं रखना चाहते हैं और इसके लिए पथ को हार्डकोड नहीं करना चाहते हैं। तो हमने बस इस कीस्टोर को एक जार में लपेट लिया और इसे हमारे आंतरिक मैवेन रिपोजिटरी के लिए एक आर्टिफैक्ट के रूप में अपलोड किया। जब हम एक मेवेन प्रोजेक्ट पर हस्ताक्षर करना चाहते हैं, तो हम Maven Dependency Plugin का उपयोग करके कीस्टोर आर्टिफैक्ट डाउनलोड करते हैं और मेवेन बिल्ड लाइफसाइकिल पर हस्ताक्षर लक्ष्य संलग्न करते हैं। Here अधिक विस्तृत जानकारी है।

कीस्टोर के लिए पासवर्ड छिपाने के लिए, हम उन्हें हमारे कॉर्पोरेट pom.xml फ़ाइल में डाल देते हैं। हम बिल्ड सर्वर पर settings.xml में पासवर्ड संग्रहीत करने के बारे में भी सोचते हैं।

जब कोई डेवलपर मशीन पर कोई प्रोजेक्ट बनाया और हस्ताक्षरित होता है, तो हम इसे स्वयं-हस्ताक्षरित प्रमाणपत्र के साथ साइन करते हैं। लेकिन जब एक बिल्ड सर्वर पर प्रोजेक्ट बनाया और हस्ताक्षरित किया जाता है, तो हम इसे अपने "आधिकारिक" प्रमाण पत्र के साथ साइन करते हैं।

क्या यह एक अच्छी रणनीति है?

उत्तर

30

2 keystores का उपयोग करें:

  • एक विकास कुंजीस्टोर जो एससीएम में संग्रहित है। इस प्रकार सीआई सर्वर स्नैपशॉट्स पर हस्ताक्षर कर सकता है।
  • एक विश्वसनीय प्रमाणन प्राधिकरण द्वारा जारी वास्तविक उत्पादन प्रमाणपत्र के साथ एक उत्पादन कीस्टोर।

विकास कीस्टोर पासवर्ड 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 आह्वान पर हस्ताक्षर करना चाहते हैं। मैंने codesigning प्रोफ़ाइल का उपयोग करने के लिए maven-release-plugin भी कॉन्फ़िगर किया है।

असल में पासवर्ड को settings.xml में संग्रहीत करना संभव है जब तक फ़ाइल आपके द्वारा किसी के द्वारा पठनीय नहीं हो।

+0

हम वैसे ही गए। सिवाय इसके कि उत्पादन कीस्टोर पासवर्ड प्रोफाइल सेटिंग्स.एक्सएमएल में संग्रहीत हैं। और वह प्रोफ़ाइल स्वचालित रूप से बिल्ड सर्वर द्वारा लागू की जाती है। –

+0

यह भी ध्यान दें, आपके उपनाम में इस बग के कारण एकल-उद्धरण वर्ण नहीं हो सकता है: http://jira.codehaus.org/browse/MJARSIGNER-11 –

+1

संस्करण 1.3 के अनुसार, जार साइनर प्लगइन मैवेन एन्क्रिप्शन का समर्थन करता है। यह सेटिंग्स.xml में पासवर्ड स्टोर करने के लिए अपेक्षाकृत सुरक्षित बनाता है। विवरण के लिए http://maven.apache.org/guides/mini/guide-encryption.html देखें। – Rob

संबंधित मुद्दे