2012-08-18 43 views
15

Androidアプリからnode.jsベースのTLSサーバーに接続しようとしています。当然、自己署名証明書を使用しているので失敗します。Android TLS接続と自己署名入りの証明書

私のアプリに証明書を追加して、Androidに何とかそれを信頼させることができますか? HTTPSを使用していないことに注意してください。これはTCP接続によるTLSです。

答えて

16

多くの読書の後、私は答えを思いついた。

かなり良いガイドはここにある:http://nelenkov.blogspot.no/2011/12/using-custom-certificate-trust-store-on.html

は今、私はHTTPSを使用していないことから、私は新しいキーストアでクリーンなSSLソケットを取得するためのわずかに異なるアプローチを考え出す必要があった:

KeyStore store = KeyStore.getInstance("BKS"); 
InputStream truststore = mainActivity.getResources().openRawResource(R.raw.trust); 
store.load(truststore, "PASSWORD".toCharArray()); 
TrustManagerFactory tmf = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
tmf.init(store); 
SSLContext context = SSLContext.getInstance("TLS"); 
context.init(null, tmf.getTrustManagers(), new SecureRandom()); 
Socket socket = context.getSocketFactory().createSocket(ip, port); 
7

アプリケーションに証明書を追加することはお勧めしません。証明書の更新に問題があります。

Self-signed SSL acceptance on Android

HTTPS GET (SSL) with Android and self-signed server certificate

は、あなたが見たことがありますか?

+0

私はアプリケーションに指紋をハードコードすることをお勧めします。新しい指紋を使用するようにアプリケーションを更新するのは難しくありません。また、CAに関連するすべての不正を排除します。 – CodesInChaos

+0

申し訳ありませんが、最近忙しかったです。私は賞金が切れる前に今夜これを見ていきます:) –

+0

私はあなたにリンクを+1しました。もちろん、それらのリンクのメソッドは、確かに私が探していたものではない、アプリをすべて信用させます。それでも、テスト環境の人にとっては興味深いかもしれません。 :) –

関連する問題