مقدمة
لتكون قادرًا على استخدامه ، يجب عليك أولاً فهمه. أنا كسول جدًا لرسم الصور ، حتى أتمكن من رسم صور من اللاعبين الكبار على الإنترنت. بنية SpringCloud كما هو موضح في الشكل:
سيناريوهات التطبيق من بنية الخدمات الصغيرة:
1. تقسيم النظام ، أنظمة فرعية متعددة
2. يمكن لكل نظام فرعي نشر تطبيقات متعددة ، ويتم تنفيذ موازنة التحميل بين التطبيقات
3. مطلوب مركز تسجيل الخدمة ، وجميع الخدمات مسجلة في مركز التسجيل. يتم تحقيق موازنة التحميل أيضًا باستخدام استراتيجيات معينة للخدمات المسجلة في مركز التسجيل.
4. جميع العملاء يصلون إلى خدمات الواجهة الخلفية من خلال نفس عنوان البوابة. من خلال تكوين التوجيه ، تحدد البوابة الخدمة التي تتعامل مع طلب عنوان URL. يتم استخدام موازنة التحميل أيضًا عند إعادة توجيه الطلبات إلى الخدمة.
5. في بعض الأحيان تحتاج الخدمات أيضًا إلى الوصول إلى بعضها البعض. على سبيل المثال ، هناك وحدة مستخدم ، وتحتاج الخدمات الأخرى إلى الحصول على بيانات مستخدم لخدمات المستخدم عند معالجة بعض الخدمات.
6. هناك حاجة إلى قاطع الدائرة للتعامل مع الممرات والأخطاء أثناء مكالمات الخدمة في الوقت المناسب لمنع النظام الكلي من الشلل بسبب مشاكل في إحدى الخدمات.
7. هناك حاجة أيضًا إلى وظيفة المراقبة لمراقبة الوقت الذي تقضيه في كل مكالمة خدمة ، إلخ.
مقدمة
في الهندسة المعمارية للخدمة الدقيقة ، عادة ما نعتمد طريقة تنظيم DevOps لتقليل التكاليف الضخمة الناجمة عن التواصل بين الفرق لتسريع قدرات توصيل تطبيقات الخدمات الصغيرة. هذا يجعل المعلومات عبر الإنترنت التي يتم التحكم فيها في الأصل من قبل فريق التشغيل والصيانة التي تم تسليمها لأعضاء منظمة الخدمات الصغيرة للحفاظ على أنفسهم ، والتي ستشمل كمية كبيرة من المعلومات الحساسة ، مثل حسابات قاعدة البيانات وكلمات المرور. من الواضح ، من الخطير للغاية إذا قمنا بتخزين معلومات حساسة مباشرة في نص عادي في ملف التكوين لتطبيق الخدمات الصغيرة. استجابة لهذه المشكلة ، يوفر Spring Cloud Config القدرة على تشفير الخصائص وفك تشفيرها لحماية المعلومات في ملف التكوين. على سبيل المثال ، المثال التالي:
spring.datasource.username = didispring.datasource.password = {cipher} dba6505baa81d78bd08799d8d4429de499bd4c2053c0f029e7cfbf143695bفي Cloud Config ، يتم تمييز المحتوى كقيمة مشفرة باستخدام بادئة {Cipher} أمام قيمة السمة. عندما يقوم عميل MicroService بتحميل التكوين ، سيقوم مركز التكوين تلقائيًا بفك تشفير القيمة ببادئة {Cipher}. من خلال تنفيذ هذه الآلية ، يمكن لفريق التشغيل والصيانة إعطاء الموارد المشفرة للمعلومات عبر الإنترنت بأمان إلى فريق الخدمات الصغيرة دون القلق بشأن تسرب هذه المعلومات الحساسة. دعونا نقدم كيفية استخدام هذه الوظيفة في مركز التكوين.
المتطلبات الأساسية للاستخدام
عند استخدام وظيفة تشفير وفك التشفير في Cloud Config ، هناك شرط أساسي ضروري نحتاج إلى الانتباه إليه. لتمكين هذه الميزة ، نحتاج إلى تثبيت إصدار JCE غير محدود (امتداد Cryptography Java غير المحدود) في وقت تشغيل مركز التكوين. على الرغم من أن وظيفة JCE متوفرة في JRE ، يتم استخدام الإصدار الافتراضي مع الحد من الطول. يمكننا تنزيله من موقع Oracle الرسمي. إنها حزمة مضغوطة. بعد الضغط ، يمكنك رؤية الملفات الثلاثة التالية:
readme.txtlocal_policy.jarus_export_policy.jar
نحتاج إلى نسخ ملفات local_policy.jar و us_export_policy.jar إلى دليل $ java_home/jre/lib/الأمان للكتابة فوق المحتوى الافتراضي الأصلي. في هذه المرحلة ، يتم الانتهاء من الاستعدادات للتشفير وفك التشفير.
نقاط النهاية ذات الصلة
بعد الانتهاء من تثبيت JCE ، يمكنك محاولة بدء مركز التكوين. في وحدة التحكم ، سيتم إخراج بعض نقاط النهاية الخاصة بمركز التكوين ، بما في ذلك:
يمكنك محاولة الوصول إلى نقطة نهاية /تشفير /الحالة عبر طلب الحصول على طلب ، وسنحصل على ما يلي:
{"الوصف": "لم يتم تثبيت مفتاح لخدمة التشفير" ، "الحالة": "no_key"}تشير هذه الإرجاع إلى أنه لا يمكن استخدام وظيفة التشفير في مركز التكوين الحالي بعد لأن المفتاح المقابل لم يتم تكوينه لخدمة التشفير.
مفتاح التكوين
يمكننا تحديد المعلومات الرئيسية مباشرة (مفتاح التناظر) في ملف التكوين من خلال خاصية incrypt.key ، على سبيل المثال:
Encrypt.Key = didispace
بعد إضافة معلومات التكوين أعلاه ، أعد تشغيل مركز التكوين والوصول إلى نقطة نهاية /تشفير /حالة. سوف نحصل على المحتوى التالي:
{"الحالة": "موافق"}في هذا الوقت ، تكون وظيفة التشفير وفك التشفير في مركز التكوين لدينا جاهزة للاستخدام. قد تحاول أيضًا الوصول إلى نقاط النهاية /التشفير و /فك التشفير للتشفير وفك التشفير. لاحظ أن كلا من نقاط النهاية هما طلبات نشر ، ويجب إرسال معلومات التشفير والتشفير من خلال هيئة الطلب. على سبيل المثال ، أخذ الأمر Curl كمثال ، يمكننا استدعاء نقاط النهاية للتشفير والتشفير بالطرق التالية:
$ curl localhost: 7001/encrypt -d didispace3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae LocalHost: 7001/decrypt -d 3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A18177F1769C849AE9C9F29400C920480BE2C9406AE28C7DISPACE
هنا ، نستخدم التشفير المتماثل لتحديد طريقة التنفيذ للمفتاح من خلال تكوين معلمة incrypt.key. هذه الطريقة بسيطة نسبيًا للتنفيذ ، ويحتاج معلمة واحدة فقط. بالإضافة إلى ذلك ، يمكننا أيضًا استخدام متغير البيئة incrypt_key لتكوينه للسماح بتخزين المعلومات الرئيسية خارجيًا.
التشفير غير المتماثل
لا يمكن لمركز التكوين الخاص بـ Spring Cloud Config استخدام تشفير التناظر فحسب ، بل يمكن أيضًا تشفيرًا غير متماثل (مثل أزواج مفاتيح RSA). على الرغم من أن توليد المفاتيح وتكوين التشفير غير المتماثل معقد نسبيًا ، إلا أنه يتمتع بأمان أعلى. أدناه ، دعونا نقدم بالتفصيل كيفية استخدام التشفير غير المتماثل.
أولاً ، نحتاج إلى إنشاء زوج المفاتيح من خلال أداة 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 = Company ، O = Organization ، L = City ، St = Province ، C = China صحيحة؟
[لا]: ذأدخل كلمة مرور المفتاح لـ <config-server>
(إذا كانت كلمة المرور هي نفسها مثل keystore ، اضغط على Enter):
أدخل كلمة المرور الجديدة مرة أخرى:
بالإضافة إلى ذلك ، إذا لم نرغب في إدخال معلومات المطالبة هذه خطوة بخطوة ، فيمكننا استخدام -Dname لتحديدها مباشرة ، في حين يمكن تحديد كلمة مرور Keystore وكلمة مرور المفتاح مباشرة باستخدام -storepass و -keypass. لذلك ، يمكننا إنشاء نفس keystore مباشرة مثل الأمر أعلاه من خلال الأمر التالي:
$ keytool -genkeypair -alias config -server -keyalg rsa / -dname "cn = zhaiyongchao ، ou = company ، o = منظمة ، l = city ، st = المقاطعة ، c = الصين" / -keypass 222222 / -Keystore config -server.keystore / -storepass 11111
بشكل افتراضي ، يكون المفتاح الذي تم إنشاؤه بواسطة الأمر أعلاه صالحًا فقط لمدة 90 يومًا. إذا أردنا ضبط فترة صلاحيتها ، فيمكننا القيام بذلك عن طريق إضافة المعلمة -المسافة. على سبيل المثال ، يمكننا تمديد فترة صحة المفتاح إلى سنة واحدة من خلال الأمر التالي:
$ keytool -genkeypair -Alias config -server -keyalg rsa / -dname "cn = Zhaiyongchao ، ou = company ، O = Organization ، L = City ، St = Province ، C = China" / -Keypass 222222 / -KeyStore config -server.keystore / -storeplass 1111 / -.
ستقوم طرق توليد الأوامر الثلاثة أعلاه بإنشاء ملف config-server.keystore في دليل التنفيذ الحالي للأمر. بعد ذلك ، نحتاج إلى حفظه في موقع في نظام الملفات في مركز التكوين ، على سبيل المثال ، وضعه في دليل المستخدم الحالي ، ثم إضافة معلومات التكوين ذات الصلة إلى مركز التكوين:
incrypt.key-store.location = file: // $ {user.home} /config-server.keystoreencrypt.key-store.alias=config-serverencrypt.key-storeإذا وضعنا 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
يمكن لتكوين المعلومات المتعلقة بـ KeyStore من خلال متغيرات البيئة تحقيق أمان أفضل ، لذلك يعد خيارًا جيدًا لنا لتخزين معلومات كلمة المرور الحساسة في متغيرات البيئة في مركز التكوين.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.