Saya mencoba untuk terhubung ke kotak IIS6 menjalankan 256bit SSL cert GoDaddy, dan saya mendapatkan kesalahan:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Sudah berusaha untuk menentukan apa yang bisa menyebabkan itu, tetapi menggambar kosong sekarang.
Inilah cara saya terhubung:
HttpsURLConnection conn;
conn = (HttpsURLConnection) (new URL(mURL)).openConnection();
conn.setConnectTimeout(20000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
String tempString = toString(conn.getInputStream());
sumber
Berlawanan dengan jawaban yang diterima bahwa Anda tidak memerlukan manajer kepercayaan khusus, Anda harus memperbaiki konfigurasi server Anda!
Saya mengalami masalah yang sama saat menghubungkan ke server Apache dengan sertifikat dynadot / alphassl yang tidak diinstal dengan benar. Saya terhubung menggunakan HttpsUrlConnection (Java / Android), yang melempar -
Masalah sebenarnya adalah kesalahan konfigurasi server - mengujinya dengan http://www.digicert.com/help/ atau serupa, dan bahkan akan memberi tahu Anda solusinya:
"Sertifikat tidak ditandatangani oleh otoritas tepercaya (memeriksa terhadap root store Mozilla). Jika Anda membeli sertifikat dari otoritas tepercaya, Anda mungkin hanya perlu menginstal satu atau lebih sertifikat Menengah . Hubungi penyedia sertifikat Anda untuk bantuan melakukan ini untuk Anda platform server. "
Anda juga dapat memeriksa sertifikat dengan openssl:
openssl s_client -debug -connect www.thedomaintocheck.com:443
Anda mungkin akan melihat:
Verify return code: 21 (unable to verify the first certificate)
dan, sebelumnya dalam output:
Rantai sertifikat hanya akan berisi 1 elemen (sertifikat Anda):
... tetapi harus merujuk otoritas penandatangan dalam rantai kembali ke rantai yang tepercaya oleh Android (Verisign, GlobalSign, dll):
Petunjuk (dan sertifikat perantara) untuk mengonfigurasi server Anda biasanya disediakan oleh otoritas yang mengeluarkan sertifikat Anda, misalnya: http://www.alphassl.com/support/install-root-certificate.html
Setelah menginstal sertifikat perantara yang disediakan oleh penerbit sertifikat saya, saya sekarang tidak memiliki kesalahan saat menghubungkan menggunakan HttpsUrlConnection.
sumber
Anda dapat mempercayai sertifikat tertentu saat runtime.
Cukup unduh dari server, masukkan aset dan muat seperti ini menggunakan ssl-utils-android :
Dalam contoh di atas saya menggunakan
OkHttpClient
tetapiSSLContext
dapat digunakan dengan klien di Jawa.Jika Anda memiliki pertanyaan, jangan ragu untuk bertanya. Saya penulis perpustakaan kecil ini.
sumber
Pembaruan berdasarkan dokumentasi Android terbaru (Maret 2017):
Ketika Anda mendapatkan jenis kesalahan ini:
masalahnya bisa salah satu dari yang berikut:
Solusinya adalah mengajar
HttpsURLConnection
untuk memercayai serangkaian CA tertentu. Bagaimana? Silakan periksa https://developer.android.com/training/articles/security-ssl.html#CommonProblemsOrang lain yang menggunakan
AsyncHTTPClient
daricom.loopj.android:android-async-http
perpustakaan, silakan periksa Setup AsyncHttpClient untuk menggunakan HTTPS .sumber
Jika Anda menggunakan retrofit, Anda perlu menyesuaikan OkHttpClient Anda.
sumber
getUnsafeOkHttpClient()
di Kotlin: stackoverflow.com/a/60507560/2914140 .Membalas posting yang sangat lama. Tapi mungkin itu akan membantu pemula dan jika tidak ada yang berhasil.
Penjelasan: Saya tahu tidak ada yang mau penjelasan omong kosong; bukan solusinya. Namun dalam satu liner, Anda mencoba mengakses layanan dari mesin lokal Anda ke mesin jarak jauh yang tidak mempercayai mesin Anda. Anda meminta perlu mendapatkan kepercayaan dari server jauh.
Solusi: Solusi berikut ini mengasumsikan bahwa Anda memiliki kondisi berikut terpenuhi
Langkah:
Anda memerlukan file ekstensi .keystore untuk mendaftar aplikasi Anda. Jika Anda tidak tahu cara membuat file .keystore; kemudian ikuti bersama dengan bagian berikut ini. Buat file .keystore atau lewati ke bagian selanjutnya Sign Apk File
Buat file .keystore
Buka Android Studio. Klik menu atas Build> Hasilkan APK yang Ditandatangani. Pada jendela berikutnya klik Buat baru ... tombol. Di jendela baru, silakan masukkan data di semua bidang. Ingat dua bidang Kata Sandi yang saya sarankan harus memiliki kata sandi yang sama; jangan gunakan kata sandi yang berbeda; dan juga ingat save jalan di paling atas lapangan Key jalan toko: . Setelah Anda memasukkan semua bidang, klik tombol OK.
Masuk File Apk
Sekarang Anda perlu membangun aplikasi yang ditandatangani dengan file .keystore yang baru saja Anda buat. Ikuti langkah ini
Choose existing...
tombolKey store password
danKey password
bidang yang sama. Masukkan juga aliasbuild.gradle
file, Anda harus memilihBuild Types
danFlavors
.Build Types
memilihrelease
dari dropdownUntuk
Flavors
namun akan tergantung pada pengaturan Anda dibuild.gradle
berkas. Pilihstaging
dari bidang ini. Saya menggunakan pengaturan berikut ini dibuild.gradle
, Anda dapat menggunakan yang sama seperti milik saya, tetapi pastikan Anda mengubahapplicationId
ke nama paket AndaKlik dua
Signature Versions
kotak centang di bawah dan klikFinish
tombol.Hampir sampai:
Semua kerja keras dilakukan, sekarang gerakan kebenaran. Agar dapat mengakses server Staging yang didukung oleh proxy, Anda perlu membuat beberapa pengaturan di perangkat Android pengujian Anda yang sebenarnya.
Pengaturan Proxy di Perangkat Android:
Modify network
Advanced options
jika Anda tidak dapat melihatProxy Hostname
medanProxy Hostname
masukkan IP host atau nama yang ingin Anda sambungkan. Server staging khas akan dinamaistg.api.mygoodcompany.com
9502
Save
tombolnyaSatu Perhentian Terakhir:
Ingat kami membuat file apk yang ditandatangani di bagian Sign APK File . Sekarang adalah waktu untuk menginstal file APK itu.
adb install
name of the apk file
adb command not found
. Masukkan path lengkap sebagaiC:\Users\shah\AppData\Local\Android\sdk\platform-tools\adb.exe
install
name of the apk file
Saya harap masalahnya bisa diselesaikan. Jika tidak, silakan tinggalkan saya komentar.
Salam!
sumber
Pesan kesalahan yang saya terima mirip tetapi alasannya adalah bahwa sertifikat yang ditandatangani sendiri telah kedaluwarsa. Ketika klien openssl dicoba, itu memberi saya alasan yang diabaikan ketika saya memeriksa dialog sertifikat dari firefox.
Jadi secara umum, jika sertifikat ada di keystore dan "VALID" -nya, kesalahan ini akan padam.
sumber
TrustManager
dan menggunakan serangkaian kriteria yang berbeda. Tetapi di luar kotak, itulah yang harus Anda kerjakan.Saya memiliki masalah yang sama saat menghubungkan dari klien Android ke server Kurento. Server Kurento menggunakan sertifikat jks, jadi saya harus mengonversi pem ke itu. Sebagai input untuk konversi saya menggunakan file cert.pem dan itu menyebabkan kesalahan seperti itu. Tetapi jika menggunakan fullchain.pem alih-alih cert.pem - semuanya OK.
sumber
Gunakan https://www.ssllabs.com/ssltest/ untuk menguji domain.
Solusi Shihab Uddin di Kotlin.
sumber
Saya memiliki masalah yang sama dengan apa yang saya temukan adalah file .crt sertifikat yang saya berikan tidak memiliki sertifikat perantara. Jadi saya bertanya semua file .crt dari admin server saya, lalu menyatukannya dalam urutan terbalik.
Ex. 1. Root.crt 2. Inter.crt 3. myCrt.crt
di windows saya menjalankan salinan Inter.crt + Root.crt newCertificate.crt
(Di sini saya mengabaikan myCrt.crt)
Kemudian saya memberikan file newCertificate.crt ke dalam kode melalui inputstream. Kerja selesai.
sumber
Kesalahan anchor Trust dapat terjadi karena banyak alasan. Bagi saya itu hanya karena saya mencoba mengakses
https://example.com/
daripadahttps://www.example.com/
.Jadi, Anda mungkin ingin memeriksa ulang URL Anda sebelum mulai membangun Trust Manager Anda sendiri (seperti yang saya lakukan).
sumber
Di ponsel Gingerbread, saya selalu mendapatkan kesalahan ini:,
Trust Anchor not found for Android SSL Connection
bahkan jika saya setup untuk mengandalkan sertifikat saya.Berikut adalah kode yang saya gunakan (dalam bahasa Scala):
dan di sini adalah kode koneksi:
Pada dasarnya, saya mengatur agar mempercayai sertifikat khusus saya. Jika itu gagal, maka saya menonaktifkan keamanan. Ini bukan pilihan terbaik, tetapi satu-satunya pilihan yang saya tahu dengan telepon tua dan kereta.
Kode contoh ini, dapat dengan mudah diterjemahkan ke dalam Java.
sumber
Dalam kasus saya ini terjadi setelah pembaruan ke Android 8.0. Sertifikat yang ditandatangani sendiri oleh Android ditetapkan untuk dipercaya menggunakan algoritma tanda tangan SHA1withRSA. Beralih ke sertifikat baru, menggunakan algoritme tanda tangan SHA256 dengan RSA memperbaiki masalah.
sumber
Saya tahu bahwa Anda tidak perlu mempercayai semua sertifikat, tetapi dalam kasus saya, saya mengalami masalah dengan beberapa lingkungan debugging di mana kami memiliki sertifikat yang ditandatangani sendiri dan saya membutuhkan solusi kotor.
Yang harus saya lakukan adalah mengubah inisialisasi
sslContext
di mana
trustAllCerts
diciptakan seperti ini:Semoga ini berguna.
sumber
Hostname '192.168.0.16' was not verified
. Saya sedang menguji webapi saya melalui debugger saya (IIS Express) secara lokal. Adakah cara untuk memperbaikinya? Terima kasih :)Saya memiliki masalah yang sama dan saya sepenuhnya mengesampingkan strategi mempercayai semua sumber.
Saya berbagi di sini solusi saya diterapkan pada aplikasi yang diimplementasikan di Kotlin
Saya pertama-tama akan merekomendasikan menggunakan situs web berikut untuk mendapatkan informasi tentang sertifikat dan validitasnya
Jika tidak muncul sebagai 'Penerbit yang Diterima' di toko kepercayaan default Android , kita harus mendapatkan sertifikat itu dan memasukkannya ke dalam aplikasi untuk membuat toko kepercayaan khusus
Solusi ideal dalam kasus saya adalah membuat Trust Manager tingkat tinggi yang menggabungkan custom dan toko kepercayaan default Android
Di sini ia memperlihatkan kode tingkat tinggi yang digunakan untuk mengkonfigurasi OkHttpClient yang ia gunakan dengan Retrofit.
Dengan cara ini, saya bisa berkomunikasi dengan server dengan sertifikat yang ditandatangani sendiri dan dengan server lain dengan sertifikat yang dikeluarkan oleh entitas sertifikasi tepercaya
Ini dia, saya harap ini bisa membantu seseorang.
sumber
Saya tahu ini adalah artikel yang sangat lama, tetapi saya menemukan artikel ini ketika mencoba menyelesaikan masalah anchor trust saya. Saya telah memposting bagaimana saya memperbaikinya. Jika Anda telah menginstal CA Root, Anda harus menambahkan konfigurasi ke manifes.
https://stackoverflow.com/a/60102517/114265
sumber
sumber
Saya juga menghadapi masalah yang sama. Saya hanya menghapus hhtps ke http, seperti
final public static String ROOT_URL = "https://example.com";
untukfinal public static String ROOT_URL = "http://example.com";
Akhirnya, saya memecahkan masalah ini.
sumber