كيفية إنشاء شهادة بروتوكول أمان طبقة النقل (TLS) باستخدام إضافات SXG وتثبيت أدوات لإنشاء ملفات SXG وضبط nginx لعرض ملفات SXG
عمليات تبادل HTTP الموقَّعة (SXG) هي تقنية ويب جديدة تسهّل على المستخدمين التمييز بين صنّاع المحتوى وموزّعي المحتوى. يوضّح لك هذا الدليل كيفية إعداد SXG.
التوافق مع جميع المتصفّحات
تتوفّر تقنية SXG في العديد من المتصفّحات المستندة إلى Chromium، بما في ذلك Google Chrome وSamsung Internet وMicrosoft Edge. راجِع قسم "التوافق والمعايير" في مقالة عمليات تبادل HTTP الموقَّعة من المصدر للاطّلاع على مزيد من المعلومات الحديثة.
المتطلبات الأساسية
لتنفيذ SXG على موقعك الإلكتروني، عليك إجراء ما يلي:
- التحكّم في نطاقك، بما في ذلك إدخالات نظام أسماء النطاقات
- الحصول على الشهادات تتطلّب تقنية SXG إصدار شهادة مخصّصة. على وجه التحديد، لا يمكنك إعادة استخدام مفتاح أو شهادة بروتوكول أمان طبقة النقل (TLS).
- توفُّر خادم HTTP يمكنه إنشاء ملفات SXG وعرضها عبر HTTPS
الفرضيّات
يفترض هذا الدليل أنّك:
- أن تتوفّر لديك بيئة OpenSSL 1.1.1 تم إعداد هذا الدليل باستخدام الإصدار 18.04 LTS من نظام التشغيل Ubuntu على amd64 ISA.
- أن يكون بإمكانك تشغيل
sudo
لتثبيت ملفات التشغيل - استخدِم
nginx
لخادم HTTP. - تستخدم DigiCert لإنشاء الشهادات التي تتضمّن إضافات ذات صلة بتنسيق SXG، لأنّه يبدو حاليًا أنّه الموفّر الوحيد الذي يتيح هذه الإضافات.
بالإضافة إلى ذلك، تفترض أمثلة الأوامر الواردة في هذه المقالة أنّ نطاقك هو website.test
، لذا عليك استبدال website.test
بنطاقك الفعلي.
الخطوة 1: الحصول على شهادة SXG
لإنشاء ملفات SXG، تحتاج إلى شهادة بروتوكول أمان طبقة النقل (TLS) مع إضافة CanSignHttpExchanges
، بالإضافة إلى نوع مفتاح معيّن.
توفّر DigiCert شهادات تتضمّن هذه الإضافة.
تحتاج إلى ملف CSR لإصدار شهادة، لذا أنشئ هذا الملف باستخدام الأوامر التالية:
openssl ecparam -genkey -name prime256v1 -out mySxg.key
openssl req -new -key mySxg.key -nodes -out mySxg.csr -subj "/O=Test/C=US/CN=website.test"
سيظهر لك ملف CSR بالشكل التالي:
-----BEGIN CERTIFICATE REQUEST-----
MIHuMIGVAgEAMDMxDTALBgNVBAoMBFRlc3QxCzAJBgNVBAYTAlVTMRUwEwYDVQQD
DAx3ZWJzaXRlLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS7IVaeMvid
S5UO7BspzSe5eqT5Qk6X6dCggUiV/vyqQaFDjA/ALyTofgXpbCaksorPaDhdA+f9
APdHWkTbbdv1oAAwCgYIKoZIzj0EAwIDSAAwRQIhAIb7n7Kcc6Y6pU3vFr8SDNkB
kEadlVKNA24SVZ/hn3fjAiAS2tWXhYdJX6xjf2+DL/smB36MKbXg7VWy0K1tWmFi
Sg==
-----END CERTIFICATE REQUEST-----
تأكَّد مما يلي:
- لا تتجاوز مدة الصلاحية 90 يومًا.
- تم تفعيل مربّع الاختيار تضمين إضافة CanSignHttpExchanges في الشهادة، الذي يمكن العثور عليه ضمن "خيارات الشهادة الإضافية".
إذا لم تتطابق شهادتك مع هذه الشروط، سيرفض المتصفحات والموزّعون ملف SXG الخاص بك لأسباب تتعلق بالأمان.
يفترض هذا الدليل أنّ اسم ملف الشهادة التي حصلت عليها من DigiCert هو mySxg.pem
.
الخطوة 2: تثبيت libsxg
تنسيق SXG معقّد ويصعب إنشاؤه بدون استخدام أدوات. يمكنك استخدام أحد الخيارات التالية لإنشاء SXG:
- أداة gen-signedexchange المكتوبة بلغة Go
- مكتبة
libsxg
المكتوبة بلغة C
يستخدم هذا الدليل libsxg
.
الخيار 1: تثبيت libsxg
من حزمة Debian
يمكنك تثبيت الحزمة بالطريقة المعتادة في Debian، شرط تطابق إصدار OpenSSL (libssl-dev
).
sudo apt install -y libssl-dev
wget https://github.com/google/libsxg/releases/download/v0.2/libsxg0_0.2-1_amd64.deb
wget https://github.com/google/libsxg/releases/download/v0.2/libsxg-dev_0.2-1_amd64.deb
sudo dpkg -i libsxg0_0.2-1_amd64.deb
sudo dpkg -i libsxg-dev_0.2-1_amd64.deb
الخيار 2: إنشاء libsxg
يدويًا
إذا كنت لا تستخدم بيئة متوافقة مع ملفات .deb
، يمكنك إنشاء libsxg
بنفسك.
كشرط أساسي، عليك تثبيت git
وcmake
وopenssl
وgcc
.
git clone https://github.com/google/libsxg
mkdir libsxg/build
cd libsxg/build
cmake .. -DRUN_TEST=false -DCMAKE_BUILD_TYPE=Release
make
sudo make install
الخطوة 3: تثبيت المكوّن الإضافي nginx
يتيح لك المكوّن الإضافي nginx
إنشاء ملفات SXG ديناميكيًا بدلاً من إنشائها بشكل ثابت قبل عرضها.
الخيار 1: تثبيت المكوّن الإضافي من حزمة Debian
يتم توزيع وحدة SXG لنظام التشغيل nginx
على GitHub.
على الأنظمة المستندة إلى دبيان، يمكنك تثبيته كحزمة ثنائية:
sudo apt install -y nginx=1.15.9-0
wget https://github.com/google/nginx-sxg-module/releases/download/v0.1/libnginx-mod-http-sxg-filter_1.15.9-0ubuntu1.1_amd64.deb
sudo dpkg -i libnginx-mod-http-sxg-filter_1.15.9-0ubuntu1.1_amd64.deb
الخيار 2: إنشاء المكوّن الإضافي يدويًا
يتطلب إنشاء وحدة nginx
رمز المصدر nginx
.
يمكنك الحصول على حزمة tar وإنشاءها مع الوحدة الديناميكية SXG باستخدام الأوامر التالية:
git clone https://github.com/google/nginx-sxg-module
wget https://nginx.org/download/nginx-1.17.5.tar.gz
tar xvf nginx-1.17.5.tar.gz
cd nginx-1.17.5
./configure --prefix=/opt/nginx --add-dynamic-module=../nginx-sxg-module --without-http_rewrite_module --with-http_ssl_module
make
sudo make install
تتمتع إعدادات nginx
بمرونة كبيرة.
ثبِّت nginx
في أي مكان في نظامك، ثم حدِّد مسارًا خاصًا بـ module/config/log/pidfile
.
يفترض هذا الدليل أنّك ستثبّت التطبيق على /opt/nginx
.
الخطوة 4: ضبط مكوّن nginx
الإضافي للعمل مع SXG
الخيار 1: ضبط وحدة nginx
تم تثبيتها من Debian
اتّبِع هذه التعليمات إذا كنت قد استخدمت الخطوة 3، الخيار 1 في وقت سابق.
يتطلب إرسال محتوى SXG استخدام HTTPS. يمكنك الحصول على شهادة طبقة المقابس الآمنة/بروتوكول أمان طبقة النقل (TLS) من DigiCert وLet's Encrypt وخدمات أخرى. يُرجى العِلم أنّه لا يمكنك استخدام شهادة SXG لطبقة المقابس الآمنة أو العكس، لذا ستحتاج إلى شهادتَين. يجب أن يبدو ملف الإعدادات في /etc/nginx/nginx.conf
مشابهًا لما يلي، بافتراض أنّك وضعت مفتاح/شهادة بروتوكول طبقة المقابس الآمنة (SSL) في /path/to/ssl/
ومفتاح/شهادة بروتوكول SXG في /path/to/sxg/
:
user www-data;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
add_header X-Content-Type-Options nosniff;
server {
listen 443 ssl;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
server_name website.test;
sxg on;
sxg_certificate /path/to/sxg/mySxg.pem;
sxg_certificate_key /path/to/sxg/mySxg.key;
sxg_cert_url https://website.test/certs/cert.cbor;
sxg_validity_url https://website.test/validity/resource.msg;
sxg_cert_path /certs/cert.cbor;
root /var/www/html;
}
}
sxg_cert_url
هو عنصر أساسي لمتصفّحات لتحميل SXG بشكل صحيح لأنّه يحدّد موقع سلسلة الشهادات. تحتوي سلسلة الشهادات على شهادة ومعلومات تثبيت OCSP بتنسيق cbor. يُرجى العلم أنّه ليس عليك عرض ملفcert.cbor
من المصدر نفسه. ويمكنك عرضها من خلال أيّ من شبكات توصيل المحتوى (CDN) أو خدمات عرض الملفات الثابتة الأخرى ما دامت تتوافق مع بروتوكول HTTPS.- من المخطّط أن يعرض
sxg_validitiy_url
معلومات ذات صلة برأس توقيع SXG. إذا لم يتم تعديل الصفحة منذ آخر ملف SXG، ليس من المطلوب من الناحية الفنية تنزيل ملف SXG بالكامل. وبالتالي، من المتوقّع أن يؤدي تعديل معلومات عنوان التوقيع وحده إلى تقليل عدد عمليات الوصول إلى الشبكة. ولكن لم يتم تنفيذ التفاصيل بعد.
ابدأ استخدام nginx
وأصبح بإمكانك عرض إعلانات SXG.
sudo systemctl start nginx.service
curl -H"Accept: application/signed-exchange;v=b3" https://website.test/ > index.html.sxg
cat index.html.sxg
sxg1-b3...https://website.test/...(omit)
الخيار 2: ضبط وحدة nginx
تم إنشاؤها من المصدر
اتّبِع هذه التعليمات إذا كنت قد استخدمت الخطوة 3، الخيار 2 في وقت سابق.
اضبط نظام nginx
المثبَّت ضمن /opt/nginx
ليظهر بالشكل التالي:
load_module "/opt/nginx/modules/ngx_http_sxg_filter_module.so";
events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
add_header X-Content-Type-Options nosniff;
server {
listen 443 ssl;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
server_name example.com;
sxg on;
sxg_certificate /path/to/sxg/mySxg.pem;
sxg_certificate_key /path/to/sxg/mySxg.key;
sxg_cert_url https://website.test/certs/cert.cbor;
sxg_validity_url https://website.test/validity/resource.msg;
sxg_cert_path /certs/cert.cbor;
root /opt/nginx/html;
}
}
بعد ذلك، ابدأ nginx
. يمكنك الآن الحصول على ملف SXG.
cd /opt/nginx/sbin
sudo ./nginx
curl -H "Accept: application/signed-exchange;v=b3" https://website.test/ > index.html.sxg
less index.html.sxg
sxg1-b3...https://website.test/...(omit)
الخطوة 5: عرض الخلفية لتطبيقك
في الأمثلة أعلاه، يعرض nginx
الملفات الثابتة في الدليل الجذر، ولكن يمكنك استخدام توجيهات المصدر لتطبيقاتك لإنشاء SXG لخدمات خلفية تطبيق الويب التعسفية (مثل Ruby on Rails أو Django أو Express) ما دام nginx
يعمل كخادم أمامي لخدمة HTTP(S).
upstream app {
server 127.0.0.1:8080;
}
server {
location / {
proxy_pass http://app;
}
}
الخطوة 6: الاختبار
استخدِم أداة dump-signedexchange لاختبار صحة ملفات SXG التي يتم عرضها والتأكّد من عدم تسجيل أي أخطاء والتحقّق من أنّ الرؤوس والنصّ كما هو متوقّع.
go get -u github.com/WICG/webpackage/go/signedexchange/cmd/dump-signedexchange
export PATH=$PATH:~/go/bin
dump-signedexchange -verify -uri https://website.test/ | less
إرسال ملاحظات
يحرص مهندسو Chromium الذين يعملون على SXG على معرفة ملاحظاتك وآرائك على العنوان webpackage-dev@chromium.org. يمكنك أيضًا الانضمام إلى مناقشة المواصفات أو الإبلاغ عن خطأ للفريق. ستساعدنا ملاحظاتك كثيرًا في عملية وضع المعايير، كما ستساعدنا في معالجة مشاكل التنفيذ. شكرًا