인증서는 PC에서 신뢰하지만 Android에서는 신뢰하지 않습니다.


82

오늘 아침부터 내 인증서는 Android에서 더 이상 신뢰되지 않으며 내 애플리케이션은 더 이상 연결할 수 없습니다.

 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 (PC)에서 시도하면 문제가없고 인증서를 신뢰할 수 있지만 Android의 Chrome 브라우저에서 시도하면 인증서를 신뢰할 수 없다는 메시지가 표시됩니다. 어떡해?


보안 서버, 즉 (Https)와 통신하고 있습니까?
Mohsin Naeem 2012-07-05

예 실제로 그냥 링크를하려고하면 인증서를 볼 수 있습니다
알렉시스

답변:


93

인증서 파일에 중간 인증서가 누락되었을 수 있습니다. 동일한 인증서 판매자가있는 다른 웹 사이트를 이미 방문한 경우 중간 인증서가 브라우저에 기억됩니다. 이것은 웹 사이트를 방문하는 모든 방문자에게 해당되지 않을 수도 있고 더 나을 수도 있습니다. SSL 연결에서 누락 된 중간 인증서를 해결하려면 자체 인증서 파일에 중간 인증서를 추가해야합니다.

GoDaddy에는 중간 인증서에 대한 몇 가지 정보가 있습니다 (하지만 가장 좋은 출처는 항상 인증서 제공 업체입니다) : http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificate

나는 한때 (Comodo와 함께) 중간 인증서 문제가 있었고 내 자신의 인증서 파일을 중간 CA와 결합해야했습니다. 완료되면 더 이상 오류가 발생하지 않았습니다.

Godaddy의 웹 서버 별 설치 지침 : http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=en

그리고 다음은 Commodo 자체에서 제공하는 가장 일반적인 설치 가이드 목록입니다. https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make- crt 파일에서 내 자신의 번들 파일

사용중인 웹 서버에 따라 모든 인증서 (도메인 인증서, 중간 및 루트)를 지정하거나 순서대로 하나로 결합 (예 : Nginx)해야합니다.

  1. 도메인 인증서
  2. 중간 인증서
  3. 루트 인증서

SSH 터미널에서이 작업을 수행하는 쉬운 방법은 다음을 입력하는 것입니다.

cat domainfile intermediatefile rootfile > targetfile

인증서 테스트 도구

추가 문제가 발생하거나 인증서가 올바른지 확실하지 않은 경우 온라인 도구를 사용하여 SSL 인증서를 확인하십시오. 예 : network4all.com/en/ssl+certificates/quickscan

Android 2.2 이하에 대한 SNI 지원

Android 2.2 (및 이전 버전)는 SNI를 지원하지 않으므로 단일 IP 주소에서 문제없이 서로 다른 호스트 이름에 대한 여러 SSL 인증서가 작동 할 수 있습니다. 해당 정보를 제공해 주신 @technyquist에게 감사드립니다. 이 문제에 대한 자세한 내용 은 SNI에 대한 이 SO 질문을 검토 하십시오 .


+1, 이것은 2.3.X 장치에 대한 내 문제에서 작동했습니다. 연쇄 확인 순서에 문제가있는 것 같기 때문에 (인증서에 관해서는 꽤 멍청합니다)이 새로운 번들을 올바른 순서로 (조합을 통해) @Luceos가 제안한 것처럼) 매력처럼 작동했습니다. 감사합니다
Armando

천만에요, 우리는 또한 그것을 정기적으로 사용합니다. 특히 단순한 중간 인증서 이상의 유효성을 검사하기 때문입니다. 도움이 될 수있어서 기쁩니다.
Luceos 2014 년

코모도에 대한 링크가 죽었
gfaceless

1
설명 해주셔서 감사합니다. Thawte 인증서가 있고 웹 사이트에 로그인해야했고 "주문 정보보기"를 클릭했습니다. 전송 된 이메일에는 "추가 인증서"에서 중간 인증서를 다운로드 할 수있는 링크가 포함되어 있습니다.
Guillaume Renoult 2015

