תצורת אתחול האביב עם Jasypt

1. הקדמה

Jasypt (Java Simplified Encryption) Spring Boot מספק כלי עזר להצפנת מקורות נכסים ביישומי אתחול.

במאמר זה נדון כיצד נוכל להוסיף את התמיכה של jasypt-spring-boot ולהשתמש בה.

לקבלת מידע נוסף אודות השימוש ביסיפט כמסגרת להצפנה, עיין במבוא שלנו ליזיפט כאן.

2. מדוע ג'סיפט?

בכל פעם שאנחנו צריכים לאחסן מידע רגיש בקובץ התצורה - זה אומר שאנחנו בעצם הופכים את המידע לפגיע; זה כולל כל סוג של מידע רגיש, כגון אישורים, אך בהחלט הרבה יותר מזה.

על ידי באמצעות Jasypt, אנו יכולים לספק הצפנה לתכונות קובץ המאפיינים והיישום שלנו יעשה את העבודה בפענוחו ובאחזור הערך המקורי.

3. דרכים להשתמש ב- JASYPT עם מגף קפיץ

בואו נדון בדרכים השונות להשתמש ביאסיפט עם Spring Boot.

3.1. באמצעות יאסיפט-מתנעל-מעיין-מעיין

עלינו להוסיף תלות יחידה לפרויקט שלנו:

 com.github.ulisesbocchio jasypt-spring-boot-starter 2.0.0 

ל- Maven Central יש את הגרסה העדכנית ביותר של המתחיל ג'סיפט-קפיץ-מגף.

בואו כעת נצפין את הטקסט "[מוגן בדוא"ל]" עם מפתח סודי "סיסמה" והוסף אותו ל- encrypted.properties:

encrypted.property = ENC (uTSqb9grs1 + vUv3iN8lItC0kl65lMG + 8)

ובואו נגדיר מחלקת תצורה AppConfigForJasyptStarter - כדי לציין את encrypted.properties הקובץ כ- PropertySource :

@Configuration @PropertySource ("encrypted.properties") מחלקה ציבורית AppConfigForJasyptStarter {} 

עכשיו נכתוב שעועית שירות PropertyServiceForJasyptStarter כדי לאחזר את הערכים מה- encrypted.properties. ניתן לאחזר את הערך המפוענח באמצעות @ערך ביאור או getProperty () שיטה של סביבה מעמד:

@Service מחלקה ציבורית PropertyServiceForJasyptStarter {@Value ("$ {encrypted.property}") נכס מחרוזת פרטי; מחרוזת ציבורית getProperty () {החזרת נכס; } מחרוזת ציבורית getPasswordUsingEnvironment (סביבת סביבה) {return environment.getProperty ("encrypted.property"); }} 

סוף כל סוף, באמצעות מחלקת השירות לעיל והגדרת המפתח הסודי בו השתמשנו להצפנה, אנו יכולים לאחזר בקלות את הסיסמה המפוענחת ולהשתמש ביישום שלנו:

@ מבחן ציבורי בטל כאשר DecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "סיסמה"); PropertyServiceForJasyptStarter service = appCtx .getBean (PropertyServiceForJasyptStarter.class); assertEquals ("[email protected]", service.getProperty ()); סביבת סביבה = appCtx.getBean (סביבה.קלאס); assertEquals ("[email protected]", service.getPasswordUsingEnvironment (סביבה)); } 

3.2. שימוש במגף ג'סיפט-קפיץ

לפרויקטים שאינם משתמשים @ SpringBootApplication אוֹ @EnableAutoConfigurationאנחנו יכולים להשתמש ביסיפט-קפיץ-מגף תלות ישירות:

 com.github.ulisesbocchio jasypt-spring-boot 2.0.0 

באופן דומה, בואו להצפין את הטקסט "[מוגן בדוא"ל]" עם מפתח סודי "סיסמה" ולהוסיף אותו ל encryptedv2.properties:

encryptedv2.property = ENC (dQWokHUXXFe + OqXRZYWu22BpXoRZ0Drt)

ובואו שיהיה לנו מחלקת תצורה חדשה לתלות באספקט-אביב.

כאן עלינו להוסיף את ההערה @EncryptablePropertySource :

@Configuration @EncryptablePropertySource ("encryptedv2.properties") מחלקה ציבורית AppConfigForJasyptSimple {}

כמו כן, חדש PropertyServiceForJasyptSimple שעועית לחזור encryptedv2.properties מוגדר:

@Service בכיתה ציבורית PropertyServiceForJasyptSimple {@Value ("$ {encryptedv2.property}") נכס מחרוזת פרטי; מחרוזת ציבורית getProperty () {החזרת נכס; }} 

לבסוף, באמצעות מחלקת השירות שלעיל והגדרת המפתח הסודי בו השתמשנו להצפנה, אנו יכולים לאחזר את ה- encryptedv2.property:

@ מבחן ציבורי בטל כאשר DecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "סיסמה"); PropertyServiceForJasyptSimple service = appCtx .getBean (PropertyServiceForJasyptSimple.class); assertEquals ("[email protected]", service.getProperty ()); } 

3.3. שימוש ב- JASYPT Encryptor מותאם אישית

הצפנים המוגדרים בסעיף 3.1. ו- 3.2. נבנים עם ערכי התצורה המוגדרים כברירת מחדל.

עם זאת, בואו נלך ונגדיר את הצפנה של Jasypt שלנו ונסה להשתמש עבור היישום שלנו.

S0, שעועית ההצפנה המותאמת אישית תיראה כך:

@Bean (name = "encryptorBean") StringEncryptor stringEncryptor () ציבורי = PooledPBEStringEncryptor = חדש PooledPBEStringEncryptor (); SimpleStringPBEConfig config = SimpleStringPBEConfig חדש (); config.setPassword ("סיסמה"); config.setAlgorithm ("PBEWithMD5AndDES"); config.setKeyObtentionIterations ("1000"); config.setPoolSize ("1"); config.setProviderName ("SunJCE"); config.setSaltGeneratorClassName ("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType ("base64"); encryptor.setConfig (config); הצפנת הצפנה; } 

יתר על כן, אנו יכולים לשנות את כל המאפיינים עבור ה- SimpleStringPBEConfig.

גַם, אנחנו צריכים להוסיף נכס "Jasypt.encryptor.bean" שלנו application.properties, כדי ש- Spring Boot יידע באיזה הצפנה מותאמת אישית עליו להשתמש.

לדוגמא, אנו מוסיפים את הטקסט המותאם אישית "[מוגן בדוא"ל]" מוצפן עם מפתח סודי "סיסמה" בתוך ה application.properties:

jasypt.encryptor.bean = encryptorBean encryptedv3.property = ENC (askygdq8PHapYFnlX6WsTwZZOxWInq + i)

ברגע שנקבע את זה, אנחנו יכולים להשיג בקלות את encryptedv3.property מהמעיין סביבה:

@Test ציבורי בטל כאשרConfiguredExcryptorUsed_ReturnCustomEncryptor () {סביבת סביבה = appCtx.getBean (סביבה.קלאס); assertEquals ("[email protected]", environment.getProperty ("encryptedv3.property")); } 

4. מסקנה

באמצעות ג'זיפט אנו יכוליםלספק אבטחה נוספת לנתונים שבהם האפליקציה מטפלת.

זה מאפשר לנו להתמקד יותר בליבת היישום שלנו וניתן להשתמש בו גם בכדי לספק הצפנה מותאמת אישית במידת הצורך.

כמו תמיד, הקוד השלם לדוגמא זו זמין ב- Github.


$config[zx-auto] not found$config[zx-overlay] not found