كيفية إنشاء شهادة TLS باستخدام امتدادات SXG، وتثبيت أدوات لإنشاء ملفات SXG، وإعداد nginx لعرض ملفات SXG
Signed HTTP Exchange (SXG) هي تقنية ويب جديدة تسهل على المستخدمين التمييز بين منشئي المحتوى وموزعي المحتوى. يوضح لك هذا الدليل كيفية إعداد SXG.
التوافق مع المتصفحات
تتوافق العديد من المتصفحات المستندة إلى Chromium مع آلية SXG، بما في ذلك Google Chrome وSamsung Internet وMicrosoft Edge. راجِع قسم "الإجماع والتوحيد" في عمليات تبادل HTTP الموقَّعة حسب المصدر للاطّلاع على مزيد من المعلومات.
المتطلبات الأساسية
لتطبيق آلية SXG على موقعك الإلكتروني، يجب:
- التحكم في نطاقك، بما في ذلك إدخالات نظام أسماء النطاقات.
- الحصول على الشهادات. وتتطلّب آلية SXG إصدار شهادة مخصّصة. وعلى وجه الخصوص، لا يمكنك إعادة استخدام مفتاح أو شهادة بروتوكول أمان طبقة النقل (TLS).
- يجب أن يتوفّر لديك خادم HTTP يمكنه إنشاء ملفات SXG وعرضها عبر HTTPS.
الفرضيّات
يفترض هذا الدليل ما يلي:
- توفُّر بيئة OpenSSL 1.1.1. تمت كتابة هذا الدليل باستخدام Ubuntu 18.04 LTS على 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 في الشهادة والذي يمكن العثور عليه ضمن خيارات الشهادة الإضافية.
![](https://web.dev/static/articles/how-to-set-up-signed-http-exchanges/image/kFWTZFXNvwkHnwRu7y8Q.png?authuser=6&hl=ar)
إذا لم تتطابق شهادتك مع هذه الشروط، سترفض المتصفّحات والموزّعون آلية 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.
وعلى الأنظمة المستندة إلى Debian، يمكنك تثبيته كحزمة ثنائية:
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
.
يمكنك الحصول على لعبة tarball وتصميمها جنبًا إلى جنب مع الوحدة الديناميكية 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 في "
sxg_validitiy_url
". إذا لم يتم تعديل الصفحة منذ تاريخ آلية 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-Signed Exchange لاختبار صحة ملفات 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. ويمكنك أيضًا الانضمام إلى مناقشة المواصفات، أو الإبلاغ عن خطأ إلى الفريق. ستساعد ملاحظاتك بشكل كبير في عملية توحيد المقاييس كما ستساعد في معالجة مشاكل التنفيذ. شكرًا