1
이것은 OpenMediaVault NAS와 Marshmallow를 실행하는 전화기에서 작동했습니다. 서버에서 인증서를 편집하고, 중간 인증서를 추가하고, 저장하고, 웹 인터페이스를 다시 시작했고, 내 휴대 전화의 Chrome은 "신뢰할 수없는 발급자"에서 인증서에 만족스러워졌습니다. 감사!
Doktor J

19

crt 번들을 만들어야합니다. 그러면 괜찮습니다. 세 개의 crt 파일을 받게됩니다. 모두 사용하세요! domain.crt 만 사용한 경우 Android에서는 경고가 표시되지만 PC에서는 표시되지 않습니다.

나는 nginx에 있습니다. domain_name.crt를 연 다음 positivesslca2.crt를 열고 모두 선택하고 domain_name.crt의 끝에 복사합니다. 그런 다음 AddTrustExternalCARoot.crt를 열고 domain_name.crt의 끝에 다시 복사합니다. 그런 다음 domain_name.crt를 설치하십시오.

잘 작동합니다.


이것은 제가 찾고있는 솔루션처럼 보이지만 여전히 저에게는 효과가 없습니다. 나는 또한 godaddy 인증서로 nginx에 있습니다. godaddy에는 domain.crt, intermediate.crt 및 bundle.crt의 3 가지 인증서가 있습니다. 귀하의 답변에 따라 올바른 순서가 무엇인지 알고 있습니까? 즉 도메인> 중간> 번들 또는 도메인> 번들> 중간? 어떤 이유로 나에게도 효과가 없습니다.
isapir 2014 년

분명히 bundle.crt는 [intermediate.crt + root.crt] 연결되어 올바른 순서 인 것 같습니다. 하지만 여전히 작동하지 않습니다. 어떤 아이디어? 감사.
isapir 2014 년

이미 OS에 번들로 제공되는 루트가 필요하지 않습니다. 중간 체인 만 있으면됩니다. 주문은 귀하의 것 + 중간이어야합니다.
dalore

9

누군가에게 도움이 될 수 있으므로 여기에 추가하십시오. 팝업 및 잘못된 인증서 오류를 표시하는 Android에 문제가 발생했습니다.

Comodo Extended Validation 인증서가 있으며 4 개의 파일이 포함 된 zip 파일을 받았습니다.

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

다음과 같이 모두 한 줄에 연결했습니다.

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

그런 다음 해당 번들 파일을 ssl_certificate_keynginx에서 사용했습니다 . 이제 작동합니다.

이 요점에서 영감을 얻었습니다 : https://gist.github.com/ipedrazas/6d6c31144636d586dcc3


1
다른 모든 제안 된 단계를 시도했습니다. 이것은 나를 위해 일했습니다. 감사!
ericbae

1
수고하셨습니다. 미친 듯이 인터넷 검색을했고 이로 인해 문제가 해결되었습니다.
Olafur Tryggvason 2015 년

감사합니다. 다른 사람이 Namecheap을 사용하는 경우 다음 형식인지 확인하십시오. cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
Harry

1

Comodo PositiveSSL로 우리는 4 개의 파일을 받았습니다.

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

comodo 사이트의 지침을 따랐을 때 인증서에 중간 인증서 파일이 없다는 오류가 표시됩니다.

기본적으로 구문은

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

1

나는 최근에 ssls.com에서 구입 한 Commodo cert로이 문제를 겪었으며 3 개의 파일이 있습니다.

domain-name.ca-bundle domain-name.crtdomain-name.p7b

Nginx에서 설정해야했고 이것이 내가 실행 한 명령입니다.

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

그런 다음 Nginx 구성 파일 내에서 commodo-ssl-bundle.crt를 사용했으며 매력처럼 작동합니다.


