رفتن به مطلب

ارسال‌های توصیه شده

4.jpg

Certificate Pinning

💡 تعریف ساده: Certificate Pinning چیه؟
وقتی اپلیکیشن شما به یک سرور HTTPS وصل می‌شه، به‌طور معمول با گواهی دیجیتال (SSL/TLS certificate) اون سرور ارتباط برقرار می‌کنه. اما تو این حالت، اپ فقط بررسی می‌کنه که آیا اون گواهی توسط یک مرجع معتبر (CA) صادر شده یا نه.
مفهوم Certificate Pinning یکی از روش‌های مهم برای افزایش امنیت ارتباطات HTTPS توی اپلیکیشن‌هاست، مخصوصاً اپ‌های موبایل یا کلاینت‌هایی که به سرور متصل می‌شن.

🟥 حالا مشکل کجا پیش می آید؟!
اگه یه مهاجم (مثلاً در حمله man-in-the-middle) بتونه یه گواهی جعلی از یه CA معتبر بگیره، ممکنه کاربر بدون اینکه متوجه بشه، به سرور جعلی وصل بشه!

Man-in-the-Middle (یا MITM) یعنی چی؟
"مرد میانی" یه نوع حمله‌ست که توش یه هکر میاد وسط ارتباط بین دو نفر (مثلاً اپ شما و سرور) و بدون اینکه کسی بفهمه، اطلاعات رو می‌خونه، تغییر می‌ده یا دزدی می‌کنه.

✳️ مثال ساده:
شما با گوشی‌تون به یه سرور وصل می‌شی (مثلاً بانک یا اپ خودت).
یه هکر توی همون وای‌فای عمومی (کافه، فرودگاه...) میاد وسط ارتباطتون.
اطلاعات شما (مثل رمز، شماره کارت، پیام‌ها) قبل از اینکه به سرور برسه، می‌ره پیش اون هکر.

Certificate Pinning چیکار می‌کنه؟ 📣
با Certificate Pinning، شما به اپلیکیشن می‌گید:
فقط به این گواهی (یا کلید عمومی خاصی) اعتماد کن — حتی اگه گواهی معتبر دیگه‌ای ارائه شد، قبول نکن. یعنی گواهی یا کلید عمومی خاصی رو "سنجاق" (pin) می‌کنی به اپ.

انواع Pinning:

1-Public Key Pinning (کلید عمومی)
فقط کلید عمومی رو ذخیره می‌کنی، اگر گواهی عوض شد ولی کلید عمومی همونه، مشکلی نیست.

2-Certificate Pinning (گواهی کامل)
کل گواهی یا fingerprint اون رو ذخیره می‌کنی —اگه عوض بشه، حتی اگه قانونی باشه، اتصال رد می‌شه.

مزایای Certificate Pinning:
محافظت در برابر حملات MITM
امن‌تر از اعتماد کامل به CAهای عمومی

💣 معایب
اگه سرور گواهیش رو عوض کنه و اپ هنوز با گواهی قبلی pin شده باشه، اتصال fail می‌شه (مگر اپ به‌روز بشه)
در صورت پیاده‌سازی اشتباه، می‌تونه باعث قفل شدن اپ بشه

❇️ پیاده سازی در B4A
پیاده‌سازی Certificate Pinning در B4A ممکنه، ولی چون B4A سطح بالاتری داره و مستقیماً به کلاس‌های جاوای SSL/TLS دسترسی نمی‌ده، باید با کمی ترفند و استفاده از JavaObject یا inline Java کار رو انجام بدی.

1-برای پین کردن گواهی از OkHttpUtils2 + JavaObject استفاده کنید.
این دو کتابخونه رو توی b4a تیک بزنید.

2-دریافت گواهی SHA-256
از سایت مثل https://www.sslshopper.com یا با ابزار openssl استفاده کن
یک کلید این شکلی دریافت میکنید
openssl s_client -connect yourdomain.com:443 </dev/null 2>/dev/null | openssl x509 -noout -pubkey | openssl pkey -pubin -outform DER | openssl dgst -sha256 -binary | base64

3-این هم روش کلی استفاده در بیسیک فور اندروید هست که باید با توجه به پروژه تان آن را تغییر دهید.
Sub Process_Globals
    Private client As OkHttpClient
End Sub

Sub Globals
End Sub

Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        InitClientWithPinning
    End If

    Dim req As OkHttpRequest
    req.Initialize("job", "https://yourdomain.com")

    Dim job As OkHttpJob
    job.Initialize("job", Me)
    job.client = client
    job.Download2("https://yourdomain.com", Null)
End Sub

Sub InitClientWithPinning
    Dim jo As JavaObject
    jo.InitializeNewInstance("okhttp3.CertificatePinner$Builder", Null)
    jo = jo.RunMethod("add", Array("yourdomain.com", "sha256/AbCdEfGhIjK...=="))
    Dim pinner As JavaObject = jo.RunMethod("build", Null)

    Dim okClientBuilder As JavaObject
    okClientBuilder.InitializeNewInstance("okhttp3.OkHttpClient$Builder", Null)
    okClientBuilder.RunMethod("certificatePinner", Array(pinner))

    Dim okClient As JavaObject = okClientBuilder.RunMethod("build", Null)

    client.InitializeAcceptAll
    Dim joClient As JavaObject = client
    joClient.SetField("client", okClient)
End Sub

🔥 نکات مهم:
این کد فقط درخواست‌هایی که از job.client = client استفاده می‌کنن رو pin می‌کنه.
آدرس "yourdomain.com" باید دقیق باشه (مثل: api.yourapp.com)


پین‌ها ممکنه expire بشن؛ برای همین همیشه باید بدونی کی گواهی عوض می‌شه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
  • اضافه کردن...