Saya telah menciptakan saya sendiri sertifikat CA dan sekarang saya ingin menginstalnya di Android Froyo perangkat (HTC Desire Z), sehingga perangkat mempercayai sertifikat saya.
Toko Android sertifikat CA di Jawa keystore pada /system/etc/security/cacerts.bks
. Saya menyalin file ke komputer saya, menambahkan sertifikat saya menggunakan portecle 1.5 dan mendorongnya kembali ke perangkat.
Sekarang, Android tampaknya tidak reload file secara otomatis. Saya baca di beberapa posting blog yang saya butuhkan untuk me-restart perangkat. Demikian hasil dalam file yang ditimpa dengan yang asli lagi.
Berikutnya saya mencoba untuk menginstal sertifikat dari kartu SD dengan menyalin dan menggunakan sesuai pilihan dari menu pengaturan. Perangkat memberitahu saya bahwa sertifikat yang telah diinstal, tapi rupanya itu tidak mempercayai sertifikat. Selain itu, ketika saya mencoba untuk menyalin keystore untuk komputer saya, saya masih menemukan saham asli cacerts.bks
.
Jadi, apa adalah cara yang tepat untuk menginstal saya sendiri sertifikat CA root pada Android 2.2 perangkat sebagai sertifikat terpercaya? Apakah ada cara untuk melakukan itu pemrograman?
Sebelum ke Android KitKat, anda harus membasmi perangkat anda untuk menginstal sertifikat baru.
Dari Android KitKat (4.0) hingga Nougat (7.0) it's mungkin dan mudah. Saya bisa menginstal Charles Web Debbuging Proxy cert saya un-perangkat berakar dan berhasil mengendus lalu lintas SSL.
Ekstrak dari http://wiki.cacert.org/FAQ/ImportRootCert
Sebelum versi Android 4.0, dengan Android versi Gingerbread & Froyo, ada satu read-only file ( /system/etc/security/cacerts.bks ) mengandung kepercayaan store dengan semua CA ('sistem') sertifikat terpercaya by default di Android. Kedua sistem aplikasi dan semua aplikasi yang dikembangkan dengan Android SDK menggunakan ini. Gunakan petunjuk ini untuk menginstal CAcert sertifikat di Android Gingerbread, Froyo, ...
Mulai dari Android 4.0 (ICS Android/'Ice Cream Sandwich', Android 4.3 'Jelly Bean' & Android 4.4 'KitKat'), sistem sertifikat terpercaya yang ada di (read-only) sistem partisi di folder '/system/etc/security/' sebagai file individual. Namun, pengguna sekarang dapat dengan mudah menambahkan mereka sendiri 'user' sertifikat yang akan disimpan di '/data/misc/gantungan kunci/certs-tambah'.
Sistem-instal sertifikat dapat dikelola pada perangkat Android dalam Pengaturan -> Keamanan -> Sertifikat -> 'Sistem'-bagian, sedangkan pengguna terpercaya sertifikat manged di 'User'-bagian yang ada. Ketika menggunakan user sertifikat terpercaya, Android akan memaksa pengguna perangkat Android untuk melaksanakan langkah-langkah keamanan tambahan: penggunaan kode PIN, pola-kunci atau password untuk membuka kunci perangkat yang wajib ketika pengguna disertakan sertifikat yang digunakan.
Menginstal CAcert sertifikat sebagai 'pengguna terpercaya'-sertifikat sangat mudah. Menginstal sertifikat baru sebagai 'sistem terpercaya'-sertifikat membutuhkan lebih banyak bekerja (dan membutuhkan akses root), tetapi memiliki keuntungan untuk menghindari Android lockscreen kebutuhan.
Dari Android N dan seterusnya itu mendapat littler lebih keras, melihat ini ekstrak dari Charles proxy web:
Sebagai Android N, anda perlu menambahkan konfigurasi untuk aplikasi anda dalam rangka untuk memiliki kepercayaan sertifikat SSL yang dihasilkan oleh Charles SSL Proxy. Ini berarti bahwa anda hanya dapat menggunakan SSL Proxy dengan aplikasi yang anda kontrol.
Dalam rangka untuk mengkonfigurasi aplikasi anda untuk percaya Charles, anda perlu menambahkan Keamanan Jaringan File Konfigurasi untuk aplikasi anda. File ini dapat override default sistem, yang memungkinkan aplikasi anda untuk mempercayai pengguna diinstal sertifikat CA (misalnya Charles Sertifikat Akar). Anda dapat menentukan yang ini hanya berlaku di debug membangun aplikasi anda, sehingga produksi dibangun menggunakan default trust profil.
Tambahkan file res/xml/network_security_config.xml untuk aplikasi anda:
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Kemudian tambahkan referensi ke file ini dalam aplikasi anda's terwujud, sebagai berikut:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
Saya menghabiskan banyak waktu mencoba untuk menemukan jawaban untuk ini (saya perlu Android untuk melihat StartSSL sertifikat). Kesimpulan: Android 2.1 dan 2.2 memungkinkan anda untuk mengimpor sertifikat, tetapi hanya untuk digunakan dengan wi-fi dan VPN. Tidak ada antarmuka pengguna untuk memperbarui daftar sertifikat akar terpercaya, tapi ada diskusi tentang menambahkan fitur itu. Tidak jelas apakah ada yang dapat diandalkan solusi untuk secara manual memperbarui dan mengganti cacerts.bks file.
Rincian dan link: http://www.mcbsys.com/techblog/2010/12/android-certificates/. Di pos itu, lihat link untuk Android bug 11231-anda mungkin ingin menambahkan suara anda dan permintaan untuk bug itu.
Jika anda membutuhkan sertifikat untuk koneksi HTTPS yang dapat anda tambahkan .bks file sebagai bahan baku sumber daya untuk aplikasi anda dan memperpanjang DefaultHttpConnection sehingga sertifikat yang digunakan untuk koneksi HTTPS.
public class MyHttpClient extends DefaultHttpClient {
private Resources _resources;
public MyHttpClient(Resources resources) {
_resources = resources;
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
if (_resources != null) {
registry.register(new Scheme("https", newSslSocketFactory(), 443));
} else {
registry.register(new Scheme("https", SSLSocketFactory
.getSocketFactory(), 443));
}
return new SingleClientConnManager(getParams(), registry);
}
private SSLSocketFactory newSslSocketFactory() {
try {
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = _resources.openRawResource(R.raw.mystore);
try {
trusted.load(in, "pwd".toCharArray());
} finally {
in.close();
}
return new SSLSocketFactory(trusted);
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
Panduan terkait di sini mungkin akan menjawab pertanyaan asli tanpa memerlukan pemrograman khusus SSL konektor.
Sangat rinci bagaimana-untuk panduan tentang mengimpor sertifikat root yang benar-benar anda melalui langkah-langkah menginstal terpercaya sertifikat CA pada versi yang berbeda dari perangkat Android (antara perangkat lain).
Pada dasarnya anda'll perlu:
adb pull /system/etc/security/cacerts.bks cacerts.bks
Men-Download .crt file dari otoritas sertifikasi yang ingin anda izinkan.
Memodifikasi cacerts.bks file di komputer anda dengan menggunakan BouncyCastle Penyedia
Meng-Upload cacerts.bks file ke ponsel anda dan reboot.
Di sini adalah yang lebih rinci langkah demi langkah untuk update sebelumnya ponsel android: Bagaimana untuk pembaruan keamanan HTTPS certificate authority keystore pada pre-android 4.0 perangkat
Ada BANYAK solusi yang lebih mudah untuk ini daripada diposting di sini, atau di bidang benang. Jika anda menggunakan webview (seperti saya), anda dapat mencapai ini dengan menjalankan fungsi JAVASCRIPT di dalamnya. Jika anda tidak menggunakan webview, anda mungkin ingin untuk membuat sebuah tersembunyi untuk tujuan ini. Berikut ini's fungsi yang bekerja di hampir semua browser (atau webview) kickoff instalasi ca (umumnya melalui ruang os cert repositori, termasuk pada Droid). Menggunakan trik bagus dengan iframe. Hanya lewat url .crt file untuk fungsi ini:
function installTrustedRootCert( rootCertUrl ){
id = "rootCertInstaller";
iframe = document.getElementById( id );
if( iframe != null ) document.body.removeChild( iframe );
iframe = document.createElement( "iframe" );
iframe.id = id;
iframe.style.display = "none";
document.body.appendChild( iframe );
iframe.src = rootCertUrl;
}
UPDATE:
Iframe trik bekerja pada Droid dengan API 19 dan ke atas, tetapi versi yang lebih tua dari webview won't bekerja seperti ini. Ide umum masih bekerja meskipun hanya download/membuka file dengan webview dan kemudian membiarkan os mengambil alih. Ini mungkin lebih mudah dan lebih universal solusi (sebenarnya di jawa sekarang):
public static void installTrustedRootCert( final String certAddress ){
WebView certWebView = new WebView( instance_ );
certWebView.loadUrl( certAddress );
}
Perhatikan bahwa instance_ adalah referensi untuk Kegiatan tersebut. Ini bekerja sempurna jika anda tahu url untuk cert. Dalam kasus saya, namun, saya menyelesaikan yang dinamis dengan perangkat lunak sisi server. Saya harus menambahkan jumlah yang wajar kode tambahan untuk mencegat url redirection dan panggilan ini dalam cara yang tidak menyebabkan kecelakaan berdasarkan threading komplikasi, tapi aku tidak't menambahkan semua yang kebingungan di sini...
Apa yang saya lakukan untuk akanmampu menggunakan startssl sertifikat itu cukup mudah. (pada ponsel berakar)
Saya menyalin /system/etc/security/cacerts.bks ke sdcard
Download http://www.startssl.com/certs/ca.crt dan http://www.startssl.com/certs/sub.class1.server.ca.crt
Pergi ke portecle.sourceforge.net dan berlari portecle langsung dari halaman web.
Membuka cacerts.bks file dari sdcard (masuk apa-apa ketika diminta untuk password)
Pilih impor di portacle dan membuka sub.class1.server.ca.crt, im kasus saya itu sudah memiliki ca.crt tapi mungkin anda perlu menginstal itu juga.
Menyelamatkan keystore dan disalin baxck ke /system/etc/security/cacerts.bks (saya membuat backup dari file yang pertama hanya dalam kasus)
Reboot ponsel saya dan sekarang saya bisa kunjungi situs saya thats menggunakan startssl sertifikat tanpa kesalahan.
Berikut ini's alternatif solusi yang benar-benar menambah sertifikat untuk dibangun di daftar default sertifikat: https://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https/6378872#6378872
Namun, hal itu hanya akan bekerja untuk aplikasi anda. Ada's tidak ada cara untuk pemrograman melakukannya untuk semua aplikasi pada pengguna's perangkat, karena itu akan menjadi resiko keamanan.
Langkah-langkah ini bekerja untuk saya:
Selain itu, saya menemukan opsi ini yang saya tidak perlu mencoba sendiri tapi tampak mudah untuk mengikuti:
Akhirnya, hal itu mungkin tidak relevan tetapi, jika anda mencari untuk membuat dan setup sertifikat yang ditandatangani sendiri (dengan mkcert) untuk PWA aplikasi (website) yang diselenggarakan pada IIS Web server lokal, saya mengikuti halaman ini:
Terima kasih dan semoga membantu!! :)