証明書は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

はい、確かに、リンクを試してみてください。証明書が表示されます
Alexis

回答:


92

証明書ファイルに中間証明書がない可能性があります。同じ証明書販売者がいる別のWebサイトに既にアクセスしている場合、中間証明書はブラウザに記憶されます。これは、あなたのウェブサイトへのすべての訪問者に当てはまるとは限らないかもしれません。SSL接続で欠落している中間証明書を解決するには、独自の証明書ファイルに中間証明書を追加する必要があります。

GoDaddyには、中間証明書に関する情報がいくつかあります(ただし、最良のソースは常に証明書プロバイダーです):http//support.godaddy.com/help/article/868/what-is-an-intermediate-certificate

私はかつてこの中間証明書の問題を抱えていて(Commodoでも)、自分の証明書ファイルを中間CAと組み合わせる必要がありました。一度実行すると、エラーは発生しなくなりました。

GodaddyによるWebサーバーごとのインストール手順: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- my-own-bundle-file-from-crt-files

使用しているWebサーバーに応じて、すべての証明書(ドメイン証明書、中間証明書、ルート)を指定するか、次の順序でそれらを1つに結合する(Nginxなど)必要があります。

  1. ドメイン証明書
  2. 中間証明書
  3. ルート証明書

SSHターミナルでこれを行う簡単な方法は、次のように入力することです。

cat domainfile intermediatefile rootfile > targetfile

証明書テストツール

さらに問題が発生した場合、または証明書が正しいかどうかわからない場合は、オンラインツールを試してSSL証明書を確認してください。例:networking4all.com/en/ssl+certificates/quickscan

Android2.2以下のSNIサポート

android 2.2(およびおそらくそれ以前)はSNIをサポートしていないことに注意してください。これにより、異なるホスト名の複数のSSL証明書が単一のIPアドレスで問題なく機能します。その情報を提供してくれた@technyquistに感謝します。この問題の詳細については、SNIに関するこのSOの質問を確認しください。


+1、これは2.3.Xデバイスの問題で機能しました。これは、連鎖検証の順序に問題があるようであり(証明書に関してはかなり初心者です)、この新しいバンドルを正しい順序で使用することで(組み合わせによって) @Luceosが提案したように)は魅力のように機能しました。ありがとう
アルマンド

どういたしまして、私たちも定期的に使用しています。特に、単なる中間証明書以上のものを検証するためです。お役に立ててうれしいです。
ルセオス2014

コモドへのリンクは死んでいます
gfaceless 2015年

1
説明してくれてありがとう。Thawte証明書を持っているので、彼らのWebサイトにログインして、[注文情報の表示]をクリックする必要がありました。送信される電子メールには、「追加の証明書」で中間証明書をダウンロードできるリンクが含まれています。
ギヨームルノールト2015年

1
これは、OpenMediaVaultNASとMarshmallowを実行している電話で機能しました。サーバーで証明書を編集し、中間証明書を追加して保存し、ウェブインターフェースを再起動すると、スマートフォンのChromeは「発行者が信頼できない」状態から、証明書に満足している状態になりました。ありがとう!
Doktor J

19

crtバンドルを作成する必要があります。そうすれば問題ありません。3つの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 2014

9

誰かを助けるかもしれないので、ここにこれを追加します。Androidでポップアップと無効な証明書エラーが表示される問題が発生していました。

Comodo Extended Validation証明書があり、4つのファイルを含むzipファイルを受け取りました。

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

次のように、それらをすべて1行に連結しました。

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 2015

1
良い仕事、狂ったようにグーグルしていて、これはそれを修正しました。
Olafur Tryggvason 2015

ありがとう、そして他の誰かがNamecheapを使用しているなら、それがこのフォーマットであることを確認してください:cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
ハリー

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証明書でこの問題に遭遇し、3つのファイルがありました。

domain-name.ca-bundledomain-name.crtおよびdomain-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に対して、my-domain.comに対してのみ、Let's Encrypt証明書を発行しなかったため、同じエラーが発生しました。

wwwにも発行そして、のロード証明書へのバーチャルホストを設定するWWWにリダイレクトする前に、.MY-domain.comのhttps://my-domain.comトリックをしました。


0

SSLCertificateChainFile中間証明書ごとに複数のディレクティブを使用しようとしたときに、Apache2.2で同じ問題が発生しました。代わりに、3つすべてを1つのファイルに連結する必要がありました。GoDaddyから来て、「バンドル」としてこれを行ってくれたので、この追加の手順は私にとっては初めてでしたが、Apacheのドキュメントを読み直すとこれが明らかになりました。

注目に値するのは、すべての中間体を実際の証明書と連結できるようになったため、このディレクティブはApache2.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.keygd_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>

次に、Webサーバーを再起動します:ex for apache use:

sudo service httpd restart

-1

デバイスに証明書がない可能性があります。

この答えを見てみてください:Androidデバイスに信頼できるCA証明書をインストールする方法は?自分のデバイスにCAをインストールする方法を確認します。


私の証明書はPositiveSSLCA / Comodo CA Limitedによって発行されており、電話の信頼できる資格情報に3 Comodo CA Limited(AAA認証局、COMODO認証局、COMODO ECC認証局)が表示されます
Alexis

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.