1. ホーム
  2. android

[解決済み] PCでは信頼されるのに、Androidでは信頼されない証明書

2023-06-13 12:30:11

質問

今朝から、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)

PCのGoogle Chromeで試すと問題なく、証明書も信頼されていますが、AndroidのChromeブラウザで試すと、証明書は信頼されていないと言われます。どうしたらいいでしょうか?

どのように解決するのですか。

証明書ファイルに中間証明書が含まれていない可能性があります。同じ証明書の販売者を持つ別の Web サイトをすでに訪問したことがある場合、中間証明書はブラウザに記憶されます。これは、あなたの Web サイトへのすべての訪問者がそうであるとは限りませんし、そうでない場合もあります。SSL接続における中間証明書の欠落を解決するには、中間証明書を自分の証明書ファイルに追加する必要があります。

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

私は以前、この中間証明書の問題が発生し(Commodo も)、自分の証明書ファイルと中間 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-my-own-bundle-file-from-crt-files

使用しているウェブサーバーによっては、すべての証明書(ドメイン証明書、中間証明書、ルート証明書)を指定するか、1つにまとめる(例:Nginxの場合)順番が必要です。

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

SSHターミナルでこれを行う簡単な方法は、タイプすることです。

cat domainfile intermediatefile rootfile > targetfile


証明書テストツール

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

android 2.2 以下の SNI サポート

アンドロイド 2.2 (およびおそらくそれ以前) は、SNI をサポートしていません。これは、異なるホスト名の複数の SSL 証明書を、1 つの IP アドレス上で問題なく動作させることができるようにするものです。この情報を提供してくれた @technyquist に感謝します。レビュー SNI に関するこの SO 質問 をご覧ください。