Cryptology Academy · Pelajaran

Pemasangan Pin Sijil dalam Aplikasi Mudah Alih dan Desktop

Laksanakan pemasangan pin bergaya HPKP dan TrustKit serta fahami risiko operasi pemasangan pin.

Pelajaran 3 daripada 413 langkah

Pemasangan Pin Sijil dalam Aplikasi Mudah Alih dan Desktop ialah pelajaran Cryptology Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Cryptology Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Cryptology Academy merangkumi sejumlah 4 pelajaran.

Mengapa Pengikatan Sijil Wujud

TLS standard mempercayai mana-mana sijil yang ditandatangani oleh mana-mana daripada kira-kira 150 CA akar yang dipasang lebih awal dalam OS. Jika mana-mana CA akar terjejas atau dipaksa, penyerang boleh mendapatkan sijil untuk mana-mana domain dan memintas trafik TLS. Pengikatan sijil mengehadkan kepercayaan kepada sijil atau kunci awam tertentu, tanpa mengira CA yang menandatanganinya. Aplikasi yang menggunakan pengikatan menolak sambungan kepada pelayannya melainkan pelayan mengemukakan sijil atau kunci yang tepat seperti dijangka. Perlindungan ini amat bernilai bagi aplikasi mudah alih kerana pengguna tidak dapat memeriksa trafik rangkaian dan penyelesaian MDM korporat mungkin memasang akar CA perusahaan.

Jenis Ikatan: Sijil berbanding Kunci Awam berbanding SPKI

Terdapat tiga tahap ketelitian pengikatan: (1) Ikatan sijil penuh — sijil yang dikodkan DER dengan tepat mesti sepadan. Ini paling mudah rosak: ia gagal pada setiap pembaharuan sijil. (2) Ikatan kunci awam — hanya bait SubjectPublicKeyInfo (SPKI) dibandingkan. Ia kekal berfungsi selepas pembaharuan sijil jika pasangan kunci yang sama dikekalkan. (3) Cincangan SPKI — simpan SHA-256(SPKI), bukannya kunci mentah. Inilah pendekatan HTTP Public Key Pinning (HPKP) dan Android Network Security Config. Pengikatan kunci awam / SPKI lebih disukai: ia kekal berfungsi selepas putaran CA dan pembaharuan sijil, sambil tetap mengesan MITM dengan pasangan kunci yang berbeza.

Konfigurasi Keselamatan Rangkaian Android

Android (API 24+) menyediakan mekanisme pengikatan deklaratif melalui XML Network Security Config. Fail res/xml/network_security_config.xml menetapkan ikatan bagi setiap domain: pin-set dengan digest="SHA-256" dan cincangan SPKI yang dikodkan dalam base64. Aplikasi merujuk fail ini dalam AndroidManifest.xml melalui android:networkSecurityConfig. Android menguatkuasakan ikatan bagi semua sambungan HTTP yang dibuat melalui HttpsURLConnection standard dan OkHttp (apabila menggunakan pengurus kepercayaan platform). pin-set memerlukan sekurang-kurangnya satu ikatan sandaran (kunci atau ikatan CA yang berbeza) bagi mencegah kehilangan akses jika kunci utama terjejas. Tamat tempoh ikatan (atribut expiration) memaksa aplikasi dikemas kini sebelum ikatan menjadi lapuk.

Pengikatan Sijil iOS / macOS

Aplikasi iOS melaksanakan pengikatan dalam perwakilan NSURLSession. Kaedah perwakilan URLSession(_:didReceive:completionHandler:) menerima objek kepercayaan pelayan. Aplikasi memanggil SecTrustEvaluateWithError untuk mengesahkan rantaian, kemudian mengekstrak sijil daun dengan SecTrustGetCertificateAtIndex(trust, 0), mengeksport bait SPKI daripadanya, mencincangkannya dengan SHA-256 dan membandingkannya dengan ikatan yang disimpan. TrustKit (pustaka sumber terbuka) membalut corak ini dengan pengikatan berasaskan konfigurasi, yang menyokong berbilang ikatan, pemadanan subdomain dan mod laporan sahaja. App Transport Security (ATS) Apple berasingan daripada pengikatan — ATS menguatkuasakan versi minimum TLS tetapi tidak mengikat kunci.

HPKP: Pengikatan Kunci Awam HTTP (Tidak Digunakan Lagi)

