自己署名証明書のインストールは成功を主張しますが、アンドロイドは証明書が存在しないかのように動作します


17

Android 4.3でWebサーバーの自己署名証明書をインストールしようとしています。SDカードのルートに.crtファイルがあります(実際にはスロットにSDカードがないためエミュレートされます)。

証明書をインストールするには、[設定]-> [全般]-> [セキュリティ]-> [クレデンシャルストレージ]-> [デバイスストレージからインストール]に移動します。

証明書の名前(ファイル名から.crt拡張子を引いたもの)を変更できるダイアログボックスが表示されます(ただし、変更はできません)。 「パッケージに含まれるもの:1つのユーザー証明書」を通知するダイアログの すべて正常に見えるので、「OK」をクリックします。ダイアログが消え、「[name] installed」というトーストメッセージがポップアップ表示されます。

しかし、すぐに「信頼された資格情報」に移動して「ユーザー」を選択すると、そこには何もありません!新しい証明書も「システム」の下にありませんが、そこには期待していません。 Webサイトでは、まだサイトの証明書が信頼されていないという警告が表示されます。再起動も試みましたが、違いはありません。

何が間違っていますか?エラーメッセージがまったくないのは役に立ちません。証明書の形式が間違っている可能性はありますか?サーバーのsslディレクトリにある.crtファイルを使用して、DER形式に変換しようとしました。

更新:Androidで証明書がp12形式である必要があることを読んだので、次のコマンドを使用してApache2証明書をp12に変換しました。

openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12

その後、上記の手順を繰り返し、同じ成功メッセージを受け取った後、ユーザー資格情報に証明書が表示されないまま進み、モバイルブラウザーから信頼できない証明書エラーが表示されます。

回答:


19

Androidで証明書を実際にインストールするのと同じ問題がありましたが、このサイトで自分に合った方法が説明されています。要約すると、次の手順になります。

  1. v3_req拡張機能を備え、CAとして有効にされた秘密鍵と公開x509証明書を作成します。

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca

  2. 証明書をDER形式に変換します。これはAndroidで認識されます。

    sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt

  3. 任意の方法を使用my_site.der.crtしてAndroidデバイスにアクセスします。ファイルをWebサーバーでホストし、Androidブラウザー経由でダウンロードするだけで簡単にインストールできます。

ステップ1を2つ(1a。秘密鍵の生成と1b。パブリック証明書の生成)に分割したいのですが、その方法を調査するのにあまり時間をかけませんでした。うまくいく方法を見つけたら、コメントで教えてください、ありがとう。

(コメントを追加するのではなく、これは将来の参照のために回答の一部として本当に属していると思うので、編集中です。--Michael)

CAとして有効な証明書を作成する代わりに、自己署名CAを作成し、新しいCAで既存のキー/ csrに再署名しました。次に、自己署名CAをAndroidに追加しました。動いた!

自己署名CAの生成:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

からキーを作成していた既存のCSRに再署名する

openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649

2番目のコマンドの変更された形式を使用して、CA証明書をDER形式に変換しました。

openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt

これに関する素晴らしい点は、新しい自己署名CAで再署名された追加の信頼されていない証明書は、新しいCAがインストールされているデバイスよりも、他の何もインストールすることなく信頼されることです。これは、あなたが制御できないサイトを信頼するという問題を正確に解決するものではありませんが、内部サーバーなどのIT部門(たとえば)に何らかの影響がある場合、それが容易になる可能性があります。


1
インストールする必要のある証明書が既にあるので、手順2を試しましたが、インストールに成功したと主張した後もユーザーの信頼できる資格情報に表示されず、再起動後にChromeに「信頼できないサイト」エラーが表示されます。
マイケル

1
v3_req拡張機能について何かがあり、CAとして有効にすると、Androidが証明書を使用するために証明書が必要になりますか?その場合、インストールしたいすべての証明書を制御できないため、既存の証明書を取得してその情報に追加するために使用できるコマンドがあります。
マイケル

3
前の質問の前半に答えるために、リンクしたページを読みましたが、問題はAndroidが自己署名証明書(自己署名CAではない)のインストールを拒否しているようです。これは文書化されていないようであり、Androidがインストールするふりをするという事実はそれをさらに悪化させます。しかし、私が制御できない自己署名証明書を持っている場合、それをインストールできるように「CA」で認証する方法はありますか?
マイケル

1
@私はあなたが気にしないことを願っています、私はあなたの答えを編集して、私の解決策をコメントに含めるのではなく、答えの一部として本当に属しているので、それを含めるつもりです。
マイケル

1
existing.csr署名リクエストの生成方法がわかりません。これは、完全なステップバイステップチュートリアルの最後の欠落点だと思います。
-cguenther
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.