কিভাবে nginx ব্যবহার করে স্বাক্ষরিত HTTP এক্সচেঞ্জ (SXG) সেট আপ করবেন

কীভাবে SXG এক্সটেনশনগুলির সাথে একটি TLS শংসাপত্র তৈরি করবেন, SXG ফাইলগুলি তৈরি করার জন্য সরঞ্জামগুলি ইনস্টল করুন এবং SXG ফাইলগুলি পরিবেশন করার জন্য nginx কনফিগার করুন৷

হিরোকি কুমাজাকি
Hiroki Kumazaki

স্বাক্ষরিত এইচটিটিপি এক্সচেঞ্জ (এসএক্সজি) হল একটি নতুন ওয়েব প্রযুক্তি যা ব্যবহারকারীদের জন্য বিষয়বস্তু পরিবেশকদের থেকে আলাদা করে বিষয়বস্তু নির্মাতাদের বলা সহজ করে তোলে। এই নির্দেশিকা আপনাকে দেখায় কিভাবে SXG সেট আপ করতে হয়।

ক্রস ব্রাউজার সমর্থন

গুগল ক্রোম, স্যামসাং ইন্টারনেট এবং মাইক্রোসফ্ট এজ সহ বেশ কয়েকটি ক্রোমিয়াম-ভিত্তিক ব্রাউজার SXG সমর্থন করে। আরো আপ-টু-ডেট তথ্যের জন্য Origin-Signed HTTP এক্সচেঞ্জের ঐক্যমত্য এবং মানককরণ বিভাগটি দেখুন।

পূর্বশর্ত

আপনার ওয়েবসাইটে SXG প্রয়োগ করতে, আপনাকে অবশ্যই:

  • DNS এন্ট্রি সহ আপনার ডোমেনের উপর নিয়ন্ত্রণ রাখুন।
  • সার্টিফিকেট পান। SXG-এর জন্য একটি ডেডিকেটেড সার্টিফিকেট ইস্যু করা প্রয়োজন। বিশেষ করে, আপনি আপনার TLS কী বা শংসাপত্র পুনরায় ব্যবহার করতে পারবেন না।
  • একটি HTTP সার্ভার আছে যা HTTPS এর মাধ্যমে SXG তৈরি করতে এবং পরিবেশন করতে পারে।

অনুমান

এই গাইডটি অনুমান করে যে আপনি:

  • একটি OpenSSL 1.1.1 পরিবেশ আছে। এই নির্দেশিকাটি amd64 ISA-তে উবুন্টু 18.04 LTS দিয়ে লেখা হয়েছিল।
  • এক্সিকিউটেবল ইনস্টল করতে sudo চালানোর ক্ষমতা আছে।
  • একটি HTTP সার্ভার হিসাবে nginx ব্যবহার করুন।
  • এসএক্সজি-সম্পর্কিত এক্সটেনশনগুলি অন্তর্ভুক্ত করে এমন শংসাপত্র তৈরি করতে DigiCert ব্যবহার করছেন, কারণ এটি বর্তমানে এই এক্সটেনশনগুলিকে সমর্থন করে এমন একমাত্র প্রদানকারী বলে মনে হচ্ছে৷

এছাড়াও, এই নিবন্ধের উদাহরণ কমান্ডগুলি ধরে নেয় যে আপনার ডোমেন হল website.test , তাই আপনাকে আপনার আসল ডোমেনের সাথে website.test প্রতিস্থাপন করতে হবে৷

ধাপ 1: SXG-এর জন্য আপনার শংসাপত্র পান

SXG জেনারেট করতে, আপনার CanSignHttpExchanges এক্সটেনশনের পাশাপাশি একটি নির্দিষ্ট কী প্রকারের সাথে একটি TLS শংসাপত্র প্রয়োজন৷ 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 এক্সটেনশন অন্তর্ভুক্ত করুন , যা অতিরিক্ত শংসাপত্র বিকল্পের অধীনে পাওয়া যায়।
শংসাপত্র চেকবক্সে CanSignHttpExchanges এক্সটেনশন অন্তর্ভুক্ত করুন

যদি আপনার শংসাপত্র এই শর্তগুলির সাথে মেলে না, তবে ব্রাউজার এবং পরিবেশকরা নিরাপত্তার কারণে আপনার SXG প্রত্যাখ্যান করবে। এই গাইডটি ধরে নেয় যে আপনি DigiCert থেকে যে সার্টিফিকেট পেয়েছেন তার ফাইলের নাম mySxg.pem

