Chứng chỉ được PC tin cậy chứ không phải Android


82

Kể từ sáng nay, chứng chỉ của tôi không còn đáng tin cậy trên Android và sau đó ứng dụng của tôi không thể kết nối nữa:

 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)

Nếu tôi thử trong Google Chrome (trên PC) thì không có vấn đề gì và chứng chỉ đáng tin cậy nhưng nếu tôi thử trong trình duyệt Chrome trên Android, nó cho tôi biết chứng chỉ không đáng tin cậy. Tôi có thể làm gì?


Bạn đang giao tiếp với máy chủ bảo mật tức là (Https)?
Mohsin Naeem

vâng, thực sự, chỉ cần thử liên kết, bạn sẽ thấy chứng chỉ
Alexis

Câu trả lời:


93

Bạn có thể thiếu chứng chỉ trung gian trong tệp chứng chỉ của mình. Nếu bạn đã truy cập một trang web khác có cùng người bán chứng chỉ, chứng chỉ trung gian sẽ được ghi nhớ trong trình duyệt của bạn. Điều này có thể không - hoặc thậm chí tốt hơn - sẽ không đúng với mọi khách truy cập vào trang web của bạn. Để giải quyết việc thiếu chứng chỉ trung gian trong kết nối SSL, bạn sẽ cần thêm chứng chỉ trung gian vào tệp chứng chỉ của riêng mình.

GoDaddy có một số thông tin về các chứng chỉ trung gian (nhưng nguồn tốt nhất luôn là nhà cung cấp chứng chỉ của bạn): http://support.godaddy.com/help/article/868/what-is-an-inter Instant- certificate

Tôi đã từng gặp vấn đề này về cert trung gian (với cả Commodo) và phải kết hợp tệp cert của riêng mình với CA trung gian để hoạt động. Sau khi thực hiện không có lỗi xảy ra nữa.

Hướng dẫn cài đặt cho mỗi máy chủ web của Godaddy: http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=vi

Và đây là danh sách các hướng dẫn cài đặt phổ biến nhất do Commodo tự thực hiện: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make- my-own-pack-file-from-crt-files

Tùy thuộc vào máy chủ web bạn đang sử dụng, bạn sẽ cần chỉ định tất cả các chứng chỉ (chứng chỉ miền, trung gian và gốc) hoặc kết hợp chúng thành một (ví dụ: đối với Nginx) theo thứ tự:

  1. chứng chỉ miền
  2. chứng chỉ trung cấp
  3. chứng chỉ gốc

Một cách dễ dàng để thực hiện việc này trong thiết bị đầu cuối SSH là nhập:

cat domainfile intermediatefile rootfile > targetfile

Công cụ kiểm tra chứng chỉ

Nếu bạn gặp phải sự cố khác hoặc không chắc liệu chứng chỉ có đúng hay không, hãy thử một công cụ trực tuyến để xác minh chứng chỉ SSL của bạn. Ví dụ: networking4all.com/en/ssl+certificates/quickscan

Hỗ trợ SNI cho Android 2.2 trở xuống

Xin lưu ý rằng android 2.2 (và có thể là cũ hơn) không hỗ trợ SNI, cho phép nhiều chứng chỉ SSL cho các tên máy chủ khác nhau hoạt động mà không gặp sự cố trên một địa chỉ IP duy nhất. Cảm ơn @technyquist đã cung cấp thông tin đó. Vui lòng xem lại câu hỏi SO này về SNI để biết thêm thông tin về vấn đề này.


+1, điều này đã hiệu quả với sự cố của tôi với các thiết bị 2.3.X vì chúng dường như có vấn đề với thứ tự xác minh theo chuỗi (tôi khá noob khi nói đến chứng chỉ) và bằng cách có gói mới này với thứ tự phù hợp (thông qua kết hợp như @Luceos đề xuất) đã hoạt động như một sự quyến rũ. Cảm ơn
Armando

Bạn được chào đón, chúng tôi cũng sử dụng nó một cách thường xuyên. Đặc biệt là vì nó xác nhận nhiều hơn một chứng chỉ trung gian. Hạnh phúc vì tôi có thể được giúp đỡ.
Luceos

liên kết cho comodo đã chết
gfaceless

