এই ডকুমেন্টটিতে একটি আইসোলেটেড ওয়েব অ্যাপ (IWA)- এর জন্য কী রোটেশন প্রক্রিয়া সংক্রান্ত প্রয়োজনীয় তথ্য প্রদান করা হয়েছে, যার মধ্যে রয়েছে কখন এটি প্রয়োজন এবং কোনো কী হারিয়ে গেলে বা এর নিরাপত্তা বিঘ্নিত হলে ডেভেলপারদের অবশ্যই কোন পদক্ষেপগুলো অনুসরণ করতে হবে।
IWA-এর জন্য মূল ঘূর্ণন
কী রোটেশন হলো এমন একটি ব্যবস্থা, যা আপনার IWA-তে সাইন করতে ব্যবহৃত প্রাইভেট কী-গুলো কোনো লিক বা হারিয়ে যাওয়ার ক্ষেত্রে প্রতিস্থাপন করার সুযোগ দেয়। এই প্রক্রিয়াটি অ্যাপটিকে সচল রাখে এবং একটি স্থিতিশীল বান্ডেল আইডি ও অরিজিন বজায় রাখে, যা আপনার অ্যাপের ডিস্ট্রিবিউশন এবং আপডেটের ধারাবাহিকতা নিশ্চিত করে।
কী রোটেশন প্রক্রিয়ার জন্য প্রশাসক বা ব্যবহারকারীর কোনো পরিবর্তনের প্রয়োজন হয় না এবং সঠিকভাবে সম্পন্ন করা হলে, এটি তাদের কাছে অদৃশ্য থাকবে। কী রোটেশন সক্ষম করার জন্য প্রাথমিক অ্যালাওলিস্টিং প্রক্রিয়ার সময় প্রতিষ্ঠিত বিশ্বস্ত যোগাযোগ চ্যানেলগুলো অপরিহার্য।
চাবি ঘোরানোর প্রয়োজনীয়তা
দুটি প্রধান পরিস্থিতিতে কী রোটেশন একান্তই প্রয়োজনীয়:
- কী লিক বা আপস: যদি আপনার প্রাইভেট সাইনিং কী আপসকৃত হয় বা ফাঁস হওয়ার সম্ভাবনা থাকে, তবে আপনার অ্যাপ্লিকেশনটি সুরক্ষিত করতে আপনাকে অবশ্যই অবিলম্বে কী রোটেশন প্রক্রিয়া শুরু করতে হবে। একটি ফাঁস হওয়া কী আপনার ছদ্মবেশ ধারণ করতে, আপনার অ্যাপ ব্যবহারকারীদের ক্ষতি করতে এবং আপনার কোম্পানির সুনাম বিপন্ন করতে ব্যবহার করা যেতে পারে।
- কী হারিয়ে গেলে: আপনি যদি আপনার প্রাইভেট সাইনিং কী-এর অ্যাক্সেস হারিয়ে ফেলেন এবং নতুন আপডেট সাইন করতে না পারেন, তাহলে আপনার অ্যাপ্লিকেশনটি বিতরণ করার ক্ষমতা পুনরায় প্রতিষ্ঠা করার জন্য কী রোটেশন প্রয়োজন হবে।
ডেভেলপারের প্রয়োজনীয়তা
একটি গুরুত্বপূর্ণ রোটেশন শুরু করার আগে, আপনাকে অবশ্যই নিম্নলিখিত শর্তাবলী পূরণ করতে হবে:
- অনুমোদিত অ্যাপ: শুধুমাত্র অনুমোদিত অ্যাপগুলোই কী রোটেশনের আওতাভুক্ত হতে পারে।
- বিশ্বস্ত ইমেল: কী রোটেশনের অনুরোধ করার জন্য আপনাকে অবশ্যই অ্যালাওলিস্টিং প্রক্রিয়ার সময় প্রদত্ত বিশ্বস্ত ইমেল ঠিকানাটি ব্যবহার করতে হবে।
হোস্টেড অ্যাপগুলো পদত্যাগ করানো এবং নতুন সংস্করণ প্রকাশ করা
একটি কী পরিবর্তন করার পর, বৈধ কী দিয়ে স্বাক্ষরিত নয় এমন সমস্ত ইনস্টল করা অ্যাপ ইনস্ট্যান্স ব্লক হয়ে যায়। আপনার ব্যবহারকারীদের জন্য যাতে কোনো বিঘ্ন না ঘটে, সেজন্য আপনাকে অবশ্যই নতুন কী (বা উভয় কী) দিয়ে স্বাক্ষরিত একটি অ্যাপ সরবরাহ করতে হবে। বান্ডেল পুনরায় স্বাক্ষর করার প্রযুক্তিগত বিবরণ "একাধিক কী দিয়ে কীভাবে একটি বান্ডেল স্বাক্ষর করবেন" বিভাগে পাওয়া যাবে। আপনার নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে, বিভিন্ন পরিস্থিতি তৈরি হতে পারে:
দৃশ্যকল্প A: মূল চাবিকাঠি হারিয়ে যায়নি (উদাহরণস্বরূপ, সক্রিয় আবর্তন বা তথ্য ফাঁস)
আপনাকে অবশ্যই পুরানো এবং নতুন উভয় কী দিয়ে অ্যাপটি সাইন করতে হবে এবং নিম্নলিখিত যেকোনো একটি উপায়ে ব্যবহারকারীদের কাছে পৌঁছে দিতে হবে:
- অ্যাপের নতুন সংস্করণ প্রকাশ করা (আপনার আপডেট ম্যানিফেস্টে নতুন সংস্করণটি যোগ করা), অথবা
- আপনার হোস্ট করা
.swbnফাইলগুলোকে (যা আপনার আপডেট ম্যানিফেস্টে লিঙ্ক করা আছে) উভয় কী দিয়ে স্বাক্ষরিত করার জন্য আপডেট করা হচ্ছে। CLI টুলটি আপনাকে বিদ্যমানswbnবান্ডেলে আরেকটি স্বাক্ষর যোগ করার সুযোগ দেয়।
আপনার ব্যবহারকারীরা যাতে পরিবর্তনটি লক্ষ্য না করেন, তা নিশ্চিত করার জন্য গুগল কর্তৃক কী রোটেশন প্রক্রিয়া সম্পন্ন হওয়ার আগেই এটি করতে হবে।
দৃশ্যকল্প বি: চাবিটি হারিয়ে গেছে
যেহেতু হারিয়ে যাওয়া কী দিয়ে অ্যাপটি সাইন করা যাচ্ছে না, তাই এই বিষয়টি আরও জটিল। কী রোটেশনের জন্য অনুরোধ করুন এবং পরবর্তী পদক্ষেপের জন্য আপনার গুগল প্রতিনিধির সাথে যোগাযোগ করুন। এই নির্দেশাবলী অনুসরণ করে আপনাকে আপনার হোস্টেড বান্ডেলগুলিতে নতুন সিগনেচারগুলি যোগ করতে বলা হতে পারে।
চাবি ঘোরানোর প্রক্রিয়া
চাবি ঘোরানোর প্রক্রিয়ায় নিম্নলিখিত ধাপগুলো অন্তর্ভুক্ত রয়েছে:
| ধাপ | পদক্ষেপ | বিস্তারিত | দায়িত্বশীল |
|---|---|---|---|
| ১ | অনুরোধের মূল ঘূর্ণন | ডেভেলপার/পার্টনার, অ্যালাওলিস্টিং প্রক্রিয়ায় দেওয়া বিশ্বস্ত ইমেলের মাধ্যমে তাদের গুগল কন্ট্যাক্টের (পার্টনার ইঞ্জিনিয়ারিং বা অন্য কোনো যোগাযোগ ব্যক্তি) সাথে যোগাযোগ করেন এবং কারণ ব্যাখ্যা করে কী রোটেশন নির্দেশাবলীর জন্য অনুরোধ করেন। কী কম্প্রোমাইজড হওয়ার ক্ষেত্রে, প্রক্রিয়াটি দ্রুত করার জন্য আমরা পুরোনো এবং নতুন কী দিয়ে স্বাক্ষরিত বান্ডেলসহ আপডেট ম্যানিফেস্টটি সংযুক্ত করার পরামর্শ দিই। | ডেভেলপার / অংশীদার |
| ২ | অনুরোধকারীর প্রতি উত্তর | গুগল কন্টাক্ট অনুরোধকারীকে আরও নির্দেশনা ও প্রশ্ন প্রদান করে। এই ধাপে কয়েকবার আলোচনা ও মতবিনিময় হতে পারে। | গুগল যোগাযোগ |
| ৩ | ডেটা সরবরাহ করুন | ডেভেলপার/পার্টনার নির্দেশাবলী অনুসরণ করেন, যার মধ্যে অন্যান্য বিষয়ের পাশাপাশি নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত থাকতে পারে:
| ডেভেলপার / অংশীদার |
| ৪ | অনুরোধ প্রক্রিয়াকরণ এবং মতামত প্রদান | গুগল কী রোটেশন অনুরোধটি পর্যালোচনা করে এবং এক কর্মসপ্তাহের মধ্যে হয় তা অনুমোদন বা প্রত্যাখ্যান করে, অথবা আরও প্রশ্ন থাকলে ডেভেলপারের সাথে যোগাযোগ করে। অনুমোদনের পর, গুগল কী-টি রোটেশন করে এবং ফিডব্যাক প্রদান করে। | গুগল যোগাযোগ |
চ্যানেল এবং সংস্করণ পিনিং আপডেট করুন
অ্যাডমিনিস্ট্রেটররা কখনও কখনও কাস্টম আপডেট চ্যানেল বা ভার্সন পিনিং ব্যবহার করেন, যা তাদের ক্লায়েন্ট ডিভাইসে অ্যাপের ভার্সনগুলো পরিচালনা করতে সাহায্য করে। কী রোটেশনের পরে, অবৈধ কী দিয়ে ইনস্টল করা সমস্ত অ্যাপ অকার্যকর হয়ে যায় এবং ব্লক হয়ে যায়। এটি প্রতিরোধ করার জন্য, কী রোটেশনের আগে update_manifest.json এ দেওয়া লিঙ্কের অধীনে হোস্ট করা অ্যাপের পূর্ববর্তী ভার্সনগুলোকেও অবশ্যই আপডেট করতে হবে এবং দুটি সিগনেচার দিয়ে সাইন করতে হবে। যদি আপনার পুরানো কী হারিয়ে যায় এবং অ্যাপটি দুটি কী দিয়ে সাইন করা সম্ভব না হয়, তাহলে অবিলম্বে আপনার Google কন্টাক্টকে জানান। আমরা পরিস্থিতি সামাল দিতে আপনার সাথে কাজ করব, যাতে আপনার ব্যবহারকারীদের কাজের ধারায় কোনো ব্যাঘাত না ঘটিয়ে অ্যাপটি আপডেট করা যায়।
একাধিক কী ব্যবহার করে কীভাবে একটি বান্ডেল সাইন করবেন
এই বিভাগে বর্ণনা করা হয়েছে কিভাবে আপনি CLI টুলস অথবা Webpack/Rollup/Vite প্লাগইন কনফিগারেশনের মাধ্যমে একটি বা দুটি কী ব্যবহার করে আপনার ওয়েব বান্ডেলগুলিতে স্বাক্ষর করতে পারেন। CLI টুলস বিদ্যমান swbn বান্ডেলগুলিতে আরও একটি স্বাক্ষর যোগ করার সুযোগও দেয়, যা কী হারিয়ে গেলে বা পূর্ববর্তী হোস্টেড বান্ডেলগুলি আপডেট করার ক্ষেত্রে কার্যকর হতে পারে।
CLI টুলস
প্রথমে, npm ব্যবহার করে wbn-sign প্যাকেজটি ইনস্টল করা আছে কিনা তা নিশ্চিত করুন:
$ npm i wbn-sign
প্যাকেজটি শুধু বর্তমান ফোল্ডারে ইনস্টল না করে বিশ্বব্যাপী ইনস্টল করতে -g যোগ করুন।
একটি চাবি দিয়ে স্বাক্ষর করা
$ wbn-sign -i unsigned.wbn -o signed.swbn -k private.pem
দুটি চাবি দিয়ে স্বাক্ষর করা
$ wbn-sign sign webbundle.wbn old_key.pem new_key.pem -o signed.swbn --web-bundle-id <your-id-from-old-private>
--web-bundle-id <id> আর্গুমেন্টটি বাদ দেওয়া যেতে পারে; যদি old_key হয় সেই প্রথম কী যা দিয়ে অ্যাপটির প্রাথমিক সংস্করণ সাইন করা হয়েছিল, তাহলে বান্ডেল আইডিটি সেই কী থেকেই নেওয়া হবে। আপনি wbn-sign info signed.swbn কমান্ডের মাধ্যমে বান্ডেল আইডিটি যাচাই করতে পারেন।
বিদ্যমান বান্ডেলে একটি স্বাক্ষর যোগ করা
$ wbn-sign add-signature signed.swbn key3.pem --in-place
যদি আপনি বান্ডেলটি ওভাররাইড না করে একটি নতুন ডাবল-সাইনড বান্ডেল তৈরি করতে চান, তাহলে -o ব্যবহার করুন।
CLI টুল সম্পর্কে আরও তথ্য
CLI টুল ব্যবহারের বিষয়ে আরও তথ্যের জন্য npm wbn-sign পৃষ্ঠাটি দেখুন। বিকল্পভাবে, wnb-sign help.
ওয়েবপ্যাক প্লাগইন
একটি চাবি দিয়ে স্বাক্ষর করা
একটিমাত্র প্রাইভেট কী ব্যবহার করে আপনার IWA সাইন করার জন্য ওয়েবপ্যাক প্লাগইনটি কনফিগার করতে:
- এই কী থেকে সরাসরি প্রয়োজনীয় বেস ইউআরএল স্বয়ংক্রিয়ভাবে তৈরি করার জন্য
WebBundlePluginটি সেট আপ করুন। - আপনার স্বাক্ষরিত
.swbnফাইলটি তৈরি করতে একটিমাত্রNodeCryptoSigningStrategyব্যবহার করুন।
// key is parsePemKey(private.pem)
plugins.push(
new WebBundlePlugin({
baseURL: new WebBundleId(key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategy: new NodeCryptoSigningStrategy(key)
}
})
)
দুটি চাবি দিয়ে স্বাক্ষর করা
কী রোটেশনের সময় যখন আপনার অ্যাপ্লিকেশনে ডাবল-সাইন করার প্রয়োজন হয়:
- আপনার ব্যবহারকারীদের কাছে অ্যাপটির পরিচয় স্থিতিশীল রাখতে, আপনার আসল (
old_key) এর উপর ভিত্তি করেwebBundleIdএবং Base URL নির্ধারণ করুন। - আপনার পুরানো এবং নতুন উভয় প্রাইভেট কী প্রয়োগ করতে বিভিন্ন ধরনের স্বাক্ষর কৌশল ব্যবহার করুন।
// old_key is parsePemKey(old_private.pem)
// new_key is parsePemKey(new_private.pem)
plugins.push(
new WebBundlePlugin({
baseURL: new WebBundleId(old_key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public') },
output: 'signed.swbn',
integrityBlockSign: {
strategies: [
new NodeCryptoSigningStrategy(old_key),
new NodeCryptoSigningStrategy(new_key)
],
webBundleId: new WebBundleId(old_key).serialize()
}
})
)
রোলআপ বা ভাইট প্লাগইন
একটি চাবি দিয়ে স্বাক্ষর করা
ওয়েবপ্যাক সেটআপের মতোই, একটিমাত্র প্রাইভেট কী দিয়ে আপনার অ্যাপ্লিকেশন সাইন করার জন্য রোলআপ বা ভাইট প্লাগইন ব্যবহার করতে হলে, প্লাগইনটি একটি সিঙ্গেল সাইনিং স্ট্র্যাটেজি ব্যবহার করে এবং আপনার সাইন করা আউটপুট তৈরি করার জন্য প্রদত্ত কী থেকে বেস ইউআরএল (Base URL) ডিরাইভ করার কাজটি পরিচালনা করে।
// key is parsePemKey(private.pem)
plugins.push({
...wbn({
baseURL: new WebBundleId(key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategy: new NodeCryptoSigningStrategy(key)
}
}),
enforce: 'post'
})
দুটি চাবি দিয়ে স্বাক্ষর করা
Rollup বা Vite ব্যবহার করে আপনার অ্যাপ্লিকেশনটি ডাবল-সাইন করতে হলে, আপনাকে অবশ্যই প্লাগইনটিকে একাধিক কী গ্রহণ করার জন্য কনফিগার করতে হবে। এই কোড স্নিপেটটি strategies অ্যারে ব্যবহার করে পুরোনো এবং নতুন উভয় প্রাইভেট কী প্রয়োগ করে। এটি আপনার মূল, বিদ্যমান কী থেকে প্রাপ্ত Base URL এবং webBundleId স্পষ্টভাবে বজায় রাখার মাধ্যমে একটি নির্বিঘ্ন রূপান্তর নিশ্চিত করে।
// old_key is parsePemKey(old_private.pem)
// new_key is parsePemKey(new_private.pem)
plugins.push({
...wbn({
baseURL: new WebBundleId(old_key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategies: [
new NodeCryptoSigningStrategy(old_key),
new NodeCryptoSigningStrategy(new_key)
],
webBundleId: new WebBundleId(old_key).serialize()
}
}),
enforce: 'post'
})
উপসংহার
আপনার অ্যাপ্লিকেশনের ডিস্ট্রিবিউশনের নিরাপত্তা এবং ধারাবাহিকতা বজায় রাখার জন্য আপনার IWA-এর কী রোটেশন সফলভাবে পরিচালনা করা অত্যন্ত গুরুত্বপূর্ণ। আপনার নির্দিষ্ট পরিস্থিতি নির্বিশেষে (উদাহরণস্বরূপ, কী হারিয়ে গেছে কি না), বর্ণিত পদক্ষেপগুলি অনুসরণ করলে আপনার ব্যবহারকারীরা ন্যূনতম বাধার সম্মুখীন হবেন। Webpack, Rollup, বা Vite-এর জন্য প্রদত্ত CLI টুলস বা প্লাগইন কনফিগারেশন ব্যবহার করে, আপনি দক্ষতার সাথে আপনার অ্যাপের সিগনেচারগুলি পরিচালনা করতে এবং কী রোটেশন প্রক্রিয়াটি মসৃণভাবে সম্পন্ন করতে পারেন। জরুরি পরিস্থিতিতে, আপনার নির্ধারিত বিশ্বস্ত ইমেলের মাধ্যমে আপনার Google পরিচিতির সাথে দ্রুত যোগাযোগ করতে ভুলবেন না।