2012-07-25 19 views
14

में गुण फ़ाइल में एन्क्रिप्टेड के रूप में पासवर्ड कैसे स्टोर करें मैं वसंत ढांचे में बहुत नया हूं और मैं अपने डेटाबेस कनेक्शन प्रबंधित करने के लिए स्प्रिंग फ्रेमवर्क का उपयोग कर रहा हूं और इसी तरह। Usaiton एक संपत्ति फ़ाइल से मेरे डीबी कनेक्शन पैरामीटर पढ़ता है। मुझे जिस चीज की आवश्यकता है वह मेरा कनेक्शन पासवर्ड एन्क्रिप्टेड के रूप में संपत्ति फ़ाइल में स्टोर करना है। यहाँ मेरी डेटा स्रोत एक्सएमएल फ़ाइलवसंत

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <value>file:${DBConfigFile}</value> 
     </property> 
    </bean> 

    <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
     <property name="driverClass" value="${jdbc.driverClassName}" /> 
     <property name="jdbcUrl" value="${jdbc.url}" /> 
     <property name="user" value="${jdbc.username}" /> 
     <property name="password" value="${jdbc.password}" /> 
     <property name="initialPoolSize"><value>3</value></property> 
     <property name="minPoolSize"><value>3</value></property> 
     <property name="maxPoolSize"><value>50</value></property> 
     <property name="idleConnectionTestPeriod"><value>200</value></property> 
     <property name="acquireIncrement"><value>1</value></property> 
     <property name="maxStatements"><value>0</value></property> 
     <property name="numHelperThreads"><value>3</value></property> 
    </bean> 

</beans> 

मैं पासवर्ड संपत्ति फाइल करने के लिए एन्क्रिप्टेड लिखने के thiking कर रहा हूँ और अगर वसंत स्वचालित रूप से एक एल्गोरिथ्म के साथ इसे डिक्रिप्ट कर सकते हैं मैं सोच रहा हूँ। क्या यह विन्यास के साथ संभव है। अग्रिम धन्यवाद।

उत्तर

1

यह कोई समझ नहीं आता है, क्योंकि अगर वसंत इसे डिक्रिप्ट कर सकता है, तो बाकी सब भी हो सकता है। यह एन्क्रिप्शन कोई फर्क नहीं पड़ेगा, यह किसी भी चीज की रक्षा नहीं करता है। यह केवल खतरनाक चीज देता है - सुरक्षा की झूठी भावना।

शायद आप डेटाबेस प्रमाणीकरण के किसी अन्य तरीके का उपयोग कर सकते हैं, उदा। एमएस एसक्यूएल सर्वर पासवर्ड प्रमाणीकरण के बजाय विंडोज सुरक्षा का उपयोग करने की अनुमति देता है। पोस्टग्रेज़ के लिए वही (यह उपयोगकर्ता खाते द्वारा उपयोग या एसएसएल प्रमाणपत्र का उपयोग कर देता है)।

+0

आप ठीक कह रहे हैं, लेकिन मैं वसंत के लिए एक निजी एल्गोरिथ्म, नहीं एक सार्वजनिक एक के बारे में उल्लेख है। आपके उत्तर के लिए धन्यवाद, मैं एसएसएल प्रमाणीकरण के बारे में खोज करूंगा। सुरक्षा के लिए – tace

+2

@tace निजी एल्गोरिदम ऑक्सीमोरोन है। http://en.wikipedia.org/wiki/Security_through_obscurity। इसलिए, इसे सही बनाने का एक तरीका ऑपरेशन सिस्टम सुरक्षा (विंडोज एनटीएलएम, यूनिक्स पाम, आदि) का उपयोग करना है, यह कुछ सुरक्षा प्रदान कर सकता है। – kan

+2

अपनी संपत्तियों में एन्क्रिप्टेड प्रमाण-पत्रों के साथ आप उन्हें सेवा की तैनाती के साथ संस्करण को नियंत्रित कर सकते हैं (स्पष्ट रूप से निजी कुंजी के साथ नहीं), और सेवा को तैनात करते समय स्वचालित रूप से तैनात किया जा सकता है। तैनाती पाइपलाइन के बाहर रखी जाने वाली एकमात्र चीज संपत्तियों को डिक्रिप्ट करने के लिए निजी कुंजी है, जो सेवा के सामान्य जीवन चक्र के बाहर पूरी कॉन्फ़िगरेशन को बनाए रखने से बहुत कम त्रुटि प्रवण होनी चाहिए। –

