این دومین قسمت از سری مقالات " آموزش کاربردی شبکه در اندروید " است که ما میخواهیم در مورد لایه شبکه با دید متفاوتی صحبت کنیم، که معمولاً زیاد به آن پرداخته میشود، زیرا کار با شبکه در اندروید دشوار است، با چندین carriers، محتوای غنی و متفاوت، پخش جریانی(streaming) و همه این موارد باید بدون از دست دادن جزئیات به دست کاربران برسد.
- بخش اول – Http و لایه شبکه
- بخش دوم – TLS, Certificates, Pinning
- بخش سوم – احراز هویت و رهگیرها(interceptors)
- بخش چهارم – عملکرد، افزونگی و همزمانی
- بخش پنجم – تست و ادغام
این قسمت دوم از این سری از مقالات است "آموزش کاربردی شبکه در اندروید" است، که قصد داریم در مورد گواهینامهها، TLS، و منطق pinning صحبت کنیم.
TLS
Transport Layer Security(TLS) پروتکل جانشین SSL است. TLS نسخه بهبود یافته TLS است. کار آن تقریباً مشابه SSL و با استفاده از رمزگذاری برای محافظت از انتقال دادهها و اطلاعات انجام میشود. این دو اصطلاح اغلب به جای هم استفاده میشوند، اگرچه SSL هنوز هم به طور گستردهای استفاده میشود. برای این نگه داشتن برنامه شما به یک گواهینامه SSL نیاز دارید، معمولاً سرور شما باید دارای یک کلید خصوصی و یک کلید عمومی باشد، برنامه و سرور شما یک handshake انجام میدهند، سرور از یک کلید خصوصی که از گواهینامهای که با public-key cryptography امضا شده است استفاده میکند. این در چند سال اخیر تغییرات زیادی داشته است، زیرا شما برای استفاده از TLS به پروتکل Http نیاز دارید و هر نسخه Http به معنی نسخه جدید TLS است.
Http/1.1 با TLS
در این نسخه جریانهای TLS را معرفی میکند، که تقریباً هر درخواستی که شما در این استاندارد ایجاد میکنید دارای جریانها و بستههای TCP است. TCP یک پروتکل اتصالگرا است به این معنی که ابتدا یک اتصال به گیرنده برقرار میکند و سپس دادهها را به بخشهایی که (PDU برای لایه حمل و نقل) توسط بستههای IP حمل میشود ارسال میکند.
Http/2 با TLS
از اتصال چندگانه TCP/IP برای همزمان چندین درخواست Http، محدود کردن ایجاد/حذف میزان اضافه بار اتصالات استفاده میکند. همچنین احتمالاً بزرگترین تغییر این است که درخواست/پاسخ Http به یک قطعه داده تبدیل میشود (یک پیام) که به تعداد تکههای گسسته تقسیم میشود، با اندازه قطعه کدگذاری شده در یک فریم، به عنوان مثال header در یک فریم و data در یک فریم دیگر است.
Http/3 با TLS
در این نسخه UDP معرفی شد که یک پروتکل حمل و نقل بدون اتصال است (دقیقاً مانند IP) که بدون راه اندازی اتصال فقط ارسال پیامهای دیتاگرام به لایه IP را انجام میدهد. QUIC فقط یک handshake است که تایید اعتبار در نقاط پایان و همچنین مذاکره در مورد پارامترهای رمزگذاری را فراهم میکند، QUIC فرمت فریم بندی خاص خود را دارد در حالی که از همان پیام TLS handshake استفاده میکند.
در قسمت قبلی این سری در مورد OkHttpClient برای تولید HttpClient صحبت کردیم، که همچنین میتوانیم یک لایه TLS را به روش ساده به آن اضافه کنیم.
تعداد زیادی CHipherSuite در OkHttp وجود دارد، همه آنها دادهها را رمزگذاری میکنند اما هرکس آنها را به روش متفاوتی ساخته است، بنابراین قبل از انتخاب یکی از آنها به صورت تصادفی، فرایند را در نظر داشته باشید!
گواهینامهها
اول از همه ما باید در مورد گواهینامهها صحبت کنیم، آنها برای تایید مالکیت یک کلید عمومی استفاده میشوند، گواهینامههای TLS یک نوع گواهینامه دیجیتال است که توسط یک سازمان صادر میشود، آنها تقریباً تایید میکنند که FakeCompany.com متعلق به شخصی که میگوید مالک آن است.
اطلاعات بیشتر در مورد پیاده سازی را میتوانید در این پست پیدا کنید، که ما در مورد چگونگی پیاده سازی گواهینامهها با استفاده از keystore برای ایمن نگه داشتن آن از چشم و پیامدهایی که در مورد کاربران شما میدهد بحث خواهیم کرد.
Certificate Pinning
اگر صدور گواهینامه به شما امکان تایید مالکیت بدهد، باید راهی برای اتصال یک سرویس به یک کلید خاص وجود داشته باشد، و هنگامی که یک گواهی ایجاد شد، برای همیشه به سرویس پین میشود، به این Certificate pinning میگویند.
برای پین کردن یک گواهی محدودیتهایی وجود دارد، به خصوص به این دلیل که شما توانایی مهاجرت بین گواهیهای مختلف را محدود میکنید، اگر گواهینامه خود را پین کنید، مهندسان DevOps نمیتوانند گواهی TLS را بروز کنند.
این همه مباحث مربوط به این قسمت بود، برای قسمت بعد در مورد احراز هویت و interceptorها صحبت خواهیم کرد.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید