คำนำ
เพื่อให้สามารถใช้งานได้คุณต้องเข้าใจก่อน ฉันขี้เกียจเกินไปที่จะวาดภาพดังนั้นฉันสามารถวาดภาพจากพวกใหญ่ออนไลน์ โครงสร้างของ SpringCloud ดังแสดงในรูป:
สถานการณ์แอปพลิเคชันของสถาปัตยกรรม Microservice:
1. ระบบแยกระบบย่อยหลายระบบ
2. แต่ละระบบย่อยสามารถปรับใช้หลายแอปพลิเคชันและการปรับสมดุลโหลดระหว่างแอปพลิเคชันจะถูกนำไปใช้
3. จำเป็นต้องมีศูนย์ลงทะเบียนบริการและบริการทั้งหมดได้รับการลงทะเบียนในศูนย์ลงทะเบียน โหลดบาลานซ์ยังทำได้โดยใช้กลยุทธ์บางอย่างสำหรับบริการที่ลงทะเบียนในศูนย์ลงทะเบียน
4. ลูกค้าทั้งหมดเข้าถึงบริการแบ็กเอนด์ผ่านที่อยู่เกตเวย์เดียวกัน ผ่านการกำหนดค่าการกำหนดเส้นทางเกตเวย์จะกำหนดว่าบริการใดที่จัดการคำขอ URL โหลดบาลานซ์ยังใช้เมื่อส่งต่อคำขอไปยังบริการ
5. บางครั้งบริการก็จำเป็นต้องเข้าถึงซึ่งกันและกัน ตัวอย่างเช่นมีโมดูลผู้ใช้และบริการอื่น ๆ จำเป็นต้องได้รับข้อมูลผู้ใช้ของบริการผู้ใช้เมื่อประมวลผลบริการบางอย่าง
6. จำเป็นต้องใช้เบรกเกอร์วงจรเพื่อจัดการกับการหมดเวลาและข้อผิดพลาดในระหว่างการโทรบริการในเวลาที่เหมาะสมเพื่อป้องกันไม่ให้ระบบโดยรวมเป็นอัมพาตเนื่องจากปัญหากับหนึ่งในบริการ
7. ต้องใช้ฟังก์ชั่นการตรวจสอบเพื่อตรวจสอบเวลาที่ใช้ในการโทรแต่ละครั้ง ฯลฯ
การแนะนำ
ในสถาปัตยกรรม Microservice เรามักจะใช้วิธีการขององค์กร DevOps เพื่อลดค่าใช้จ่ายขนาดใหญ่ที่เกิดจากการสื่อสารระหว่างทีมเพื่อเร่งความสามารถในการส่งมอบของแอปพลิเคชัน Microservice สิ่งนี้ทำให้ข้อมูลออนไลน์ควบคุมโดยทีมปฏิบัติการและการบำรุงรักษาที่ส่งมอบให้กับสมาชิกขององค์กร Microservice เพื่อรักษาด้วยตนเองซึ่งจะรวมถึงข้อมูลที่ละเอียดอ่อนจำนวนมากเช่นบัญชีฐานข้อมูลและรหัสผ่าน เห็นได้ชัดว่ามันอันตรายมากถ้าเราจัดเก็บข้อมูลที่ละเอียดอ่อนโดยตรงใน PlainText ในไฟล์กำหนดค่าของแอปพลิเคชัน Microservice ในการตอบสนองต่อปัญหานี้ Spring Cloud Config ให้ความสามารถในการเข้ารหัสและถอดรหัสคุณสมบัติเพื่อปกป้องข้อมูลในไฟล์การกำหนดค่า ตัวอย่างเช่นตัวอย่างต่อไปนี้:
Spring.datasource.username = didispring.datasource.password = {cipher} dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5f55f5f55f5ใน Spring Cloud Config เนื้อหาจะถูกทำเครื่องหมายเป็นค่าที่เข้ารหัสโดยใช้คำนำหน้า {cipher} ที่ด้านหน้าของค่าแอตทริบิวต์ เมื่อไคลเอนต์ Microservice โหลดการกำหนดค่าศูนย์การกำหนดค่าจะถอดรหัสค่าโดยอัตโนมัติด้วยคำนำหน้า {cipher} ผ่านการใช้กลไกนี้ทีมปฏิบัติการและการบำรุงรักษาสามารถให้ทรัพยากรที่เข้ารหัสของข้อมูลออนไลน์กับทีม Microservice ได้อย่างปลอดภัยโดยไม่ต้องกังวลเกี่ยวกับการรั่วไหลของข้อมูลที่ละเอียดอ่อนเหล่านี้ มาแนะนำวิธีใช้ฟังก์ชั่นนี้ในศูนย์การกำหนดค่า
ข้อกำหนดเบื้องต้นสำหรับการใช้งาน
เมื่อใช้ฟังก์ชั่นการเข้ารหัสและถอดรหัสของ Spring Cloud Config มีข้อกำหนดเบื้องต้นที่จำเป็นที่เราต้องใส่ใจ ในการเปิดใช้งานคุณสมบัตินี้เราจำเป็นต้องติดตั้งเวอร์ชัน JCE ที่ไม่ จำกัด แม้ว่าฟังก์ชั่น JCE จะมีอยู่ใน JRE แต่ก็ใช้เวอร์ชันเริ่มต้นที่มีข้อจำกัดความยาว เราสามารถดาวน์โหลดได้จากเว็บไซต์ทางการของ Oracle มันเป็นแพ็คเกจบีบอัด หลังจากการบีบอัดคุณสามารถเห็นไฟล์สามไฟล์ต่อไปนี้:
readme.txtlocal_policy.jarus_export_policy.jar
เราจำเป็นต้องคัดลอกไฟล์ local_policy.jar และ us_export_policy.jar ไปยังไดเรกทอรี $ java_home/lib/lib/ความปลอดภัยเพื่อเขียนทับเนื้อหาเริ่มต้นดั้งเดิม ณ จุดนี้การเตรียมการสำหรับการเข้ารหัสและการถอดรหัสจะเสร็จสมบูรณ์
จุดสิ้นสุดที่เกี่ยวข้อง
หลังจากเสร็จสิ้นการติดตั้ง JCE คุณสามารถลองเริ่มศูนย์การกำหนดค่า ในคอนโซลจุดสิ้นสุดเฉพาะศูนย์การกำหนดค่าบางส่วนจะถูกส่งออกส่วนใหญ่รวมถึง:
คุณสามารถลองเข้าถึง /Encrypt /สถานะปลายทางผ่านคำขอ GET และเราจะได้รับสิ่งต่อไปนี้:
{"คำอธิบาย": "ไม่มีการติดตั้งคีย์สำหรับบริการเข้ารหัส", "สถานะ": "no_key"}การส่งคืนนี้บ่งชี้ว่าฟังก์ชันการเข้ารหัสของศูนย์การกำหนดค่าปัจจุบันยังไม่สามารถใช้งานได้เนื่องจากคีย์ที่เกี่ยวข้องไม่ได้รับการกำหนดค่าสำหรับบริการเข้ารหัส
คีย์การกำหนดค่า
เราสามารถระบุข้อมูลคีย์ (คีย์สมมาตร) โดยตรงในไฟล์กำหนดค่าผ่านคุณสมบัติ ENCRYPT.KEY เช่น:
ENCRYPT.KEY = DIDISPACE
หลังจากเพิ่มข้อมูลการกำหนดค่าข้างต้นให้รีสตาร์ทศูนย์การกำหนดค่าและเข้าถึงจุดสิ้นสุด /เข้ารหัส /สถานะ เราจะได้รับเนื้อหาต่อไปนี้:
{"สถานะ": "ตกลง"}ในเวลานี้ฟังก์ชั่นการเข้ารหัสและการถอดรหัสในศูนย์การกำหนดค่าของเราพร้อมที่จะใช้ คุณอาจลองเข้าถึง /เข้ารหัสและ /ถอดรหัสจุดสิ้นสุดสำหรับฟังก์ชั่นการเข้ารหัสและการถอดรหัส โปรดทราบว่าจุดสิ้นสุดทั้งสองเป็นคำขอโพสต์และข้อมูลการเข้ารหัสและการถอดรหัสจะต้องส่งผ่านร่างกายคำขอ ตัวอย่างเช่นการใช้คำสั่ง CURL เป็นตัวอย่างเราสามารถเรียกจุดสิ้นสุดการเข้ารหัสและการถอดรหัสด้วยวิธีต่อไปนี้:
$ CURL LOCALHOST: 7001/Encrypt -D DIDISPACE3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A18177F1769C849E9C9F294400C920480BE2C2C2C2RC2C2C20 LocalHost: 7001/DECRYPT -D 3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A18177F1769C849AE9C9F29400C920480BE2C990606060606060
ที่นี่เราใช้การเข้ารหัสแบบสมมาตรเพื่อระบุวิธีการใช้งานของคีย์โดยการกำหนดค่าพารามิเตอร์ Encrypt.KEY วิธีนี้ค่อนข้างง่ายในการใช้งานและจำเป็นต้องใช้พารามิเตอร์เดียวเท่านั้น นอกจากนี้เรายังสามารถใช้ตัวแปรสภาพแวดล้อม encrypt_key เพื่อกำหนดค่าเพื่อให้ข้อมูลคีย์ถูกเก็บไว้ภายนอก
การเข้ารหัสแบบอสมมาตร
ศูนย์การกำหนดค่าของ Spring Cloud Confignation ไม่เพียง แต่ใช้การเข้ารหัสแบบสมมาตรเท่านั้น แต่ยังรวมถึงการเข้ารหัสแบบไม่สมมาตร (เช่น RSA Key Pairs) แม้ว่าการสร้างคีย์และการกำหนดค่าของการเข้ารหัสแบบไม่สมมาตรนั้นค่อนข้างซับซ้อน แต่ก็มีความปลอดภัยสูงกว่า ด้านล่างขอแนะนำรายละเอียดเกี่ยวกับวิธีการใช้การเข้ารหัสแบบไม่สมมาตร
ก่อนอื่นเราต้องสร้างคู่คีย์ผ่านเครื่องมือ Keytool Keytool เป็นเครื่องมือการจัดการคีย์และใบรับรองใน JDK ช่วยให้ผู้ใช้สามารถจัดการคู่คีย์สาธารณะ/ส่วนตัวของตนเองและใบรับรองที่เกี่ยวข้องสำหรับ (ผ่านลายเซ็นดิจิทัล) การตรวจสอบตัวเอง (ผู้ใช้รับรองความถูกต้องของตัวเองกับผู้ใช้/บริการอื่น ๆ ) หรือบริการความสมบูรณ์ของข้อมูลและการตรวจสอบความถูกต้อง เครื่องมือนี้รวมอยู่ในรุ่นหลังจาก JDK 1.4 และตำแหน่งของมันคือ: %java_home %/bin/keytool.exe
คำสั่งเฉพาะสำหรับการสร้างคีย์มีดังนี้:
$ keytool -genkeypair -alias config -server -keyalg rsa -keystore config -server.keystore
ป้อนรหัสผ่าน KeyStore:
ป้อนรหัสผ่านใหม่อีกครั้ง:
ชื่อและนามสกุลของคุณคืออะไร?
[ไม่ทราบ]: Zhaiyongchao
ชื่อหน่วยองค์กรของคุณคืออะไร?
[ไม่ทราบ]: บริษัท
ชื่อองค์กรของคุณคืออะไร?
[ไม่ทราบ]: องค์กร
เมืองหรือภูมิภาคของคุณชื่ออะไร?
[ไม่ทราบ]: เมือง
จังหวัด/เมือง/เขตปกครองตนเองของคุณชื่ออะไร?
[ไม่ทราบ]: จังหวัด
รหัสประเทศสองตัวอักษรสำหรับหน่วยนี้คืออะไร?
[ไม่ทราบ]: จีน
CN = Zhaiyongchao, OU = บริษัท , O = องค์กร, L = City, ST = จังหวัด, C = จีนถูกต้องหรือไม่?
[ไม่]: Yป้อนรหัสผ่านหลักสำหรับ <config-server>
(หากรหัสผ่านเหมือนกับ Keystore ให้กด Enter):
ป้อนรหัสผ่านใหม่อีกครั้ง:
นอกจากนี้หากเราไม่ต้องการป้อนข้อมูลแจ้งเตือนเหล่านั้นทีละขั้นตอนเราสามารถใช้ -DNAME เพื่อระบุโดยตรงในขณะที่รหัสผ่านคีย์และรหัสผ่านคีย์สามารถระบุได้โดยตรงโดยใช้ -TorePass และ -KEYPASS ดังนั้นเราสามารถสร้างคีย์สโตร์เดียวกันโดยตรงกับคำสั่งด้านบนผ่านคำสั่งต่อไปนี้:
$ keytool -genkeypair -alias config -server -keyalg rsa / -dname "cn = zhaiyongchao, OU = บริษัท , O = องค์กร, l = เมือง, ST = จังหวัด, C = China" / -keypass 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
โดยค่าเริ่มต้นคีย์ที่สร้างโดยคำสั่งด้านบนนั้นใช้ได้กับ 90 วันเท่านั้น หากเราต้องการปรับระยะเวลาความถูกต้องเราสามารถทำได้โดยการเพิ่มพารามิเตอร์ -Validity ตัวอย่างเช่นเราสามารถขยายระยะเวลาความถูกต้องของคีย์เป็นหนึ่งปีผ่านคำสั่งต่อไปนี้:
$ keytool -genkeypair -alias config -server -keyalg rsa / -dname "cn = zhaiyongchao, OU = บริษัท , o = องค์กร, l = เมือง, ST = จังหวัด, c = china" / -keypass 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
วิธีการสร้างคำสั่งสามวิธีข้างต้นในที่สุดจะสร้างไฟล์ config-server.keystore ในไดเรกทอรีการดำเนินการปัจจุบันของคำสั่ง ต่อไปเราจำเป็นต้องบันทึกไว้ในตำแหน่งในระบบไฟล์ของศูนย์การกำหนดค่าตัวอย่างเช่นวางไว้ในไดเรกทอรีผู้ใช้ปัจจุบันจากนั้นเพิ่มข้อมูลการกำหนดค่าที่เกี่ยวข้องในศูนย์การกำหนดค่า:
encrypt.key-store.location = file: // $ {user.home}/config-server.keystoreencrypt.key-store.alias=config-serverencrypt.key-store.password=1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111หากเราวาง config-server.keystore ในไดเรกทอรี SRC/Main/Resource ในศูนย์การกำหนดค่าเรายังสามารถกำหนดค่าได้โดยตรงเช่นนี้: ENCRYPT.KEY-Store.Location = config-server.keystore นอกจากนี้ยังสามารถกำหนดค่าข้อมูลการกำหนดค่าของการเข้ารหัสแบบอสมมาตรได้ผ่านตัวแปรสภาพแวดล้อมและชื่อตัวแปรเฉพาะที่สอดคล้องกันของพวกเขามีดังนี้:
encrypt_key_store_locationencrypt_key_store_aliasencrypt_key_store_passwordencrypt_key_store_secret
การกำหนดค่าข้อมูลที่เกี่ยวข้องกับคีย์ผ่านตัวแปรสภาพแวดล้อมสามารถรักษาความปลอดภัยได้ดีขึ้นดังนั้นจึงเป็นตัวเลือกที่ดีสำหรับเราในการจัดเก็บข้อมูลรหัสผ่านที่ละเอียดอ่อนในตัวแปรสภาพแวดล้อมในศูนย์การกำหนดค่า
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com