Beim Versuch, TLS 1.0 zu deaktivieren, benötigen KitKat-Geräte Zugriff auf meine API. Ich habe versucht, die Standard-Socket-Fabrik ohne Erfolg zu überschreiben. Ich habe versucht, nach okhttp zu konvertieren. Funktioniert immer noch nicht. Wie erhalte ich Android KitKat zur Verbindung mit meiner API?Android 4.1 bis 4.4 KitKat - TLS 1.2 für API aktivieren
1
A
Antwort
2
Ich hatte das gleiche Problem auf Pre-Lollipop-Geräten. Wie ich Retrofit verwende, hier ist die Lösung für OkHttp.
Tls12SocketFactory.java
:
public class Tls12SocketFactory extends SSLSocketFactory {
private static final String[] TLS_V12_ONLY = {"TLSv1.2"};
final SSLSocketFactory delegate;
public Tls12SocketFactory(SSLSocketFactory base) {
this.delegate = base;
}
@Override
public String[] getDefaultCipherSuites() {
return delegate.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return delegate.getSupportedCipherSuites();
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
return patch(delegate.createSocket(s, host, port, autoClose));
}
@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
return patch(delegate.createSocket(host, port));
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
return patch(delegate.createSocket(host, port, localHost, localPort));
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
return patch(delegate.createSocket(host, port));
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
return patch(delegate.createSocket(address, port, localAddress, localPort));
}
private Socket patch(Socket s) {
if (s instanceof SSLSocket) {
((SSLSocket) s).setEnabledProtocols(TLS_V12_ONLY);
}
return s;
}
}
OkHttpUtils.java
:
public class OkHttpUtills {
public static OkHttpClient createHttpClient() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder client = new OkHttpClient.Builder()
.followRedirects(true)
.followSslRedirects(true)
.addInterceptor(logging)
.cache(null)
.connectTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS);
return enableTls12OnPreLollipop(client).build();
}
/**
* Enables TLSv1.2 protocol (which is disabled by default)
* on pre-Lollipop devices, as well as on Lollipop, because some issues can take place on Samsung devices.
*
* @param client OKHtp client builder
* @return
*/
private static OkHttpClient.Builder enableTls12OnPreLollipop(OkHttpClient.Builder client) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
try {
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, null, null);
client.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()));
ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.build();
List<ConnectionSpec> specs = new ArrayList<>();
specs.add(cs);
specs.add(ConnectionSpec.COMPATIBLE_TLS);
specs.add(ConnectionSpec.CLEARTEXT);
client.connectionSpecs(specs);
} catch (Exception exc) {
Log.e("OkHttpTLSCompat", "Error while setting TLS 1.2", exc);
}
}
return client;
}
}
Hope this Sie helfen könnte.
Verwandte Themen
- 1. So aktivieren Sie TLS 1.2-Unterstützung in einer Android-Anwendung (unter Android 4.1 JB)
- 2. Android 4.2.2, Wie TLS 1.2 für HttpsURLConnection aktivieren?
- 3. Android erkennt USB-Speicher für kitkat (4.4)
- 4. Aktivieren TLS 1.2 auf Mac OSX
- 5. android 4.1 - 4.4 system_alert_window erlaubnis
- 6. TLS 1.1/1.2 Unterstützung für Xamarin.Android
- 7. Fedora-Konfiguration zum Aktivieren von TLS 1.2
- 8. Ebay API SSL? tls 1.2
- 9. Aktivieren von TLS 1.2 auf Codename eine App für Android 4.0.X, 4.1.X und 4.2.X
- 10. Aktivieren von TLS 1.2 in Java 1.6
- 11. Android KitKat 4.4 Ordner auf SD-Karte
- 12. Xamarin-Formulare - Salesforce - TLS 1.1 oder TLS 1.2. Fehler für POST-API-Aufruf für Android
- 13. Android KitKat 4.4 Chromium WebView "v8_value_converter_impl.cc" Fehler
- 14. WebView Unterschied in Android 4.3 bis 4.4
- 15. TLS 1.1, 1.2 in WebView für Android <= 4.3
- 16. Kompatible Oracle Version für TLS 1.2
- 17. Ejabberd tls 1.2 nur
- 18. Wie aktualisiere ich Stripe für TLS 1.2
- 19. Aktivieren Sie die Verwendung von TLS 1.2 in SoapUI Pro
- 20. Wie aktivieren Sie die Komprimierungsmethode in Tls-1.2
- 21. So aktivieren Sie TLS 1.2 in Java 7
- 22. TLS 1.2 ECDHE_RSA-Signatur
- 23. Kitkat 4.4 ANR Fehler nach Veröffentlichung
- 24. Android 4.4 (KitKat) und neuere Chromium Webview laden Seite unvollständig
- 25. TLS 1.2-Konfiguration für Hybris-Server
- 26. TLS 1.2-Verbindungen für den Zahlungsprozessor
- 27. TLS v1.2 Unterstützung auf Webview Android
- 28. Hintergrundfarbe des Überlaufmenüs, wenn CLICKED android KitKat (4.4)
- 29. Ausnutzen der transparenten Statusleiste in Android 4.4 KitKat
- 30. Native Absturz bei /system/lib/libwebviewchromium.so auf kitkat Android 4.4
Als eine Nebenbemerkung ist der Grund, warum diese Strategie für mich nicht funktionierte, weil meine AWS ALB-Konfiguration die Sicherheitsrichtlinie verwendete: ELBSecurityPolicy-TLS-1-2-2017-01 http://docs.aws. amazon.com/elasticloadbalancing/latest/classic/elb-security-policy-table.html Ich löste das Problem der gescheiterten Kommunikation durch den Wechsel zu ELBSecurityPolicy-TLS-1-1-2017-01, die mehr Chiffren bietet. – jnrcorp