Androidのサーバーおよびクライアントアプリケーション用にSRP protocolを実装しようとしています。私はOpenSSLがSRPプロトコルをサポートしていることを確認しましたが、AndroidアプリからOpenSSL APIにどのようにアクセスできますか? JNIはOpenSSL C APIにアクセスする唯一の方法ですか? Android用OpenSSLの構築方法と、JNI経由でOpenSSL SRP APIを呼び出す方法については、サンプルがありますか?AndroidアプリからOpenSSL SRP APIを呼び出す方法は?
答えて
私はあまりにも、SRPを好きSRP protocol
を実装しようとしています。 Thomas Wuの仕様、またはIETFの仕様のバージョン6を必ず使用してください。
OpenSSLは、SRPプロトコルをサポートしていますが、どのように私はAndroidアプリからのOpenSSL APIにアクセスすることができますか? JNIはOpenSSL C APIにアクセスする唯一の方法ですか?
はい。
Java実装のためにBouncy Castleを参照することもできます。
私は、AndroidのためにOpenSSLを構築する方法を参照することができます任意のサンプル...
はあるのOpenSSLウィキにOpenSSL and Androidを参照してください。
AndroidはOpenSSLのコピーを持ち歩いていますが、SRPが含まれているかどうかはわかりません。
私が参照できる任意のサンプル... JNI経由のOpenSSL SRP APIを呼び出すためにはあります。
私は認識していません。最も近いのはs_client
のソースコード、-srpuser <user>
のようなオプション、srp_arg_st
のようなデータ構造、そしてssl_srp_verify_param_cb
とssl_give_srp_client_pwd_cb
のような機能です。
s_client
のソースコードは<openssl src dir>/apps/s_client.c
にあります。ライン1365は、(1.0.2hから)面白そうだ:
# ifndef OPENSSL_NO_SRP
if (srp_arg.srplogin) {
if (!srp_lateuser && !SSL_CTX_set_srp_username(ctx, srp_arg.srplogin)) {
BIO_printf(bio_err, "Unable to set SRP username\n");
goto end;
}
srp_arg.msg = c_msg;
srp_arg.debug = c_debug;
SSL_CTX_set_srp_cb_arg(ctx, &srp_arg);
SSL_CTX_set_srp_client_pwd_callback(ctx, ssl_give_srp_client_pwd_cb);
SSL_CTX_set_srp_strength(ctx, srp_arg.strength);
if (c_msg || c_debug || srp_arg.amp == 0)
SSL_CTX_set_srp_verify_param_callback(ctx,
ssl_srp_verify_param_cb);
}
# endif
そしてライン475周りからsrp_arg_st
:
/* This is a context that we pass to all callbacks */
typedef struct srp_arg_st {
char *srppassin;
char *srplogin;
int msg; /* copy from c_msg */
int debug; /* copy from c_debug */
int amp; /* allow more groups */
int strength /* minimal size for N */ ;
} SRP_ARG;
を明らかに、OpenSSLはネイティブCで、JNIを使用していません。 OpenSSL SRP APIを呼び出す方法
...?
OpenSSL wikiの標準TLS Clientの補足として、Cで2〜3つのことを行う必要があります。 (私はAndroid/JNIの部分を踏んでいます)。
最初にに設定する場合は、SSL_CTX_set_srp_*_callback
を設定する必要があります。コールバックは、ライブラリがユーザ名とパスワードのような情報をTLSクライアントに要求する方法です。
第2の SRP以外のすべての暗号スイートを削除します。つまり、はありませんは、"HIGH:!aNULL:!MD5:!RC4"
のような暗号リストを使用します。
第3のは、SRP暗号スイートのみを使用します。 "HIGH:!aNULL:..."
を使用したときに暗号リストがどのように見えるかわかりません。あなたがopenssl ciphers
man pageに行くなら、あなたは暗号リストに必要な名前で参照SRP-RSA-AES-256-CBC-SHA
を横断することができるはず
$ openssl ciphers -v | grep SRP | grep -v DSS | cut -f 1 -d ' '
SRP-RSA-AES-256-CBC-SHA
SRP-AES-256-CBC-SHA
SRP-RSA-AES-128-CBC-SHA
SRP-AES-128-CBC-SHA
SRP-RSA-3DES-EDE-CBC-SHA
SRP-3DES-EDE-CBC-SHA
:しかし、あなたが暗号のリストを選ぶ渡すことができます。残念ながら、SRP暗号スイートはありません。
ただし、ICANNのTLS paramter registryに移動して、名前を取得することができます:
- SRP-RSA-AES-256-CBC-SHA→TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA
- SRP-AES-256-CBC-SHA→TLS_SRP_SHA_WITH_AES_256_CBC_SHA
- SRP-RSA-AES-128-CBC-SHA→TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA
- SRP-AES-128-CBC-SHA→TLS_SRP_SHA_WITH_AES_128_CBC_SHA
- SRP-RSA-3DES-EDE-CBC-SHA→TLS
_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA
SSL_CTX_set_cipher_list
やSSL_set_cipher_list
のために使用します。 static const char const PREFERRED_CIPHERS[] =
"TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA:TLS_SRP_SHA_WITH_AES_256_CBC_SHA:
TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA:TLS_SRP_SHA_WITH_AES_128_CBC_SHA:
TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA:TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA";
- 1. Xamarin AndroidアプリからAndroidアプリを呼び出す方法
- 2. AndroidからWordNetを呼び出す方法は? [Android用ワードネットAPI]
- 3. Androidアプリのメソッドを遠隔から呼び出す方法は?
- 4. OpenSSL SRP経由でLinuxサーバで動作するAndroid SRPクライアント
- 5. 他のアプリからAndroidの呼び出し方法
- 6. フレックスモバイルの別のアプリからアプリを呼び出す方法
- 7. Android携帯で自分のアプリからFoursquareアプリケーションを呼び出す方法は?
- 8. cordovaアプリからカスタムコードバプラグインを呼び出す方法は?
- 9. MonotouchからプライベートAPIを呼び出す方法は?
- 10. Yiiのフロントエンド/バックエンドアプリケーションからAPIを呼び出す方法は?
- 11. JavascriptからAPIを安全に呼び出す方法は?
- 12. javascriptからdynamic crm 2016 rest apiを呼び出す方法は?
- 13. DialogflowウェブフックからGoogle Assistant APIを呼び出す方法は?
- 14. WindowsアプリケーションからAJAX API関数を呼び出す方法は?
- 15. elastseertからelasticsearch - ELK - APIを呼び出す方法は?
- 16. NDK C++スレッドからJava APIを呼び出す方法は?
- 17. httpsウェブサイトからweb apiを呼び出す方法は?
- 18. Reactjsからlocalhosted APIを呼び出す方法は?
- 19. Socket.ioイベントからRESTfulなApiサービスを呼び出す方法は?
- 20. .netからCEN/XFS APIを呼び出す方法は?
- 21. javascriptからGoogle Tasks APIを呼び出す方法は?
- 22. AndroidでOauth 1.0 APIを呼び出す方法は?
- 23. 私はバイナリからOpenSSLを呼び出す必要が終了
- 24. androidアプリケーションからWebサービスを呼び出す方法は?
- 25. Androidの別のクラスからメソッドを呼び出す方法は?
- 26. Xamarin Androidから.soファイルのメソッドを呼び出す方法は?
- 27. showDialog(i)からshowDialog(i)を呼び出す方法は? (Android)
- 28. AndroidからPHP関数を呼び出す方法は?
- 29. Androidで別のアクティビティからボタンを呼び出す方法は?
- 30. AndroidのアクティビティからJavaクラスを呼び出す方法は?
あなたは今までSRPは、OpenSSLを使用してAndroidの下で働いて得ましたか。私は本当にセキュリティプロパティのために暗号が好きです。 – jww
JNIを扱っていないので、私はJavaの実装https://code.google.com/archive/p/srpforjava/downloadsを試しています。 – Harish