Android Network Security Configuration (NSC) কী?
Network Security Configuration (NSC) হল অ্যান্ড্রয়েড ৭.০ (API Level 24) থেকে চালু একটি XML-ভিত্তিক ফিচার যা অ্যাপ ডেভেলপারদের কোড পরিবর্তন ছাড়াই নেটওয়ার্ক সিকিউরিটি পলিসি (ট্রাস্টেড CA, ক্লিয়ারটেক্সট ট্রাফিক, সার্টিফিকেট পিনিং, ডোমেন-স্পেসিফিক 룰) ডিক্লেয়ারেটিভভাবে ডিফাইন করতে দেয়। "ভার্সন ২.২" কোনো অফিশিয়াল ভার্সন নয়—হয়তো এটি কোনো লাইব্রেরি/প্রজেক্টের ইন্টারন্যাল ভার্সন বা অ্যান্ড্রয়েড ১২/১৩-এর আপডেটেড ফিচার সেটকে বোঝাচ্ছে।
network_security_config.xml ফাইল Струкচার
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" /> <!-- System CAs -->
<certificates src="user" /> <!-- User-added CAs (Debug Only) -->
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">example.com</domain>
<domain includeSubdomains="true">api.example.com</domain>
<trust-anchors>
<certificates src="@raw/my_custom_ca" /> <!-- Custom CA (res/raw/) -->
</trust-anchors>
<pin-set expiration="2025-01-01">
<pin digest="SHA-256">Base64EncodedSPKIHash1</pin>
<pin digest="SHA-256">Base64EncodedSPKIHash2</pin> <!-- Backup Pin -->
</pin-set>
</domain-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" /> <!-- Debug build-এ User CA ট্রাস্ট -->
</trust-anchors>
</debug-overrides>
</network-security-config>
ম্যানিফেস্টে রেজিস্টার করুন (AndroidManifest.xml)
<application
android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
মূল ফিচারস ও আট্রিবিউটস
| এলিমেন্ট/অ্যাট্রিবিউট | কার্য | সিকিউরিটি ইম্প্যাক্ট |
|---|---|---|
cleartextTrafficPermitted="false" | HTTP (Plaintext) ট্রাফিক ব্লক করে (Default: false API 28+) | MITM, ইভসড্রপিং রোধে। প্রোডাকশনে সবসময় false রাখুন। |
<trust-anchors> | কোন CA-গুলো ট্রাস্ট করবে (system, user, @raw/resource) | সেলফ-সাইনড সার্টিফিকেট বা প্রাইভেট PKI সাপোর্ট। |
<pin-set> | HPKP (HTTP Public Key Pinning) - SPKI হ্যাশ পিনিং | CA কমপ্রোমাইজ হলেও MITM রোধে (Backup Pin বাধ্যতামূলক)। |
<domain-config> | নির্দিষ্ট ডোমেনের জন্য আলাদা রুল | গ্রানুলার কন্ট্রোল (API এন্ডপয়েন্ট vs জেনারেল ব্রাউজিং)। |
<debug-overrides> | Debug Build-এ User CA ট্রাস্ট ( 찰লস/বর্প স্যুট টেস্টিং এর জন্য) | রিলিজ বিল্ডে অপ্রভাবিত (সুরক্ষিত)। |
CleartextTrafficPermitted সমস্যা ও সমাধান
Error: Cleartext HTTP traffic to example.com not permitted
- কারণ: Android 9 (API 28+) ডিফল্টভাবে HTTP ব্লক করে।
- সমাধান ১ (সঠিক): সার্ভারে HTTPS/TLS এনাবল করুন (Let's Encrypt ফ্রি সার্টিফিকেট)۔
- সমাধান ২ (টেম্পোরারি/ডেভ): NSC-এ
cleartextTrafficPermitted="true"সেট করুন স্পেসিফিক ডোমেনের জন্য। - সমাধান ৩ (ম্যানিফেস্টে - ডেপ্রিকেটেড):
android:usesCleartextTraffic="true"(API 28+ এ NSC প্রাধান্য পায়)।
Flutter / React Native / Xamarin এ NSC ব্যবহার
- Flutter:
android/app/src/main/res/xml/network_security_config.xmlতৈরি করুন →AndroidManifest.xml-এ<meta-data android:name="io.flutter.network-policy" android:resource="@xml/network_security_config"/>যোগ করুন (Flutter 3.7+ নেটিভ সাপোর্ট)。《 - React Native: নেটিভ অ্যান্ড্রয়েড মডিউলে NSC ফাইল যোগ করুন (সামান্য পদ্ধতি)।
সেরা অনুশীলন (Best Practices)
- প্রোডাকশনে সবসময়
cleartextTrafficPermitted="false"(Base Config-এ)। - Certificate Pinning (Pin Set) ব্যবহার করুন ক্রিটিক্যাল API এন্ডপয়েন্টের জন্য (Backup Pin সহ)।
- Custom CA শুধু জরুরি হলে (Enterprise মিডলবক্স, ইন্টারন্যাল API) ব্যবহার করুন।
- Debug Overrides শুধু Debug Build-এ (User CA ট্রাস্ট প্রোডাকশনে ন أبدًا)।
- Pin Expiration Date সেট করুন (সার্টিফিকেট রিনিউয়েলের আগে অ্যাপ আপডেট করতে হবে)।
- Network Security Config টেস্ট করুন:
adb shell dumpsys network_security_config <package_name>।