3

組み込みのブラウザを使用して、Android2.3.4からSSLで保護されたWebアプリケーションにアクセスしようとしています。

サーバー証明書は、 MAKECERTを使用して作成し、サーバーにインストールした自己署名証明書です。このページにアクセスしようとすると、ブラウザから「。」というエラーメッセージが表示されますThe name of the site does not match name on the certificate

確認しましたが、サーバーアドレスが証明書の共通名を正確に模倣しています(実際には単なるIPアドレスです)。

Androidデバイスで、自己署名証明書で保護されていない他のWebサイトにアクセスしようとしても、メッセージがポップアップ表示されません。

デスクトップでIEまたはChromeを使用して同じページにアクセスした場合(署名機関のメッセージは別として)、警告は表示されず、信頼されたルートCAに証明書をインストールすると、証明書はブラウザーによってスムーズに受け入れられます。

メッセージは実際にはAndroidによる自己署名証明書の拒否であると見なす必要がありますか?

私はこれに少し戸惑っています。

資格情報ストレージに証明書をインストールしようとしましたが、状況は改善されません。そして今、私は次に何をしようとするのか見当がつかない。

質問は次のとおりです。Androidで受け入れられる自己署名証明書を作成するために従うべき特定のことはありますか?誰かがこの警告なしにAndroidによって受け入れられた自己署名証明書を取得することに成功しましたか?

他に何を試すことができますか?

-更新- ブルーノの返事は私を正しい方向に導いてくれたので、私はなんとか一歩前進しました:SANを追加して証明書を作り直しました(Andy Arismendiからの指示に従って、放棄MAKECERTしなければなりませんでした)。OpenSSL

メッセージは消えましたが、このSO投稿ですでに説明した「認証の権限が信頼できない」問題でブロックされているため、Androidブラウザーに警告が表示されないまま、問題の最終的な解決策を見つけるために作業を続けています。

4

3 に答える 3

4

確認したところ、サーバー アドレスは証明書の共通名と正確に一致しています (実際には単なる IP アドレスです)。

Android のホスト名検証機能は、一部のブラウザーよりもRFC 2818に厳密に準拠しています。仕様によると、IP アドレスを使用する場合は、 IP アドレスタイプのサブジェクト代替名エントリにある必要があります。DNS タイプの SAN エントリや CN にはありません。

タイプ dNSName の subjectAltName 拡張が存在する場合、それを ID として使用する必要があります。それ以外の場合は、証明書の Subject フィールドの (最も具体的な) Common Name フィールドを使用する必要があります。Common Name の使用は既存の慣行ですが、推奨されておらず、証明機関は代わりに dNSName を使用することをお勧めします。

[...]

場合によっては、URI がホスト名ではなく IP アドレスとして指定されます。この場合、iPAddress subjectAltName が証明書に存在し、URI の IP と正確に一致する必要があります。

最も簡単なのは、ホスト名を使用することです。(証明書で IP アドレスを使用することは実際には実用的ではありません。) または、SAN IP アドレス エントリを使用して証明書を生成します。(これに興味があるかもしれません。)

于 2012-05-28T09:41:16.417 に答える
1

まず、Android 2.x の資格情報ストレージは VPN および WiFi アプリケーション専用であり、ブラウザーには表示されません。信頼できる証明書ストアに独自の証明書をインストールすることはできません (ルート化されたデバイスを使用している場合を除く)。

WiFi 経由でアクセスしているパブリック IP アドレスまたはローカル IP アドレス上の webapp ですか? logcat の出力を確認すると、ヒントとなる警告が表示される場合があります。また、別のデバイスやエミュレーター (可能であれば別の Android バージョン) から試して、メッセージ/動作を比較してください。

于 2012-05-28T08:52:48.970 に答える
0

そのため、私はまだ問題の最終的な解決策を見つけるために取り組んでいます-Androidブラウズで警告がポップアップすることはありません

Nikolay Elenkov が、Android の信頼できるストアに証明書を保存できない理由を説明しました。これは最近変更されましたが、古い Android クライアントでは役に立ちません。Android のキーチェーンとキーストアの簡単な歴史については、Androidにシステム証明書ストレージはありますか?を参照してください。(Nikolay による 2 つの投稿を指します)。

Android ブラウザーで作業しているため、Android ストアに既に存在する CA を使用する必要があります。すでに信頼されている CA からサーバー証明書を取得するには、StartComを試してください。StartCom は無料の Class 1 証明書を提供しており、そのルートはほとんどのモバイルおよびデスクトップ ブラウザーで信頼されています。(必要に応じて、取り消しの料金がかかることに注意してください)。

完全を期すために、クライアントを自分で作成した場合は、証明書を受け入れるためにカスタムX509TrustManagerとオーバーライドを提供します。checkServerTrustedキーストア、キーチェーン、または外部 CA とのやり取りは必要ありません。しかし、ブラウザを作成していないため、そのオプションはありません。

于 2014-02-20T14:52:35.467 に答える