7

जहाँ तक मुझे भी जाना जाता है वसंत इस क्षमता का समर्थन नहीं करता, लेकिन कुछ अन्य परियोजना मददगार हो सकता है:

0

आप एक सेम कि आपका पासवर्ड decrypts लिखना और फिर सेम जो कुछ में पासवर्ड

+0

क्या pom.xml में इंजेक्ट करने का कोई तरीका है? – fiddle

5

मैं वसंत 4 का उपयोग कर रहा है और 1.9 jasypt जरूरत इंजेक्षन सकता है। Jasypt प्रलेखन वसंत 4 के लिए स्पष्ट समर्थन प्रदान नहीं करता है। मैं EncryptablePropertyPlaceholderConfigurer नामित कक्षा का पता नहीं लगा सकता org.jasypt:jasypt:1.9.2 निर्भरता के साथ।

मैंने एक साधारण स्थैतिक एन्क्रिप्शन उपयोगिता जावा क्लास लिखा (यह jasypt API का उपयोग करता है)।

public class EncryptionUtil { 
    static PooledPBEStringEncryptor encryptor = null; 
    static { 
     encryptor = new PooledPBEStringEncryptor(); 
     encryptor.setPoolSize(4); 
     // There are various approaches to pull this configuration via system level properties. 
     encryptor.setPassword("parashar"); 
     encryptor.setAlgorithm("PBEWITHMD5ANDDES"); 
    } 

    public static String encrypt(String input) { 
     return encryptor.encrypt(input); 
    } 

    public static String decrypt(String encryptedMessage) { 
     return encryptor.decrypt(encryptedMessage); 
    } 

} 

मैं पासवर्ड मैं अपनी संपत्ति फाइलों में रखने के उद्देश्य एन्क्रिप्ट करने के लिए इस सुविधा का इस्तेमाल किया।

तब मैंने बस वसंत ईएल का उपयोग अपने वसंत विन्यास xml में गुणों को डिक्रिप्ट करने के लिए किया।

<property name="password" value="#{T(amit.parashar.EncryptionUtil).decrypt('${db.password}')}" /> 

संपादित करें:

Use system args while bringing up your java process. 
उदा के लिए

: कैसे एन्क्रिप्शन पासवर्ड को छिपाने के लिए पर जवाब देने के लिए: जावा -Dwhatismyencpawd = "पाराशर"

और तरह

encryptor.setPassword(java.lang.System.getProperty("whatismyencpawd")); 

इस तरह इसका इस्तेमाल केवल एप्लिकेशन व्यवस्थापक पासवर्ड पता होगा। यूनिक्स बॉक्स पर हालांकि ps ps कमांड के हिस्से के रूप में पासवर्ड दिखाई देगा।

या आप ओएस स्तर पर्यावरण चर से भी कॉन्फ़िगर और पढ़ सकते हैं।

+0

मुझे समझ में नहीं आता है, अब मैं "पराशर" कैसे सुरक्षित करूंगा क्योंकि अगर कोई कोड जांचता है और वह सही डिक्रिप्ट कर सकता है? –

+1

@ पासपुथी मैंने अपनी प्रतिक्रिया अपडेट की है। –

0

आप उपयोग कर सकते हैं encryption and decryption वसंत बादल config द्वारा प्रदान की

+0

ठीक है, लेकिन कैसे? वह पृष्ठ वर्णन करता है कि कॉन्फ़िगर सर्वर से डिक्रिप्ट किए गए गुण प्राप्त करने के लिए वसंत क्लाउड क्लाइंट और सर्वर का उपयोग कैसे करें। लेकिन मुझे डिक्रिप्टिंग गुणों को संभालने के लिए केवल एक सेवा को बनाए रखने में कोई रूचि नहीं है, तो मैं सामान्य वसंत अनुप्रयोग संदर्भ में गुणों के लिए डिक्रिप्शन तंत्र को कैसे खींचूं? – ideasculptor