1

나는 같은 문제가 있었고 내 문제는 올바른 날짜와 시간이없는 장치였습니다. 인증서가 신뢰할 수 있다고 수정하면.


1

나는에 대한하자의 암호화 인증서를 발행하지 않았기 때문에 저도 같은 오류가 발생한 www가 단지 my-domain.com에 대한 누군 데-domain.com

에 대해서도 발행 WWW. 과에 대한 부하 인증서에 가상 호스트를 구성 www를 리디렉션하기 전에 누군 데-domain.com에 https://my-domain.com 트릭을했다.


0

SSLCertificateChainFile각 중간 인증서에 대해 여러 지시문 을 사용하려고 할 때 Apache 2.2에서 이와 동일한 문제가 발생했습니다 . 대신 세 가지 모두를 단일 파일로 연결해야했습니다. GoDaddy에서 "번들"로이 작업을 수행 한이 추가 단계는 나에게 새로운 것이었지만 Apache 문서를 다시 읽어 보면 이 사실이 분명해졌습니다.

주목할 가치가있는 것은이 지시문은 이제 모든 중간을 실제 인증서와 연결할 수 있기 때문에 Apache 2.4.8 부터 사용되지 않습니다 .


0

나는 너무 늦지 않았기를 바랍니다.이 솔루션이 저에게 효과적이었습니다 .COMODO SSL을 사용하고 있습니다. 위의 솔루션은 시간이 지남에 따라 유효하지 않은 것 같습니다. 제 웹 사이트 lifetanstic.co.ke

Comodo 지원에 연락하여 CA 번들 파일을 얻는 대신 다음을 수행 할 수 있습니다.

Comodo에서 새 SSL 인증서를 받으면 (우편으로) zip 파일이 첨부됩니다. zip 파일의 압축을 풀고 메모장과 같은 텍스트 편집기에서 다음 파일을 열어야합니다.

AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt

그런 다음 각 ".crt"파일의 텍스트를 복사하고 "인증 기관 번들 (선택 사항)"필드에서 텍스트를 서로 위에 붙여 넣습니다.

그런 다음 "인증서"필드에 평소와 같이 SSL 인증서를 추가하고 "인증서로 자동 제출"버튼을 클릭하고 "설치"를 누르십시오.


0

Godaddy 인증서를 사용하면 domain.key, gd_bundle_something.crt및 (임의의 영숫자 문자열) 이있을 가능성이 큽니다.4923hg4k23jh4.crt

다음을 수행해야합니다. cat gd_bundle_something.crt >> 4923hg4k23jh4.crt

그런 다음 nginx에서

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

0

나는 같은 문제가 있었다. 올바른 .crt 파일을 생성하는 또 다른 방법은 다음과 같습니다.

때때로 전체 인증서 체인이 포함 된 .PEM 파일을 얻을 수 있습니다. 파일은 다음과 같습니다 ....

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

전체 private key섹션 을 제거하면 유효한 체인 .crt가 생깁니다.


0

또한 중간 crt (번들과 함께 .crt 파일 .. 일부 공급자는 번들 또는 CA 인증서라고도 함)를 사용해야합니다. 그런 다음 ssl.conf에서

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

그런 다음 웹 서버를 다시 시작하십시오 : ex for apache use :

sudo service httpd restart

-1

장치에서 인증서가 누락되었을 수 있습니다.

이 답변을 살펴보십시오 : Android 장치에 신뢰할 수있는 CA 인증서를 설치하는 방법? 자신의 장치에 CA를 설치하는 방법을 확인하십시오.


내 인증서는 PositiveSSL CA / Comodo CA Limited에서 발급했으며 내 휴대폰의 신뢰할 수있는 자격 증명에서 3 ​​Comodo CA Limited (AAA 인증 기관, COMODO 인증 기관 및 COMODO ECC 인증 기관)를 볼 수 있습니다
Alexis

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.