2016-05-28 1 views
0

私は複数のノードサーバーに接続できるアンドロイドアプリケーションを開発中です。この接続は安全である必要がありますので、証明書が必要です。しかし、私は証明書に支払うことができません。私の研究として、私は各サーバーの証明書を作成し、自分のルート証明書で署名します(私もそれが必要です)。それから私は私のアンドロイドアプリケーションにルート証明書をピン止めします。だから私は1つのアンドロイドアプリから複数のサーバーを接続することができます。しかし、私はこの証明書を作成する方法とアンドロイドアプリケーションにそれを固定する方法を知りません。android volley and nodejsの証明書を作成

+0

SSL証明書について質問していますか? – pedrofb

+0

はい。証明書を作成する必要があります。私は窓を使用しています。私は証明書を作成して管理するツールを見つけましたが、うまく機能しませんでした。私はクロムで試してみるとエラーが出ます。私はまた、私はアンドロイドのためのbksキーストアが必要であることを読んだ。私はそれを作成する方法を理解していませんでした。 – ekilic

+0

証明書の生成とトラストストアを処理したくない場合は、信頼できる機関を使用することをお勧めします。https://letsencrypt.org/を試してください。これは無料。独自の証明書を使用する場合は、SOで検索し、特定のサーバーを構成する方法をSOで検索してください。この質問は大きいです – pedrofb

答えて

1

CAはIPにバインドされた証明書を生成できますが、それは通常ではありません。この場合、自己生成証明書を使用する方が適切です。あなたは)

1を必要とするあなたはopensslの

が必要になります

hereから抽出

CA証明書とSSL証明書を作成し

openssl genrsa -out rootCA.key 2048 
openssl genrsa -des3 -out rootCA.key 2048 
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem 

CA証明書を作成します。これは、対話式スクリプトを開始しますさまざまな情報を求められます。あなたはrootCA.pem

は、各デバイスのための証明書を作成して取得します

openssl genrsa -out device.key 2048 
openssl req -new -key device.key -out device.csr  
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 500 -sha256 
「一般名」の第2ステップのインサート内

あなたが求められますさまざまな質問(国、州/省、など)IPまたはデバイスの名前を入力します。ブラウザやAndroidデバイスが)それを

2を検証するあなたに良い説明やリンクを提供するために、私はNode.jsののない十分な知識を持っていない httpsを使用するようにnodejsサーバーを設定しますので、本当の名前を一致させることが重要です、公式の文書を使用してください。おそらく、一部の読者がこれを編集してリンクを提供する可能性があります。

3)証明書の公開鍵とチェーンをAndroidアプリケーションのトラストストアに追加してください。

から

抽出hereあなたは

1))は、あなたのCA証明書

2の公開部分を取得しますBKSキーストアを作成し、証明書をインポートが必要になります(rootのみが必要になります)

3)アプリケーションでキーストアを使用します。キーストアを使用してSSL接続をコンフィグレーションするカスタムApache HTTPクライアントを作成する

詳細は、リンク上のコミュニティウィキにあります。

Android用Volley。 Using Android Volley With Self-Signed SSL Certificate

+0

私は第2ステップについていくつか質問があります。証明書を作成するときに、自分のデバイスのパブリックIPを入力すると、自分のローカルネットワークからプライベートIP(192.168.1.1)のようにアクセスできますか?私は公共のアドレスと私的なアドレスでこのデバイスにアクセスしたいと思う。出来ますか?そして、私はデバイス名の用語を理解しませんでした。あなたはホスト名について話していますか? – ekilic

+1

私はホスト名を言ったかった。証明書の共通名(ホスト名)をIPに設定すると、そのIPに対してのみ有効になります。プライベートアクセスとパブリックアクセスを使用する場合は、2つの証明書と2つのエンドポイントが必要です。または、IPアドレスの代わりにDNS名を使用してください。 – pedrofb

+0

はい、ダイナミックDNSを使用することを考えています。だから私は私のエンドポイントの静的アドレスの料金を支払う必要はありません。しかし、私はそれを使用する場合、私はインターネット接続なしでローカルにエンドポイントを使用することはできません。 sslが複数の共通名のオプションを指定するか、共通名をチェックしないと、私の問題は解決します。 – ekilic

関連する問題