HTTP Public Key Pinning (HPKP, RFC 7469) cuba menambahkan pengikatan untuk pelayar web melalui pengepala respons HTTP: Public-Key-Pins: pin-sha256="base64=="; max-age=5184000; includeSubDomains. Pelayar akan mengingati ikatan sepanjang tempoh max-age dan menolak sambungan kepada kunci yang tidak sepadan. HPKP tidak lagi digunakan oleh Chrome pada 2017 dan dialih keluar pada 2019 kerana kegagalan yang amat serius: satu kesilapan konfigurasi atau kehilangan kunci boleh menyebabkan pengguna terkunci daripada laman web secara kekal tanpa cara pemulihan. HPKP kini pada dasarnya sudah tidak digunakan dalam pelayar web; pengikatan pada peringkat aplikasi dalam aplikasi mudah alih masih berdaya maju kerana kemas kini aplikasi boleh menghantar ikatan baharu.

Pengikatan dalam OkHttp

OkHttp (yang digunakan secara meluas pada Android) menyokong pengikatan melalui CertificatePinner: CertificatePinner.Builder().add("api.example.com", "sha256/AAAA...==", "sha256/BBBB...==").build(). Ikatan kedua ialah ikatan sandaran. OkHttp mengesahkan bahawa sekurang-kurangnya satu ikatan sepadan dengan mana-mana sijil dalam rantaian pelayan — sijil daun, perantaraan atau akar. Ini membolehkan pengikatan pada CA perantaraan (kekal berfungsi selepas putaran sijil daun) atau pengikatan pada CA akar (kekal berfungsi selepas putaran sijil perantaraan). OkHttp melontarkan SSLPeerUnverifiedException dengan mesej yang berguna dan menyenaraikan cincangan SPKI sebenar pelayan, lalu memudahkan pengekstrakan ikatan semasa pembangunan.

Memintas Pengikatan: Teknik Penyerang

Pengikatan meningkatkan kesukaran pemintasan trafik tetapi tidak mustahil untuk dipatahkan. Teknik pintasan yang biasa pada peranti mudah alih: (1) Cangkuk Frida — menyuntik JavaScript ke dalam proses aplikasi untuk mencangkuk kaedah pengesahan ikatan dan mengembalikan true tanpa syarat. (2) Alat SSLUnpinning — skrip Frida/Objection automatik yang menyasarkan pustaka pengikatan biasa (TrustKit, OkHttp, SecTrust asli). (3) ROM tersuai — mendapatkan akses akar pada peranti dan mengubah suai timbunan TLS. (4) Pembungkusan semula — menyahhimpun APK, mengubah suai konfigurasi pengikatan dan membungkusnya semula dengan sijil baharu. (5) Penampalan memori — menampal baitkod pengesahan semasa masa jalan. Langkah pengurangan risiko: pengesanan peranti berakar atau yang telah melangkaui sekatan, pengeliruan kod dan pemeriksaan integriti (SafetyNet/App Attest).

Ikatan Sandaran dan Pemulihan Bencana

Risiko operasi terbesar pengikatan sijil ialah kehilangan akses yang disebabkan oleh sistem sendiri: jika kunci pengeluaran hilang atau sijil tamat tempoh dan sandaran tidak tersedia, pengguna terkunci sehingga kemas kini aplikasi dikeluarkan (berhari-hari hingga berminggu-minggu). Amalan terbaik: (1) Sentiasa ikat sekurang-kurangnya dua kunci — kunci semasa dan kunci sandaran yang dijana lebih awal serta disimpan di luar talian (HSM atau dalam persekitaran terasing daripada rangkaian). (2) Tetapkan tarikh tamat tempoh ikatan dan keluarkan kemas kini aplikasi sebelum tarikh tersebut. (3) Pantau kegagalan ikatan melalui mod laporan sahaja sebelum penguatkuasaan. (4) Kekalkan saluran kemas kini aplikasi kecemasan (semakan dipercepatkan) untuk insiden putaran ikatan. (5) Ikat pada peringkat CA perantaraan, bukan sijil daun, bagi membolehkan putaran sijil daun tanpa kemas kini aplikasi.

Pengikatan Aplikasi Desktop

Aplikasi desktop yang ditulis dalam Electron, Qt atau kod asli boleh melaksanakan pengikatan menggunakan API timbunan TLS masing-masing. Aplikasi Electron menggunakan peristiwa app.on("certificate-error") dan session.setCertificateVerifyProc() untuk melaksanakan pengesahan tersuai. Kod rangkaian Qt menggunakan QSslSocket dengan panggilan balik pengesahan tersuai. Aplikasi .NET menggunakan ServicePointManager.ServerCertificateValidationCallback. Aplikasi Windows asli menggunakan WinHTTP dengan pemeriksaan sijil secara manual. Aplikasi desktop menghadapi cabaran tambahan: pemintasan TLS pada peringkat OS melalui proksi korporat adalah lazim, dan pengguna mungkin menjangka kefungsian proksi berfungsi — maka diperlukan keputusan dasar tentang sama ada pengikatan hanya terpakai pada titik akhir tertentu.

