شهادات TLS

هيّئ شهادات TLS الخارجية لـ IBM Bob المحلي حتى يتمكن عملاء bob-ide وbob-shell من الاتصال بأمان.

يكشف Bob واجهات برمجة التطبيقات الخاصة به عبر HTTPS. قبل أن يتمكن المستخدمون من الاتصال باستخدام bob-ide أو bob-shell، يجب أن تثق محطات عمل العملاء بشهادة نقطة النهاية.

نصيحة:

استخدم شهادة صادرة عن مرجع مصادقة للمؤسسة أو موثوق عمومًا كلما أمكن. يلغي هذا الحاجة إلى توزيع شهادات CA خاصة بـ Bob على محطات عمل المطورين.

للرجوع إلى الشهادة الموقَّعة ذاتيًا الافتراضية في أي وقت، شغّل bobctl reset-route. يُزيل هذا spec.externalCertificate من مستودع شهادات Bob ويُعيد المُشغِّل نقطة النهاية الخارجية إلى cert-manager.

استخدم هذا النهج عندما تكون الشهادة متاحة من PKI الشركة أو مرجع مصادقة موثوق عمومًا.

قبل طلب الشهادة أو إنشائها، حدّد كل اسم مضيف يكشفه Bob. يجب تضمين جميع أسماء المضيف كأسماء بديلة للموضوع (SANs) في الشهادة.

استرداد أسماء مضيفي الدخول

شغّل الأمر التالي لسرد جميع أسماء مضيفي دخول Bob:

oc get ingress -n <instance-namespace> \
  -o jsonpath='{range .items[*]}{range .spec.rules[*]}{.host}{"\n"}{end}{end}'

سجّل أسماء المضيف المُعادة — فهي مطلوبة عند طلب الشهادات أو إنشائها.

التحقق من متطلبات الشهادة

تأكد من استيفاء الشهادة للمتطلبات التالية قبل تطبيقها على Bob:

  • المفتاح الخاص غير مشفّر.
  • تحتوي الشهادة على سلسلة الشهادات الكاملة.
  • جميع أسماء مضيفي دخول Bob مضمَّنة كإدخالات SAN.
  • الشهادة والمفتاح مقدَّمان بتنسيق PEM.

إنشاء سر الشهادة

أنشئ سر Kubernetes يحتوي على الشهادة والمفتاح الخاص:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=tls.crt \
  --from-file=tls.key=tls.key \
  --from-file=ca.crt=ca.crt \
  -n <instance-namespace>

لتحديث سر موجود:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=tls.crt \
  --from-file=tls.key=tls.key \
  --from-file=ca.crt=ca.crt \
  -n <instance-namespace> \
  --dry-run=client -o yaml | oc apply -f -

تطبيق الشهادة

هيّئ Bob لاستخدام الشهادة:

./bobctl setup-route --tls-secret my-tls-secret
المعاملالوصف
--tls-secretيحدد السر الذي يحتوي على الشهادة والمفتاح الخاص.
--no-waitيعود فورًا دون انتظار اكتمال التسوية.
--dry-runيتحقق من التكوين دون تطبيق التغييرات.

التحقق من الشهادة

تحقق من تقديم الشهادة المتوقعة:

echo | openssl s_client \
  -connect <hostname>:443 \
  -servername <hostname> 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates

تحقق من:

  • صحة المُصدِر.
  • وجود اسم المضيف في قائمة SAN.
  • صحة تواريخ صلاحية الشهادة.

استخدم هذا الإجراء لإنشاء شهادة موقَّعة بمرجع مصادقة خاص أو داخلي وتكوين Bob لاستخدامها في حركة HTTPS الخارجية.

إنشاء شهادة CA

أنشئ مفتاحًا خاصًا وشهادة موقَّعة ذاتيًا لمرجع المصادقة:

openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes \
  -key ca.key \
  -sha256 \
  -days 365 \
  -out ca.crt \
  -subj "/CN=<BOB_HOSTNAME> CA"

يُنشئ هذا الملفين ca.key وca.crt.

ملاحظة:

يتوقع Bob أن تُسمَّى شهادة CA بـ ca.crt عند تضمينها في سر Kubernetes. إذا كنت تستخدم شهادة CA موجودة، أعد تسميتها إلى ca.crt قبل إنشاء السر.

إنشاء مفتاح خاص للخادم

أنشئ مفتاحًا خاصًا غير مشفّر لشهادة نقطة نهاية Bob:

openssl genrsa -out tls.key 4096

