Protokol https ialah protokol http+ssl Proses sambungan ditunjukkan dalam rajah di bawah:
Pelanggan menghantar permintaan https ke pelayan;
Selepas menerima permintaan, pelayan menjana kunci awam dan kunci peribadi. Kunci awam adalah bersamaan dengan kunci, dan kunci persendirian adalah bersamaan dengan kunci persendirian sahaja yang boleh membuka kandungan yang dikunci oleh kunci awam
Pelayan mengembalikan kunci awam (sijil) kepada pelanggan Kunci awam mengandungi banyak maklumat, seperti pihak berkuasa mengeluarkan sijil, masa tamat tempoh, dsb.;
Dengan cara ini, semua kandungan komunikasi antara klien dan pelayan boleh diperolehi.
Untuk menggunakan serangan man-in-the-middle, pelanggan mesti mempercayai sijil orang tengah Jika pelanggan tidak mempercayainya, kaedah serangan ini tidak akan berfungsi.
Sebab rampasan man-in-the-middle ialah sijil pelayan dan nama domain tidak disahkan atau pengesahan tidak lengkap Untuk kemudahan, kaedah pengesahan lalai rangka kerja sumber terbuka digunakan secara langsung untuk permintaan https
Seperti tampar
OKhttp3.0
Kaedah pencegahan:
Terdapat dua kaedah pencegahan
1. Untuk apl yang mempunyai keperluan keselamatan yang agak tinggi, sijil boleh dikunci dengan pra-benamkan sijil pada sisi pelanggan Komunikasi hanya dibenarkan apabila sijil pelanggan dan sijil pelayan benar-benar konsisten, seperti beberapa apl perbankan , kaedah ini menghadapi masalah, masalah tamat tempoh sijil Oleh kerana sijil mempunyai tempoh sah tertentu, apabila sijil prabenam tamat, ia hanya boleh diselesaikan dengan memaksa kemas kini atau memerlukan pengguna memuat turun sijil.
Ambil tampar sebagai contoh: pengesahan dilaksanakan seperti berikut
Buat SSLSocketFactory melalui sijil pra-benam;
private static SSLSocketFactory buildSSLSocketFactory(Context context, int certRawResId) { KeyStore keyStore = null; try { keyStore = buildKeyStore(context, certRawResId); } catch (KeyStoreException e) { e.printStackTrace(); } catch (CertificateException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = null; try { tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } SSLContext sslContext = null; try { sslContext = SSLContext.getInstance("TLS"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } try { sslContext.init(null, tmf.getTrustManagers(), null); } catch (KeyManagementException e) { e.printStackTrace(); } return sslContext.getSocketFactory();
Jana sambungan yang telah disahkan oleh SSL dan nama domain
2 Untuk apl dengan keperluan keselamatan am, anda boleh mengesahkan nama domain, kesahihan sijil, maklumat kunci sijil dan rantaian sijil
Ambil tampar sebagai contoh, tulis semula kaedah checkServerTrusted dalam HTTPSTrustManager, dan dayakan pengesahan nama domain yang kukuh
Banyak aplikasi pada masa ini menggunakan webview untuk memuatkan halaman H5 Jika pelayan menggunakan sijil yang dikeluarkan oleh CA yang dipercayai, lebihkan beban WebViewClient's onReceivedSslError() apabila webView.setWebViewClient(webviewClient Jika ralat sijil berlaku, hubungi pengendali. teruskan). akan mengabaikan ralat dan terus memuatkan halaman dengan masalah sijil Jika handler.cancel() dipanggil, ia boleh menamatkan pemuatan halaman dengan masalah sijil Jika terdapat masalah dengan sijil, pengguna boleh digesa untuk risiko dan biarkan pengguna memilih sama ada untuk memuatkan atau tidak Jika keselamatan diperlukan Tahapnya agak tinggi dan pemuatan halaman boleh ditamatkan secara langsung, mendorong pengguna bahawa persekitaran rangkaian berisiko:
.Tidak disyorkan untuk menggunakan handler.proceed() secara terus. Jika paparan web perlu mengesahkan sijil pelayan dengan kuat semasa memuatkan https, anda boleh menggunakan HttpsURLConnection untuk mengesahkan sijil dengan kuat dalam onPageStarted() untuk mengesahkan sijil pelayan Jika pengesahan tidak lulus, hentikan memuatkan halaman web. Sudah tentu, ini akan memperlahankan kelajuan memuatkan halaman web dan memerlukan pengoptimuman lanjut Kaedah pengoptimuman khusus adalah di luar skop perbincangan ini dan tidak akan diterangkan secara terperinci di sini.
Atas ialah kandungan terperinci Penjelasan terperinci tentang proses sambungan HTTPS dan serangan dan rampasan manusia di tengah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!