3

私はエンタープライズ android アプリケーションを開発しているため、正当な証明書が購入されている間にサーバーの証明書が自己署名されている場合でも、テスト段階でクライアント (android エミュレーター/テスト電話) とサーバーの間に安全な接続を作成する必要があります。会社によって(今のところ私の管理外のもの)。

もちろん、Android OSによってネイティブに信頼されていないサーバーの自己署名証明書とその認証局を信頼する必要があります。私は、このシナリオで HTTPS 環境を作成するための Google の提案に従っています。

私が現在直面している問題は.crt、Google の例の次の行のように自分のファイルにアクセスできないことです。

InputStream caInput = new BufferedInputStream(
    new FileInputStream("load-der.crt"));

上記の代わりに、私は以下を使用しています:

InputStream caInput = new BufferedInputStream(
getResources().openRawResource(R.raw.mycrtfile));

ファイルが存在するInputStreamから派生した を開きます。しかし、私はその行に出ます。 mycrtfile.crt.crt/res/raw/mycrtfile.crtNullPointerException

ディレクトリ内に保存されている未加工のリソースとしてロードする必要がある証明書ファイルを保存してアクセスするより良い方法はありますInputStreamか?FileInputStreamres

4

3 に答える 3

0

キーストア(キーストアと関連する問題に関する優れた記事はこちら) とKeyChainでうまくいきますが、ターゲットとする API レベルを確認する必要がある場合があります。さらに、エンタープライズ アプリケーションについて言及したので、証明書のピン留めを検討する必要があるかもしれません。これは、証明書のピン留めに役立ちます。

于 2013-08-21T11:01:56.897 に答える
0

1) app/src/main/ にディレクトリ「assets」を作成します

2) 証明書をこのディレクトリに置きます。

3) これで InputStream を取得できます:

InputStream is = this.getAssets().open("mycrtfile.crt");

this.getAssets() を使用するには、Activity にいる必要があります。これは、Activity では「this」が「Context」に対応するためです。アクティビティにいない場合は、Context (this) を引数として渡す必要があります。

于 2015-08-21T12:42:27.437 に答える