Sertifikaya PC güveniyor, ancak Android güvenmiyor


82

Bu sabahtan beri, sertifikama Android'de artık güvenilmiyor ve ardından uygulamam artık bağlanamıyor:

 Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
 return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL
 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
    at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93)
    at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:591)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:807)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:781)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:770)

Google Chrome'da (PC'de) denersem sorun olmaz ve sertifikaya güvenilir, ancak Android'de Chrome tarayıcısında denersem sertifikanın güvenilir olmadığını söylüyor. Ne yapabilirim?


Güvenli sunucuyla yani (Https) ile iletişim kuruyorsunuz?
Mohsin Naeem

evet, gerçekten, sadece bağlantıyı deneyin, sertifikayı göreceksiniz
Alexis

Yanıtlar:


93

Sertifika dosyanızda bir ara sertifika eksik olabilir. Aynı sertifika satıcısına sahip başka bir web sitesini daha önce ziyaret ettiyseniz, ara sertifika tarayıcınızda hatırlanır. Bu, web sitenize gelen her ziyaretçinin durumu olmayabilir - veya daha iyisi - olmayacaktır. SSL bağlantısında eksik bir ara sertifikayı çözmek için, ara sertifikayı kendi sertifika dosyanıza eklemeniz gerekir.

GoDaddy, ara sertifikalar hakkında bazı bilgilere sahiptir (ancak en iyi kaynak her zaman sertifika sağlayıcınızdır): http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificate

Bir zamanlar bir ara sertifika sorununu yaşadım (Commodo ile de) ve çalışmak için kendi sertifika dosyamı ara CA'larla birleştirmek zorunda kaldım. Bir kez yapıldığında artık hiçbir hata oluşmadı.

Godaddy tarafından web sunucusu başına yükleme talimatları: http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=en

Ve Commodo'nun kendileri tarafından en yaygın kurulum kılavuzlarının bir listesi: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make- crt-dosyalarından-kendi-paketim-dosyam

Kullandığınız web sunucusuna bağlı olarak, tüm sertifikaları (alan sertifikası, orta seviye ve kök) belirtmeniz veya bunları sırayla (örneğin Nginx için) birleştirmeniz gerekir:

  1. alan sertifikası
  2. ara sertifika
  3. kök sertifika

Bunu bir SSH terminalinde yapmanın kolay bir yolu yazmaktır:

cat domainfile intermediatefile rootfile > targetfile

Sertifika test aracı

Başka sorunlarla karşılaşırsanız veya sertifikanın doğru olup olmadığından emin değilseniz, lütfen SSL sertifikanızı doğrulamak için çevrimiçi bir araç deneyin. Örneğin: networking4all.com/en/ssl+certificates/quickscan

Android 2.2 ve önceki sürümler için SNI desteği

Lütfen android 2.2'nin (ve muhtemelen daha eski) SNI'yi desteklemediğini unutmayın; bu, farklı ana bilgisayar adları için birden çok SSL sertifikasının tek bir IP adresinde sorunsuz çalışmasına izin verir. @Technyquist'e bu bilgiyi sağladığı için teşekkürler. Bu sorunla ilgili daha fazla bilgi için lütfen SNI hakkındaki bu SO sorusunu inceleyin .


