[解決済み] 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)
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の場合)順番が必要です。
- ドメイン証明書
- 中間証明書
- ルート証明書
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 質問 をご覧ください。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Android端末に信頼できるCA証明書をインストールする方法は?
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。