kendinden imzalı sertifika yükleme iddiaları başarılı, ancak android sertifika yokmuş gibi davranıyor


17

Android 4.3'te web sunucum için otomatik olarak imzalanan sertifikayı yüklemeye çalışıyorum. SD kartın kökünde .crt dosyası var (aslında yuvada SD kartım olmadığı için benzetiliyor).

Sertifikayı yüklemek için Ayar -> Genel -> Güvenlik -> Kimlik Bilgisi Deposu -> Cihaz deposundan yükle kısmına gidiyorum.

Sertifika adını (dosya adı eksi .crt uzantısını) değiştirebildiğim (ancak yapamadığım), bir "kullanılan" VPN ve uygulamalarla aşağı çek "ve alt kısımdaki metni gösteren bir iletişim kutusu alıyorum "Paket içeriği: bir kullanıcı sertifikası" bildiren iletişim kutusunun Her şey yolunda görünüyor, bu yüzden "Tamam" ı tıklıyorum. İletişim kutusu kaybolur ve "[ad] kurulu" ifadesiyle bir tost mesajı açılır.

Ben hemen "Güvenilir kimlik bilgileri ve" Kullanıcı "seçerseniz Ben orada hiçbir şey yok! Yeni sertifika da" Sistem "altında değil ama ben orada beklemek olmaz. Bundan sonra bir tarayıcıya gidip benim gitmek deneyin web sitesinde, yine de sitenin sertifikası güvenilir değil uyarısı alıyorum.Ayrıca yeniden başlatmayı denedim, ama bir fark yaratmıyor.

Neyi yanlış yapıyorum? Hata mesajlarının eksiksiz olmaması yararlı değildir. Sertifikamın yanlış biçimde olması mümkün mü? Sunucunun ssl dizininde .crt dosyasını kullanarak denedim ve DER biçimine dönüştürmeyi denedim.

Güncelleme: Android'in sertifikaların p12 formatında olmasını gerektirdiği bir yerde okudum, bu yüzden aşağıdaki komutu kullanarak Apache2 sertifikasını p12'ye dönüştürdüm:

openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12

Daha sonra yukarıdaki adımları tekrarladım, aynı başarı mesajını aldım ve sertifikayı kullanıcı kimlik bilgilerinde hala görmedim ve mobil tarayıcıdan güvenilmeyen sertifika hatasını alıyorum.

Yanıtlar:


19

Benim için çalışan bir yöntem açıklayan bu siteyi bulana kadar, Android'i sertifikayı gerçekten yüklemeye almakla aynı sorunu yaşadım . Aşağıdaki adımlara kadar kaynar:

  1. CA olarak etkinleştirilen ve v3_req uzantılarına sahip özel bir anahtar ve genel x509 sertifikası oluşturun:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca

  2. Sertifikayı Android tarafından anlaşılan DER biçimine dönüştürün:

    sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt

  3. my_site.der.crtAndroid cihazınıza ulaşmak için herhangi bir yöntem kullanın - Dosyanın web sunucum tarafından barındırılmasını ve Android tarayıcısı üzerinden indirilmesini kolay buldum, bu da otomatik olarak yüklemenizi sağlar.

Adım 1'in ikiye bölünmesini isterdim (1a. Özel anahtar ve 1b. Genel sertifika üretimi), bunun nasıl yapılacağını araştırmak için çok fazla yatırım yapmadım. Eğer işe yarayan bir yol bulduysanız lütfen bir yorumda bana bildirin, teşekkürler.

(Bir yorum eklemek yerine, bu gerçekten gelecekteki referans için cevabın bir parçası olarak hissediyorum, bu yüzden ben düzenliyorum. - Michael)

CA olarak etkinleştirilmiş bir sertifika oluşturmak yerine, kendinden imzalı bir CA oluşturdum ve mevcut anahtarımı / csr'ımı yeni CA ile yeniden imzaladım. Sonra kendinden imzalı CA'yı Android ve voila'ya ekledim! İşe yaradı!

Kendinden imzalı CA oluşturma:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

Anahtarın oluşturulmasından elde ettiğim mevcut bir CSR'yi yeniden imzalama

openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649

Şimdi ikinci komutunuzun değiştirilmiş bir formunu kullanarak CA sertifikasını DER formuna dönüştürdüm:

openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt

Bununla ilgili en güzel şey, şimdi yeni kendinden imzalı CA ile yeniden imzalanan ek güvenilmeyen sertifikalara, başka bir şey yüklemeye gerek kalmadan yeni CA'nın yüklü olduğu cihazdan artık herhangi bir cihazda güvenilecektir. Bu, üzerinde kontrol sahibi olmadığınız sitelere güvenme sorununu tam olarak çözmez, ancak dahili bir sunucu veya başka bir şey için BT departmanınız üzerinde herhangi bir etkiye sahip olmanız (örneğin) daha kolay olabilir.


1
Zaten yüklemem gereken sertifikam var, bu yüzden 2. adımı denedim ve yükleme işleminde başarılı olduğunu iddia ettikten sonra hala Kullanıcı Güvenilir Kimlik Bilgilerinde görünmüyor ve Chrome yeniden başlatıldıktan sonra "güvenilmeyen site" hatasını gösteriyor.
Michael

1
Android için v3_req uzantısıyla ilgili ve CA olarak etkinleştirilen bir sertifika olabilir mi? Varsa, yüklemek istediğim tüm sertifikalar üzerinde denetime sahip olmadığım için, varolan bir sertifikayı alıp bu bilgileri ona eklemek için kullanabileceğim bir komut var.
Michael

3
Önceki sorumun ilk yarısını yanıtlamak için, bağladığınız sayfayı okudum ve sorun, Android'in kendinden imzalı sertifikaları yüklemeyi reddettiği (ancak kendinden imzalı CA'lar değil) olduğu anlaşılıyor. Bu, belgelenmemiş gibi görünüyor ve Android'in yüklemeyi taklit ettiği gerçeği daha da kötüleşiyor. Ancak soru, eğer kontrol sahibi olmadığım kendinden imzalı bir sertifikaya sahipsem, yükleyebilmem için bunu "CA" olarak tanımlamanın bir yolu var mı?
Michael

1
@ Umarım umursamıyorsunuz, cevabınızı gerçekten cevabın bir parçası olduğu için yorumlara eklemek yerine çözümümü içerecek şekilde düzenleyeceğim.
Michael

1
Varolan.csr imzalama isteğinin nasıl oluşturulduğunu anlamıyorum. Bu adım adım öğretici için tam bir eksik noktası olduğunu düşünüyorum.
cguenther
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.