1
Cảm ơn vì lời giải thích. Tôi có chứng chỉ Thawte và tôi phải đăng nhập vào trang web của họ, nhấp vào "Xem Thông tin Đơn hàng". Email được gửi chứa một liên kết nơi chứng chỉ trung gian có thể được tải xuống trong "Chứng chỉ bổ sung".
Guillaume Renoult,

1
Điều này đã hoạt động cho OpenMediaVault NAS của tôi và điện thoại của tôi chạy Marshmallow. Đã chỉnh sửa chứng chỉ trên máy chủ, nối các chứng chỉ trung gian, lưu nó và khởi động lại giao diện web và Chrome trên điện thoại của tôi đã chuyển từ "nhà phát hành không đáng tin cậy" thành "nhà phát hành không đáng tin cậy" trở nên tuyệt vời và hài lòng với chứng chỉ. Cảm ơn!
Doktor J

19

Bạn phải tạo một bó crt thì nó sẽ ổn. Bạn sẽ nhận được ba tệp crt. Sử dụng tất cả! Nếu bạn chỉ sử dụng domain.crt thì sẽ có cảnh báo trên Android nhưng không phải trên PC.

Tôi đang trên nginx. Tôi đã mở domain_name.crt và sau đó mở posvesslca2.crt, chọn tất cả và sao chép vào cuối domain_name.crt. Sau đó mở AddTrustExternalCARoot.crt, sao chép lại vào cuối domain_name.crt. Sau đó cài đặt domain_name.crt

hoạt động tốt.


Đây có vẻ giống như giải pháp tôi đang tìm kiếm, nhưng nó vẫn không hiệu quả với tôi. Tôi cũng đang trên nginx với một chứng chỉ godaddy. godaddy có 3 chứng chỉ: domain.crt, trung gian.crt và bó.crt. Bạn có biết thứ tự nào là chính xác theo câu trả lời của bạn? tức là miền> trung gian> bó hoặc miền> bó> trung gian? vì một số lý do không hoạt động cho tôi.
isapir

Rõ ràng pack.crt là [trung gian.crt + root.crt] được nối để có vẻ là thứ tự chính xác. Nhưng tôi vẫn không thể làm cho nó hoạt động. Có ý kiến ​​gì không? Cảm ơn.
isapir

Bạn không cần root, nó đã được đóng gói vào hệ điều hành. Bạn chỉ cần chuỗi trung gian. Đơn hàng nên là của bạn + trung gian.
dalore

9

Thêm điều này ở đây vì nó có thể giúp ích cho ai đó. Tôi đang gặp sự cố với việc Android hiển thị cửa sổ bật lên và lỗi chứng chỉ không hợp lệ.

Chúng tôi có chứng chỉ Xác thực Mở rộng Comodo và chúng tôi đã nhận được tệp zip chứa 4 tệp:

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

Tôi nối tất cả chúng lại với nhau trên một dòng như vậy:

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

Sau đó, tôi sử dụng tệp gói đó làm tệp của tôi ssl_certificate_keytrong nginx. Đó là nó, hoạt động ngay bây giờ.

Lấy cảm hứng từ ý chính này: https://gist.github.com/ipedrazas/6d6c31144636d586dcc3


1
Tôi đã thử tất cả các bước được đề xuất khác. Điều này đã làm việc cho tôi. Cảm ơn!
ericbae

1
Làm tốt lắm, lên googling như điên và điều này đã sửa nó.
Olafur Tryggvason

Cảm ơn, và nếu có ai khác đang sử dụng namecheap chắc chắn rằng nó là ở định dạng này: cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
Harry

1

Với Comodo PositiveSSL, chúng tôi đã nhận được 4 tệp.

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSADomainValidationSecureServerCA.crt
  • our_domain.crt

Khi chúng tôi làm theo hướng dẫn trên trang comodo - chúng tôi sẽ gặp lỗi rằng chứng chỉ của chúng tôi bị thiếu tệp chứng chỉ trung gian.

Về cơ bản, cú pháp là

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

1

Gần đây tôi đã tham gia vấn đề này với Commodo cert mà tôi đã mua trên ssls.com và tôi đã có 3 tệp:

domain-name.ca-pack domain-name.crtdomain-name.p7b

Tôi đã phải thiết lập nó trên Nginx và đây là lệnh tôi đã chạy:

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