+1, bu, 2.3.X cihazlarla ilgili sorunum için işe yaradı, çünkü zincirleme doğrulama sırası ile ilgili bir sorun var gibi görünüyor (sertifika söz konusu olduğunda oldukça acemiyim) ve bu yeni paketi doğru siparişle (kombinasyon yoluyla @Luceos'un önerdiği gibi) harika çalıştı. Teşekkürler
Armando

Rica ederim, biz de düzenli olarak kullanıyoruz. Özellikle bir ara sertifikadan daha fazlasını doğruladığı için. Yardımcı olabildiğim için mutluyum.
Luceos

comodo bağlantısı öldü
gfaceless

1
Açıklama için teşekkürler. Bir Thawte sertifikam var ve web sitelerinde oturum açmam gerekiyor, "Sipariş Bilgilerini Görüntüle" yi tıklayın. Gönderilen e-posta, ara sertifikanın "Ek Sertifikalar" dan indirilebileceği bir bağlantı içerir.
Guillaume Renoult

1
Bu, OpenMediaVault NAS'ım ve Marshmallow çalıştıran telefonum için çalıştı. Sunucudaki sertifikayı düzenledim, ara sertifikaları ekledim, kaydetti ve web arayüzünü yeniden başlattı ve telefonumdaki Chrome "güvenilir değil" durumundan şişman ve sertifikadan memnun kaldı. Teşekkürler!
Doktor J

19

Bir crt paketi oluşturmalısınız, o zaman iyi olacak. Üç crt dosyası alacaksınız. Hepsini kullanın! Yalnızca domain.crt'yi kullandıysanız, Android'de uyarı olur, PC'de değil.

Nginx'teyim Domain_name.crt'yi açtım ve ardından positivesslca2.crt'yi açtım, tümünü seçip domain_name.crt'nin sonuna kopyaladım. Ardından AddTrustExternalCARoot.crt dosyasını açın, tekrar domain_name.crt'nin sonuna kopyalayın. Ardından domain_name.crt dosyasını yükleyin.

iyi çalışıyor.


Bu aradığım çözüm gibi görünüyor, ancak yine de benim için çalışmıyor. Ayrıca bir godaddy sertifikası ile nginx'teyim. godaddy'nin 3 sertifikası vardır: domain.crt, intermediate.crt ve bundle.crt. Cevabınıza göre doğru sıranın hangisi olduğunu biliyor musunuz? ör. alan> ara> paket veya alan> paket> ara? nedense benim için işe yaramıyor.
isapir

Görünüşe göre bundle.crt, doğru sıra gibi görünen [intermediate.crt + root.crt] birleştirilmiş. Ama yine de çalıştıramıyorum. Herhangi bir fikir? Teşekkürler.
isapir

İşletim sistemine zaten dahil edilmiş olan köke ihtiyacınız yok. Sadece ara zincire ihtiyacınız var. Sipariş sizin + orta seviye olmalıdır.
dalore

9

Birine yardımcı olabileceği için bunu buraya eklemek. Android'in pop-up'ı ve geçersiz sertifika hatasını göstermesiyle ilgili sorunlar yaşıyordum.

Comodo Extended Validation sertifikamız var ve 4 dosya içeren zip dosyasını aldık:

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSAExtendedValidationSecureServerCA.crt
  • www_mydomain_com.crt

Hepsini tek bir satırda bir araya getirdim şöyle:

cat www_mydomain_com.crt COMODORSAExtendedValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >www.mydomain.com.ev-ssl-bundle.crt

Sonra bu paket dosyasını ssl_certificate_keynginx'teki gibi kullandım . İşte bu, şimdi çalışıyor.

Bu özetten esinlenildi: https://gist.github.com/ipedrazas/6d6c31144636d586dcc3


1
Önerilen diğer tüm adımları denedim. Bu benim için çalıştı. Teşekkürler!
ericbae

1
İyi iş, deli gibi googling yapmak ve bu sorunu çözdü.
Olafur Tryggvason

Teşekkürler ve Namecheap'i başka biri kullanıyorsa, şu biçimde olduğundan emin olun: cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
Harry

1

Comodo PositiveSSL ile 4 dosya aldık.

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSADomainValidationSecureServerCA.crt
  • bizim_alanimiz.crt

Comodo sitesindeki talimatları izlediğimizde - sertifikamızda bir ara sertifika dosyası eksik olduğuna dair bir hata alıyorduk.

Temel olarak sözdizimi

cat our_domain.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt  AddTrustExternalCARoot.crt > domain-ssl_bundle.crt

1

Yakın zamanda ssls.com'dan satın aldığım Commodo cert ile bu sorunu yeniden ele aldım ve 3 dosyam var:

alan-adı.ca-paket alan-adı.crt ve alan-adı.p7b

Bunu Nginx üzerinde kurmak zorunda kaldım ve çalıştırdığım komut bu:

cat domain-name.ca-bundle domain-name.crt > commodo-ssl-bundle.crt

Daha sonra Nginx yapılandırma dosyasında commodo-ssl-bundle.crt kullandım ve bir cazibe gibi çalışıyor.


1

Aynı sorunu yaşadım ve sorunum cihazın doğru tarih ve saate sahip olmamasıydı. Sertifikanın güvenilir olduğunu düzelttikten sonra.


1

Aynı hatayı aldım çünkü www .my-domain.com için, sadece my-domain.com için bir Let's Encrypt sertifikası vermedim

Www için de yayınlanıyor . ve https://my-domain.com adresine yönlendirmeden önce vhost'u www .my-domain.com için sertifikaları yükleyecek şekilde yapılandırmak hile yaptı.


0

SSLCertificateChainFileHer ara sertifika için birden çok yönerge kullanmaya çalışırken Apache 2.2 altında aynı sorunla karşılaştım ; bunun yerine üçünü de tek bir dosyada birleştirmem gerekiyordu. Bunu benim için bir "paket" olarak yaptıkları GoDaddy'den geliyorum, bu ekstra adım benim için yeniydi, ancak Apache belgelerinin yeniden okunması bunu açıkça ortaya koydu.

Dikkate değer, bu yönerge Apache 2.4.8'den itibaren kaldırılmıştır çünkü artık tüm ara ürünleri gerçek sertifika ile birleştirebilirsiniz.


0

Umarım çok geç kalmamışımdır, bu çözüm benim için çalıştı, COMODO SSL kullanıyorum, yukarıdaki çözümler zamanla geçersiz görünüyor, web sitem lifetanstic.co.ke

Comodo Destek ile iletişime geçmek ve bir CA paket dosyası elde etmek yerine, aşağıdakileri yapabilirsiniz:

Comodo'dan (posta yoluyla) yeni SSL sertifikanızı aldığınızda, ekli bir zip dosyası vardır. Zip dosyasını açmanız ve aşağıdaki dosyaları not defteri gibi bir metin düzenleyicide açmanız gerekir:

AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt

Sonra her ".crt" dosyasının metnini kopyalayın ve metinleri birbirinin üzerine "Sertifika Yetkilisi Paketi (isteğe bağlı)" alanına yapıştırın.

Bundan sonra, "Sertifika" alanına her zamanki gibi SSL sertifikasını ekleyin ve "Sertifikaya Göre Otomatik Filtrele" düğmesini tıklayın ve "Yükle" yi tıklayın.


0

Godaddy certs büyük olasılıkla sahip olacak domain.key, gd_bundle_something.crtve (rastgele alfanümerik dize)4923hg4k23jh4.crt

Yapmanız gerekenler: cat gd_bundle_something.crt >> 4923hg4k23jh4.crt

Ve sonra, nginx'te kullanacaksınız

ssl                  on;
ssl_certificate      /etc/ssl/certs/4923hg4k23jh4.crt;
ssl_certificate_key  /etc/ssl/certs/domain.key;

0

Ben de aynı sorunu yaşadım. Doğru .crt dosyasını oluşturmanın başka bir yolu şudur:

Bazen içinde tüm sertifika zincirinin bulunduğu bir .PEM dosyası alırsınız. Dosya şöyle görünebilir ...

-----BEGIN RSA PRIVATE KEY-----
blablablabase64private...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
blablablabase64CRT1...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
blablablabase64CRT2...
-----END CERTIFICATE-----
...

Tüm private keybölümü kaldırırsanız, geçerli bir zincirleme .crt'ye sahip olursunuz.


0

Ara crt'nizi de kullandığınızdan emin olun (bir paket içeren .crt dosyası .. bazı sağlayıcılar buna paket veya ca sertifikası da denir). sonra ssl.conf dosyanızda,

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

sonra apache kullanımı için web sunucunuzu yeniden başlatın:

sudo service httpd restart

-1

cihazınızdaki sertifikanın eksik olması olabilir.

şu cevaba bakmayı deneyin: Android cihaza güvenilir CA sertifikası nasıl yüklenir? CA'yı kendi cihazınıza nasıl yükleyeceğinizi görmek için.


Sertifikam PositiveSSL CA / Comodo CA Limited tarafından verildi ve telefonumdaki güvenilir kimlik bilgilerimde 3 Comodo CA Limited (AAA Sertifika Yetkilisi, COMODO Sertifika Yetkilisi ve COMODO ECC Sertifika Yetkilisi)
Alexis

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.