Ich versuche, die SRP protocol für eine Server- und Client-App in Android zu implementieren. Ich habe überprüft, dass OpenSSL das SRP-Protokoll unterstützt, aber wie kann ich auf OpenSSL-APIs von der Android App zugreifen? Ist JNI die einzige Möglichkeit, auf die OpenSSL C-APIs zuzugreifen? Gibt es Beispiele, die ich beziehen kann, wie man das OpenSSL für Android baut und die OpenSSL SRP APIs über JNI aufruft.So rufen Sie OpenSSL SRP APIs von der Android App aus auf?
Antwort
Ich versuche, die SRP protocol
ich SRP wie auch umzusetzen. Stellen Sie sicher, dass Sie die Spezifikation von Thomas Wu oder die Version 6 der IETF-Spezifikation verwenden.
OpenSSL unterstützt SRP-Protokoll, aber wie kann ich auf OpenSSL-APIs aus dem Android App? Ist JNI die einzige Möglichkeit, auf die OpenSSL C-APIs zuzugreifen?
Ja.
Sie könnten auch auf Bouncy Castle für eine Java-Implementierung suchen.
Gibt es Beispiele, die ich finden kann, wie die OpenSSL für Android bauen ...
OpenSSL and Android Auf der OpenSSL-Wiki.
Android trägt eine Kopie von OpenSSL, aber ich bin mir nicht sicher, dass es SRP enthält.
Gibt es Beispiele, die ich beziehen kann ... die OpenSSL SRP-APIs durch JNI nennen.
Nicht das ist mir bekannt. Der nächste, den Sie finden, ist der Quellcode zu s_client
, Optionen wie -srpuser <user>
und Datenstrukturen wie srp_arg_st
und Funktionen wie ssl_srp_verify_param_cb
und ssl_give_srp_client_pwd_cb
.
Sie können den Quellcode für s_client
unter <openssl src dir>/apps/s_client.c
finden. Linie 1365 sieht interessant aus (von 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
Und die srp_arg_st
aus der ganzen Linie 475:
/* 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;
Offensichtlich OpenSSL ist native C und nicht JNI verwenden.
Wie OpenSSL SRP-APIs aufrufen ...?
Auf den höchsten Ebenen, müssen Sie zwei oder drei Dinge in C von ihnen als Ergänzung zu einer Standard TLS Client vom OpenSSL Wiki Denken tun. (Ich bin Seite Schritt Android/JNI Teil).
Zuerst, müssen Sie die SSL_CTX_set_srp_*_callback
setzen. Bei den Callbacks fordert die Bibliothek Ihren TLS-Client zur Eingabe von Informationen wie Benutzername und Passwort auf.
Zweite, entfernen Sie alle Nicht-SRP-Chiffre-Suiten. Das bedeutet, Sie nicht verwenden Sie eine Chiffre-Liste wie "HIGH:!aNULL:!MD5:!RC4"
.
Dritte, Sie verwenden nur SRP Cipher Suites. Ich bin nicht sicher, wie die Verschlüsselungsliste aussehen würde, wenn Sie "HIGH:!aNULL:..."
verwenden. Aber man kann mit der Liste der Chiffren der Hand pflücken:
$ 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
Wenn Sie zum openssl ciphers
man page gehen, dann sollten Sie in der Lage sein, auf überqueren SRP-RSA-AES-256-CBC-SHA
mit dem Namen in der Chiffre Liste benötigt. Leider fehlen die SRP Cipher Suites.
Sie können jedoch zu ICANNs gehen TLS paramter registry und die Namen erhalten:
- 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-CBC-EDE-sha → TLS _SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA
- SRP-3DES-EDE-CBC-SHA → TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA
Also die Zeichenfolge würden Sie für SSL_CTX_set_cipher_list
verwenden oder 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. So rufen Sie den Android-Rechner aus einer App
- 2. Android - So rufen Sie Wechselkurse
- 3. So rufen Sie die MongoLabs (MongoDB) RESTFULL APIS zum Hinzufügen von Dokumenten in PHP auf?
- 4. So rufen Sie die Liste der verfügbaren Benachrichtigungstöne auf Android
- 5. So rufen Sie eine Funktion aus der kendoListView-Vorlage auf
- 6. So rufen Sie Path.Combine von MSBuild auf?
- 7. So rufen Sie die Fragmentmethode aus der Hauptaktivität auf
- 8. So rufen Sie Überladungsfunktionen aus der Basisklasse auf (nicht abstrakt)?
- 9. So rufen Sie die CORBA-Schnittstelle von C# aus auf?
- 10. So rufen Sie einen .NET-Webdienst von Android auf?
- 11. So rufen Sie Monitor.TryEnter auf
- 12. Rufen Sie eine native Android-App von ionic app
- 13. So testen Sie APIs
- 14. So rufen Sie ein Fragment auf oder rufen es auf, wenn Sie auf klicken.
- 15. So rufen Sie verpasste Anrufe auf Android SDK 2.2
- 16. wie man openssl auf Android
- 17. So rufen Sie die Methode in der Watchkit-Erweiterung von der übergeordneten iOS-App auf
- 18. So rufen Sie eine Aktivität aus einer Vorzugsaktivität auf?
- 19. So rufen Sie Wert aus dem Webformular auf?
- 20. So rufen Sie eine Dart-Funktion aus Javascript auf?
- 21. So starten Sie die Android App von Studio aus installiert
- 22. So rufen Sie NetSuite-Restlets extern auf?
- 23. So rufen Sie finishAffinity() in der Serviceklasse auf?
- 24. So rufen Sie Variablen aus einem importierten parameterabhängigen Skript auf?
- 25. So rufen Sie die validateValue-Methode auf
- 26. So rufen Sie Factory-Methoden aus HTML in angularjs auf?
- 27. So rufen Sie C# -Bibliotheken aus Excel auf?
- 28. So rufen Sie den Hintergrundthread auf
- 29. So rufen Sie eine Zeichenfolge aus res string.xml auf?
- 30. So rufen Sie Daten aus der Firebase-Datenbank ab?
Haben Sie jemals bekommen SRP unter Android arbeiten OpenSSL? Ich mag die Chiffre wegen ihrer Sicherheitseigenschaften. – jww
Ich probiere die Java-Implementierung https://code.google.com/archive/p/srpforjava/downloads aus, da sie sich nicht mit JNI befasst – Harish