لا تسري هذه الصفحة على ClickHouse Cloud. ويُنفَّذ الإجراء الموضَّح هنا تلقائيًا في خدمات ClickHouse Cloud.
يُعد تنفيذ TLS معقدًا، وهناك العديد من الخيارات التي ينبغي مراعاتها لضمان نشر آمن ومتين بالكامل. هذا دليل عملي أساسي يتضمن أمثلة أساسية على تهيئة TLS. استشر فريق PKI/الأمن لديك لإنشاء الشهادات الصحيحة لمؤسستك.راجع هذا الدليل العملي الأساسي حول استخدام الشهادات للحصول على نظرة عامة تمهيدية.
1
إنشاء عملية نشر لـ ClickHouse
أُعدّ هذا الدليل باستخدام Ubuntu 20.04، وتم تثبيت ClickHouse على المضيفات التالية باستخدام حزمة DEB (عبر apt). اسم النطاق هوmarsnet.local:راجع البدء السريع لمزيد من التفاصيل حول كيفية تثبيت ClickHouse.
2
أنشئ شهادات TLS
يُستخدم الاعتماد على الشهادات الموقَّعة ذاتيًا لأغراض العرض التوضيحي فقط، ولا ينبغي استخدامها في بيئة الإنتاج. يجب إنشاء طلبات الشهادات بحيث تُوقَّع من المؤسسة ويجري التحقق منها باستخدام سلسلة CA التي ستُضبط في الإعدادات. ومع ذلك، يمكن استخدام هذه الخطوات لتهيئة الإعدادات واختبارها، ثم استبدالها بالشهادات الفعلية التي ستُستخدم.
-
أنشئ مفتاحًا سيُستخدم لمرجع CA الجديد:
-
أنشئ شهادة CA جديدة موقَّعة ذاتيًا. سينشئ الأمر التالي شهادة جديدة ستُستخدم لتوقيع شهادات أخرى باستخدام مفتاح CA:
احفظ نسخة احتياطية من المفتاح وشهادة CA في موقع آمن خارج العنقود. بعد إنشاء شهادات العُقد، يجب حذف المفتاح من عُقد العنقود.
-
تحقّق من محتويات شهادة CA الجديدة:
-
أنشئ طلب شهادة (CSR) وولِّد مفتاحًا لكل عقدة:
-
باستخدام CSR وCA، أنشئ أزواجًا جديدة من الشهادات والمفاتيح:
-
تحقّق من الشهادات من حيث subject وissuer:
-
تأكّد من إمكانية التحقق من الشهادات الجديدة باستخدام شهادة CA:
3
أنشئ واضبط دليلاً لتخزين الشهادات والمفاتيح.
يجب تنفيذ ذلك على كل عقدة. استخدم الشهادات والمفاتيح المناسبة على كل مضيف.
-
أنشئ مجلدًا داخل دليل يمكن لـ ClickHouse الوصول إليه على كل عقدة. نوصي باستخدام دليل الإعدادات الافتراضي (مثل
/etc/clickhouse-server): -
انسخ شهادة CA وشهادة العقدة والمفتاح الخاص المقابل لكل عقدة إلى دليل
certsالجديد. -
حدّث المالك والأذونات للسماح لـ ClickHouse بقراءة الشهادات:
4
تهيئة البيئة بمجموعات أساسية باستخدام ClickHouse Keeper
في بيئة النشر هذه، تُستخدم إعدادات ClickHouse Keeper التالية في كل عقدة. سيكون لكل خادم معرّفه الخاص<server_id>. (مثلاً، <server_id>1</server_id> للعقدة chnode1، وهكذا دواليك.)المنفذ الموصى به لـ ClickHouse Keeper هو
9281. ومع ذلك، يمكن تهيئة هذا المنفذ وتعيينه إلى قيمة أخرى إذا كان مستخدمًا بالفعل من قِبل تطبيق آخر في البيئة.للحصول على شرح كامل لجميع الخيارات، تفضّل بزيارة https://clickhouse.com/docs/operations/clickhouse-keeper/- أضف ما يلي ضمن الوسم
<clickhouse>في ملفconfig.xmlالخاص بخادم ClickHouse
بالنسبة إلى بيئات الإنتاج، يُوصى باستخدام ملف إعدادات منفصل بصيغة
.xml في الدليل config.d.
لمزيد من المعلومات، يُرجى زيارة https://clickhouse.com/docs/operations/configuration-files/عندما يكون ClickHouse Keeper مضمّنًا في ClickHouse server (كما هو موضح أعلاه)، فإنه يستخدم إعداد OpenSSL الخاص بالخادم والمُعرَّف في قسم OpenSSL ضمن تهيئة واجهات TLS على عقد ClickHouse. وإذا كنت تُشغّل ClickHouse Keeper كعملية مستقلة، فيجب إضافة قسم
<openSSL> إلى ملف إعداد Keeper مع إعدادات شهادة CA وشهادة/مفتاح العقدة نفسها. راجع تهيئة OpenSSL لـ ClickHouse Keeper المستقل أدناه لمزيد من التفاصيل.-
قم بإلغاء التعليق وتحديث إعدادات Keeper على جميع العُقد، ثم اضبط العلامة
<secure>على 1: -
حدِّث وأضِف إعدادات العنقود التالية إلى
chnode1وchnode2. سيُستخدمchnode3لاستكمال النصاب لـ ClickHouse Keeper.
في هذا الإعداد، تم تكوين cluster مثالي واحد فقط. يجب إما إزالة عناقيد الاختبار النموذجية، أو تحويلها إلى تعليقات، أو إذا كان هناك cluster موجود بالفعل قيد الاختبار، فيجب تحديث المنفذ وإضافة الخيار
<secure>. ويجب تعيين <user و<password> إذا كان المستخدم default قد جرى تكوينه في الأصل بكلمة مرور أثناء التثبيت أو في ملف users.xml.-
حدّد قيم الماكرو لتتمكن من إنشاء جدول ReplicatedMergeTree للاختبار. على
chnode1:على العقدةchnode2:
5
تكوين واجهات TLS على عُقد ClickHouse
تُكوَّن الإعدادات التالية في ملفconfig.xml الخاص بخادم ClickHouse-
عيّن اسم العرض لعملية النشر (اختياري):
-
اضبط ClickHouse للاستماع على المنافذ الخارجية:
-
كوّن منفذ
httpsوعطّل منفذhttpعلى كل عقدة: -
كوّن منفذ TCP الآمن لـ ClickHouse Native وعطّل المنفذ الافتراضي غير الآمن على كل عقدة:
-
كوّن منفذ
interserver httpsوعطّل المنفذ الافتراضي غير الآمن على كل عقدة: - كوّن OpenSSL باستخدام الشهادات والمسارات
يجب تحديث كل اسم ملف ومسار ليتطابقا مع العقدة التي يُجرى تكوينهما عليها.
على سبيل المثال، حدّث قيمة
<certificateFile> إلى chnode2.crt عند التكوين على المضيف chnode2.-
اضبط TLS لـ gRPC على كل عقدة:
لمزيد من المعلومات، تفضّل بزيارة https://clickhouse.com/docs/interfaces/grpc/
-
اضبط clickhouse client على عقدة واحدة على الأقل لاستخدام TLS في الاتصالات ضمن ملف
config.xmlالخاص به (يوجد افتراضيًا في/etc/clickhouse-client/): -
عطّل منافذ المحاكاة الافتراضية لكلٍّ من MySQL وPostgreSQL:
6
الاختبار
-
شغِّل جميع العقد، واحدةً تلو الأخرى:
-
تأكّد من أن المنافذ الآمنة تعمل وفي وضع الاستماع، ويجب أن يكون الإخراج مشابهًا لهذا المثال على كل عقدة:
-
تحقق من حالة ClickHouse Keeper
لن تعمل أوامر الأحرف الأربعة (4lW) المعتادة باستخدام
echoبدون TLS، وإليك كيفية استخدام هذه الأوامر معopenssl.- ابدأ جلسة تفاعلية باستخدام
openssl
- ابدأ جلسة تفاعلية باستخدام
-
أرسِل أوامر 4LW ضمن جلسة OpenSSL
-
شغِّل عميل ClickHouse باستخدام الخيار
--secureومنفذ TLS: -
سجّل الدخول إلى واجهة Play عبر واجهة
httpsعلىhttps://chnode1.marsnet.local:8443/play.
سيعرض المتصفح شهادةً غير موثوق بها، لأن الوصول إليه يتم من محطة عمل ولأن الشهادات غير موجودة في مخازن شهادات CA الجذرية على جهاز العميل.
عند استخدام شهادات صادرة عن جهة عامة أو عن CA مؤسسية، ينبغي أن تظهر على أنها موثوق بها.
-
أنشئ جدولًا مكرّرًا:
-
أضِف صفّين إلى
chnode1: -
تحقق من النسخ المتماثل من خلال عرض الصفوف على
chnode2:
تهيئة OpenSSL لـ ClickHouse Keeper المستقل
tcp_port_secure) أو لتنفيذ تكرار Raft بين عُقد Keeper.
أضف قسم <openSSL> التالي إلى ملف تهيئة ClickHouse Keeper المستقل على كل عقدة:
يجب تحديث كل اسم ملف بحيث يطابق العقدة التي تُجرى عليها التهيئة.
على سبيل المثال، حدِّث الإدخال
<certificateFile> ليكون chnode2.crt عند التهيئة على المضيف chnode2.<server> لاستقبال اتصالات العملاء الواردة عبر منفذ Keeper الآمن (tcp_port_secure). ويُستخدم القسم <client> للاتصالات الصادرة بين عُقد Keeper أثناء النسخ المتماثل باستخدام Raft.
تستخدم مسارات الشهادات أعلاه
/etc/clickhouse-keeper/certs/، وهو المسار المعتاد لتثبيتات Keeper المستقلة. إذا ثبّتَّ Keeper في مسار مختلف، فعدّل ذلك وفقًا لذلك. أمّا الشهادات نفسها فهي نفسها التي أُنشئت في الخطوة 2.أوضاع التحقق في OpenSSL ومعالِجات الشهادات
<openSSL> عدة خيارات لكلٍّ من <verificationMode> و<invalidCertificateHandler>، تتحكّم في الطريقة التي يتحقق بها ClickHouse من شهادات TLS. وتنطبق هذه الإعدادات على clickhouse-server وclickhouse-client وClickHouse Keeper المستقل.
أوضاع التحقق
<verificationMode> داخل القسم <server> أو <client> في <openSSL>:
معالجات الشهادات غير الصالحة
<invalidCertificateHandler> داخل القسم <server> أو <client> ضمن <openSSL>. يحدّد هذا المعالج ما يحدث عند فشل التحقق من الشهادة. على جانب الخادم، يتحكم في كيفية التعامل مع شهادات العميل غير الصالحة. وعلى جانب العميل، يتحكم في كيفية التعامل مع شهادات الخادم غير الصالحة.
مثال: تعطيل التحقق من الشهادة
verificationMode على none واستخدم AcceptCertificateHandler.
بالنسبة إلى clickhouse-client، يمكنك أيضًا استخدام الخيار --accept-invalid-certificate في واجهة سطر الأوامر، والذي يطبّق كلا الإعدادين تلقائيًا.
clickhouse-client (/etc/clickhouse-client/config.xml):
config.xml أو ملف في config.d/). لا يزال قسم <server> يتطلب مسارات الشهادة والمفتاح الخاص، لأن الخادم يجب أن يقدّم شهادته الخاصة إلى العملاء، حتى عندما لا يتحقق من شهاداتهم: