web-dev-qa-db-ja.com

証明書はPCによって信頼されていますが、Androidによっては信頼されていません

今朝から、私の証明書は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で)問題はなく、証明書は信頼されますが、ChromeのAndroidブラウザーで試してみると、証明書が表示されます信頼されていません。私に何ができる?

80
Alexis

証明書ファイルに中間証明書がない場合があります。同じ証明書販売者がいる別の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

Android 2.2以前のSNIサポート

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

91
Luceos

Crtバンドルを作成する必要があり、それで問題ありません。 3つのcrtファイルを受け取ります。それらをすべて使用してください! domain.crtのみを使用した場合、Androidに警告が表示されますが、PCには表示されません。

私はnginxにいます。 domain_name.crtを開いてからpositivesslca2.crtを開き、すべてを選択してdomain_name.crtの最後にコピーします。次に、AddTrustExternalCARoot.crtを開き、domain_name.crtの最後に再度コピーします。次に、domain_name.crtをインストールします

うまくいく。

19
dallas

誰かを助けるかもしれないので、これをここに追加します。ポップアップと無効な証明書エラーを表示する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

次に、そのバンドルファイルをnginxのssl_certificate_keyとして使用しました。これで動作します。

この要点に触発された: https://Gist.github.com/ipedrazas/6d6c31144636d586dcc

8
k00k

私は同じ問題を抱えていましたが、問題はデバイスに正しい日付と時刻がないことでした。証明書が信頼されていることを修正したら。

1
Boon

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
Mathew

私は最近、ssls.comで購入したCommodo証明書でこの問題に遭遇し、3つのファイルがありました。

domain-name.ca-bundle domain-name.crtおよびdomain-name.p7b

Nginxで設定する必要がありましたが、これが実行したコマンドです。

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

次に、Nginx構成ファイル内でcommodo-ssl-bundle.crtを使用し、チャームのように動作します。

1
somecallitblues

www。my-domain.comのみ、my-domain.comに対してLet's Encrypt証明書を発行しなかったため、同じエラーが発生しました。

www。も発行し、リダイレクトする前にwww。my-domain.comの証明書をロードするようにvhostを構成します- https://my-domain.com がうまくいきました。

1
Adrian Onu

私は手遅れではないことを願っています、このソリューションは私のためにここで働いた、私はCOMODO SSLを使用しています、上記のソリューションは時間が経つにつれて無効に見える、私のウェブサイト lifetanstic.co.ke

Comodoサポートに連絡してCAバンドルファイルを取得する代わりに、次のことができます。

Comodoから新しいSSL証明書を(メールで)取得すると、Zipファイルが添付されます。 Zipファイルを解凍し、メモ帳などのテキストエディターで次のファイルを開く必要があります。

AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt

次に、各「.crt」ファイルのテキストをコピーし、「Certificate Authority Bundle(optional)」フィールドに互いの上にテキストを貼り付けます。

その後、通常どおり「証明書」フィールドにSSL証明書を追加し、「証明書によるオートフィル」ボタンをクリックして「インストール」をクリックします。

0
user4237179

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
dazito

中間crt(バンドル付きの.crtファイルも使用することを確認してください。一部のプロバイダーは、それをバンドルまたはca証明書とも呼びます)。 ssl.confで、

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

次に、Apacheを使用するためにWebサーバー:exを再起動します。

Sudo service httpd restart
0
Vikalp Veer

同じ問題がありました。正しい.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

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

重要なことに、このディレクティブは Apache 2.4.8で非推奨 になります。これは、すべての中間体を実際の証明書と連結できるようになったためです。

0
rymo