Pengikatan dalam CI/CD dan Pengujian Automatik

Pengikatan sijil merumitkan pengujian automatik dan saluran CI/CD. Ujian penyepaduan yang membuat panggilan HTTPS sebenar kepada pelayan pementasan mesti menggunakan sijil ujian yang cincangan SPKI-nya diikat dalam konfigurasi ujian. Pendekatan: (1) Variasi binaan — binaan nyahpepijat/pementasan merangkumi ikatan pelayan pementasan; binaan keluaran mengikat pelayan pengeluaran. (2) Penggantian Network Security Config — Android membenarkan konfigurasi ikatan khusus nyahpepijat. (3) Pelayan olok-olok — memintas pada lapisan klien HTTP sebelum TLS, lalu memintas pengikatan sepenuhnya. (4) CA ditandatangani sendiri untuk CI — keluarkan sijil ujian daripada CA CI yang akarnya dipercayai hanya dalam binaan ujian. Jangan sesekali menghantar binaan yang pengikatannya dilumpuhkan dalam pengeluaran.

Pertimbangan Pascakuantum untuk Pengikatan

Ikatan sijil biasanya berupa cincangan kunci awam RSA atau EC. Apabila penghijrahan pascakuantum bermula, pelayan akan beralih kepada ML-DSA (CRYSTALS-Dilithium) atau kunci hibrid. Cincangan SPKI yang diikat akan berubah kerana jenis dan pengekodan kunci berubah. Aplikasi yang mengikat sijil daun atau kunci awam memerlukan kemas kini yang diselaraskan: (1) Keluarkan versi aplikasi baharu dengan cincangan SPKI pascakuantum sebagai ikatan sandaran sebelum penghijrahan pelayan. (2) Lengkapkan penghijrahan pelayan. (3) Keluarkan kemas kini untuk mengalih keluar ikatan klasik yang lama. Tempoh peralihan memerlukan penyelarasan yang teliti. Aplikasi yang mengikat CA perantaraan atau akar kurang terjejas — hanya kunci CA yang berubah, dan perubahan itu tidak semestinya berlaku mengikut jadual yang sama seperti sijil daun.

Kuiz Penyematan Sijil

Mengapakah penyematan cincangan SubjectPublicKeyInfo (SPKI) lebih diutamakan berbanding penyematan sijil penuh?

Ringkasan Penyematan Sijil

Penyematan sijil mengehadkan kepercayaan TLS kepada sijil atau kunci awam tertentu, lalu melindungi daripada pengompromian CA dan MITM. Penyematan cincangan SPKI (SHA-256 bagi SubjectPublicKeyInfo) lebih diutamakan berbanding penyematan sijil penuh kerana lebih tahan terhadap pembaharuan. Android menggunakan XML Konfigurasi Keselamatan Rangkaian; iOS menggunakan perwakilan URLSession dengan API SecTrust; OkHttp menyokong CertificatePinner. Sentiasa sertakan cincangan sandaran untuk mengelakkan aplikasi mengunci aksesnya sendiri. HPKP (pengepala HTTP pelayar) sudah tidak digunakan. Penyematan boleh dipintas melalui cangkuk Frida dan pengubahsuaian ROM. Penghijrahan kunci pascapengkuantuman memerlukan kemas kini aplikasi yang diselaraskan untuk mengemas kini cincangan SPKI.

Percuma untuk bermula

Pelajari Cryptology Academy dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
67
Pelajaran
261

Soalan Lazim

Adakah pelajaran “Pemasangan Pin Sijil dalam Aplikasi Mudah Alih dan Desktop” percuma?

Ya — teks penuh “Pemasangan Pin Sijil dalam Aplikasi Mudah Alih dan Desktop” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Cryptology Academy, tingkat taraf kepada CoddyKit PRO. Kursus Cryptology Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pemasangan Pin Sijil dalam Aplikasi Mudah Alih dan Desktop”?

Laksanakan pemasangan pin bergaya HPKP dan TrustKit serta fahami risiko operasi pemasangan pin. Anda berlatih Cryptology Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Cryptology Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Cryptology Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pemasangan Pin Sijil dalam Aplikasi Mudah Alih dan Desktop” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Cryptology Academy ini?

Ya. Setiap pelajaran Cryptology Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. TLS 1.3: 0-RTT, Data Awal dan Penyambungan Semula Sesi
  2. Corak Pelaksanaan TLS Bersama (mTLS)
  3. Pemasangan Pin Sijil dalam Aplikasi Mudah Alih dan Desktop
  4. Prestasi TLS: QUIC dan HTTP/3
← Kembali ke Cryptology Academy