Sau đó, tôi đã sử dụng goodso-ssl-pack.crt bên trong tệp cấu hình Nginx và hoạt động như một sự quyến rũ.


1

Tôi đã gặp vấn đề tương tự và vấn đề của tôi là thiết bị không có đúng ngày và giờ. Khi tôi đã sửa rằng chứng chỉ đang được tin cậy.


1

Tôi đã gặp lỗi tương tự vì tôi không cấp chứng chỉ Let's Encrypt cho www .my-domain.com, chỉ cho my-domain.com

Cũng phát hành cho www. và định cấu hình vhost để tải chứng chỉ cho www .my-domain.com trước khi chuyển hướng đến https://my-domain.com đã thực hiện thủ thuật.


0

Tôi gặp phải vấn đề tương tự này trong Apache 2.2 khi tôi đang cố gắng sử dụng nhiều lệnh SSLCertificateChainFilecho mỗi cert trung gian; thay vào đó, tôi cần nối cả ba vào một tệp duy nhất. Đến từ GoDaddy, nơi họ đã thực hiện việc này cho tôi như một "gói", bước bổ sung này là mới đối với tôi, nhưng việc đọc lại tài liệu Apache đã làm rõ điều này.

Đáng chú ý, chỉ thị này không được chấp nhận kể từ Apache 2.4.8 vì giờ đây bạn có thể nối tất cả các trung gian với cert thực tế.


0

Tôi hy vọng tôi không quá muộn, giải pháp này ở đây đã hiệu quả đối với tôi, tôi đang sử dụng COMODO SSL, các giải pháp trên có vẻ không hợp lệ theo thời gian, trang web của tôi lives life.co.ke

Thay vì liên hệ với Bộ phận hỗ trợ của Comodo và lấy tệp gói CA, bạn có thể làm như sau:

Khi Bạn nhận được chứng chỉ SSL mới từ Comodo (qua đường bưu điện), họ sẽ đính kèm một tệp zip. Bạn cần giải nén tệp zip và mở các tệp sau trong trình soạn thảo văn bản như notepad:

AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt

Sau đó, sao chép văn bản của từng tệp ".crt" và dán các văn bản ở trên với nhau trong trường "Gói tổ chức phát hành chứng chỉ (tùy chọn)".

Sau đó, chỉ cần thêm chứng chỉ SSL như bình thường trong trường "Chứng chỉ" và nhấp vào nút "Tự động hóa bằng chứng chỉ" và nhấn "Cài đặt".


0

Với Godaddy certs bạn rất có thể sẽ có một domain.key, gd_bundle_something.crtvà (ngẫu nhiên chuỗi chữ và số)4923hg4k23jh4.crt

Bạn sẽ cần: cat gd_bundle_something.crt >> 4923hg4k23jh4.crt

Và sau đó, trên nginx, bạn sẽ sử dụng

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

0

Tôi đã từng gặp vấn đề tương tự. Một cách khác để tạo tệp .crt chính xác là như sau:

Đôi khi bạn nhận được tệp .PEM có toàn bộ chuỗi chứng chỉ bên trong. Tệp có thể trông như thế này ....

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

Nếu bạn xóa toàn bộ private keyphần, bạn sẽ có .crt chuỗi hợp lệ


0

Đảm bảo rằng bạn cũng sử dụng crt trung gian của mình (tệp .crt với một gói .. một số nhà cung cấp còn gọi nó là chứng chỉ gói hoặc ca). thì trong ssl.conf của bạn,

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

sau đó khởi động lại máy chủ web của bạn: ex để sử dụng apache:

sudo service httpd restart

-1

có thể là bạn thiếu chứng chỉ trên thiết bị của mình.

hãy thử xem câu trả lời này: Làm thế nào để cài đặt chứng chỉ CA đáng tin cậy trên thiết bị Android? để xem cách cài đặt CA trên thiết bị của riêng bạn.


Giấy chứng nhận của tôi là do PositiveSSL CA / Comodo CA Limited và trong thông tin đáng tin cậy của tôi trên điện thoại của tôi, tôi có thể thấy 3 Comodo CA Limited (AAA Certification Authority, COMODO Certification Authority và COMODO ECC Certification Authority)
Alexis

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.