Androidアプリからnode.jsベースのTLSサーバーに接続しようとしています。当然、自己署名証明書を使用しているので失敗します。Android TLS接続と自己署名入りの証明書
私のアプリに証明書を追加して、Androidに何とかそれを信頼させることができますか? HTTPSを使用していないことに注意してください。これはTCP接続によるTLSです。
Androidアプリからnode.jsベースのTLSサーバーに接続しようとしています。当然、自己署名証明書を使用しているので失敗します。Android TLS接続と自己署名入りの証明書
私のアプリに証明書を追加して、Androidに何とかそれを信頼させることができますか? HTTPSを使用していないことに注意してください。これはTCP接続によるTLSです。
多くの読書の後、私は答えを思いついた。
かなり良いガイドはここにある: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);
アプリケーションに証明書を追加することはお勧めしません。証明書の更新に問題があります。
Self-signed SSL acceptance on Android
HTTPS GET (SSL) with Android and self-signed server certificate
:
は、あなたが見たことがありますか?
私はアプリケーションに指紋をハードコードすることをお勧めします。新しい指紋を使用するようにアプリケーションを更新するのは難しくありません。また、CAに関連するすべての不正を排除します。 – CodesInChaos
申し訳ありませんが、最近忙しかったです。私は賞金が切れる前に今夜これを見ていきます:) –
私はあなたにリンクを+1しました。もちろん、それらのリンクのメソッドは、確かに私が探していたものではない、アプリをすべて信用させます。それでも、テスト環境の人にとっては興味深いかもしれません。 :) –