إذا كان المفتاح الخاص مشفَّرًا بعبارة مرور، أزل عبارة المرور قبل المتابعة:

openssl rsa -in encrypted.key -out tls.key

إنشاء ملف تكوين SAN

أنشئ ملفًا باسم san.cnf واستبدل أسماء المضيف النائبة بأسماء مضيفي الدخول المُستردة مسبقًا:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = <BOB_HOSTNAME_1>

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = <BOB_HOSTNAME_1>
DNS.2 = <BOB_HOSTNAME_2>
DNS.3 = <BOB_HOSTNAME_3>

أضف أو أزل إدخالات DNS.* حسب الحاجة بحيث تُضمَّن جميع أسماء مضيفي دخول Bob.

إنشاء طلب توقيع شهادة

openssl req \
  -new \
  -key tls.key \
  -out tls.csr \
  -config san.cnf

توقيع الشهادة

openssl x509 \
  -req \
  -in tls.csr \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -out tls.crt \
  -days 365 \
  -extensions v3_req \
  -extfile san.cnf

إنشاء سر TLS

للشهادات الصادرة عن مرجع مصادقة خاص أو للشركة:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=/path/to/tls.crt \
  --from-file=tls.key=/path/to/tls.key \
  --from-file=ca.crt=/path/to/ca.crt \
  -n <instance-namespace>

للشهادات الموثوقة عمومًا:

oc create secret tls my-tls-secret \
  --cert=/path/to/tls.crt \
  --key=/path/to/tls.key \
  -n <instance-namespace>

تطبيق الشهادة

هيّئ Bob لاستخدام سر TLS:

./bobctl setup-route --tls-secret my-tls-secret

يتحقق bobctl من السر ويحدّث تكوين Bob وينتظر اكتمال التسوية.

المعاملالوصف
--tls-secret <secret>يحدد السر الذي يحتوي على شهادة TLS والمفتاح الخاص.
--no-waitيعود فورًا دون انتظار اكتمال التسوية.
--dry-runيتحقق من التكوين دون تطبيق التغييرات.
ملاحظة:

إذا لم يكن ca.crt مضمَّنًا في السر، يعرض bobctl تحذيرًا. هذا متوقع عندما تكون الشهادة صادرة عن مرجع مصادقة موثوق بالفعل من محطات عمل العملاء.

التحقق من الشهادة

تحقق من تقديم Bob للشهادة المتوقعة:

echo | openssl s_client \
  -connect <BOB_HOSTNAME_1>:443 \
  -servername <BOB_HOSTNAME_1> 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates

تحقق من:

  • تطابق المُصدِر مع مرجع المصادقة المتوقع.
  • احتواء الشهادة على إدخالات اسم المضيف المتوقعة.
  • صحة تواريخ صلاحية الشهادة.

إذا لم تثق محطات عمل المطورين بمرجع المصادقة المُصدِر، وزّع شهادة CA على المستخدمين قبل اتصالهم بـ Bob باستخدام bob-ide أو bob-shell.

إذا لم تُهيَّأ أي شهادة خارجية، يستخدم Bob شهادة موقَّعة ذاتيًا يديرها cert-manager. في هذا التكوين، يجب على المستخدمين الثقة بشهادة CA الخاصة بـ Bob قبل الاتصال.

تحديد تكوين الشهادة

تحقق مما إذا كانت نقطة النهاية الخارجية لـ Bob تستخدم شهادة موقَّعة ذاتيًا:

oc get secret bob-external-tls -n <instance-namespace> \
  -o jsonpath='{.data.tls\.crt}' \
  | base64 -d \
  | openssl x509 -noout -issuer
  • إذا كان المُصدِر CN=Bob Internal CA، فإن المجموعة تستخدم الشهادة الموقَّعة ذاتيًا الافتراضية. تابع مع الخطوة التالية.
  • إذا كان المُصدِر مرجع مصادقة مؤسسة أو موثوقًا عمومًا، لا يُشترط أي تكوين شهادة من جانب العميل. راجع إدارة المستخدمين.

تصدير شهادة CA

./bobctl get-ca-cert --output bob-ca.crt

توزيع شهادة CA

زوّد المستخدمين بملف bob-ca.crt المُصدَّر وانصحهم بإضافته إلى مخزن ثقة نظام التشغيل. يستطيع المستخدمون إنشاء اتصالات HTTPS موثوقة بعد استيراد شهادة CA الخاصة بـ Bob.

ما رأيك في هذا الموضوع؟