ধাপ 2: libsxg ইনস্টল করুন

SXG ফরম্যাট জটিল এবং টুল ব্যবহার না করে তৈরি করা কঠিন। আপনি SXG তৈরি করতে নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করতে পারেন:

এই নির্দেশিকা libsxg ব্যবহার করে।

বিকল্প 1: ডেবিয়ান প্যাকেজ থেকে libsxg ইনস্টল করুন

যতক্ষণ 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: ডেবিয়ান প্যাকেজ থেকে প্লাগইন ইনস্টল করুন

nginx এর জন্য SXG মডিউল 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 সোর্স কোড প্রয়োজন। আপনি টারবল পেতে পারেন এবং নীচের কমান্ডগুলি ব্যবহার করে 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: SXG এর সাথে কাজ করার জন্য nginx প্লাগইন কনফিগার করুন

বিকল্প 1: একটি ইনস্টল করা-থেকে-ডেবিয়ান nginx মডিউল কনফিগার করুন

আপনি যদি ধাপ 3, বিকল্প 1 আগে ব্যবহার করেন তবে এই নির্দেশাবলী অনুসরণ করুন।

SXG সামগ্রী সরবরাহ করার জন্য HTTPS প্রয়োজন৷ আপনি DigiCert, আসুন এনক্রিপ্ট এবং অন্যান্য পরিষেবাগুলি থেকে একটি SSL/TLS শংসাপত্র পেতে পারেন৷ মনে রাখবেন যে আপনি SSL এর জন্য একটি SXG শংসাপত্র ব্যবহার করতে পারবেন না বা এর বিপরীতে, তাই আপনার দুটি শংসাপত্রের প্রয়োজন হবে৷ /etc/nginx/nginx.conf এর কনফিগারেশন ফাইলটি নিচের মত দেখতে হবে, ধরে নিচ্ছি যে আপনি SSL কী/সার্টিফিকেট পেয়ার /path/to/ssl/ এবং SXG কী/সার্টিফিকেট পেয়ার /path/to/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 ফাইলটি পরিবেশন করতে হবে না। যতক্ষণ এটি HTTPS সমর্থন করে ততক্ষণ আপনি এটিকে যেকোনো CDN বা অন্যান্য স্ট্যাটিক ফাইল পরিবেশন পরিষেবার মাধ্যমে পরিবেশন করতে পারেন।
  • 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 আগে ব্যবহার করেন তবে এই নির্দেশাবলী অনুসরণ করুন।

নিম্নলিখিত উদাহরণের মতো দেখতে /opt/nginx অধীনে ইনস্টল করা আপনার 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 রুট ডিরেক্টরিতে স্ট্যাটিক ফাইলগুলি পরিবেশন করে, কিন্তু যতক্ষণ না আপনার nginx কাজ করে ততক্ষণ আপনি নির্বিচারে ওয়েব অ্যাপ্লিকেশন ব্যাকএন্ড (যেমন রুবি অন রেল, জ্যাঙ্গো বা এক্সপ্রেস) এর জন্য SXG তৈরি করতে আপনার অ্যাপ্লিকেশনগুলির জন্য আপস্ট্রিম নির্দেশাবলী ব্যবহার করতে পারেন। সামনের HTTP(S) সার্ভার।

upstream app {
    server 127.0.0.1:8080;
}

server {
    location / {
        proxy_pass http://app;
    }
}

ধাপ 6: পরীক্ষা

ডাম্প-সাইনড এক্সচেঞ্জ টুলটি ব্যবহার করে পরীক্ষা করুন যে 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

প্রতিক্রিয়া পাঠান

SXG-এ কর্মরত Chromium ইঞ্জিনিয়াররা webpackage-dev@chromium.org- এ আপনার প্রতিক্রিয়া শুনতে আগ্রহী৷ এছাড়াও আপনি বিশেষ আলোচনায় যোগ দিতে পারেন, বা দলকে একটি বাগ রিপোর্ট করতে পারেন৷ আপনার প্রতিক্রিয়া প্রমিতকরণ প্রক্রিয়াকে ব্যাপকভাবে সাহায্য করবে এবং বাস্তবায়নের সমস্যাগুলি সমাধানে সহায়তা করবে। ধন্যবাদ!