From 3b1ff558db31774995a780896a848b2cffd97194 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 23 Feb 2022 10:30:51 +0100 Subject: [PATCH] SSL debug info --- app/src/main/java/eu/faircode/email/Log.java | 96 +++++++++++--------- 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index 51c4d4fafc..81bf53fe13 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -148,6 +148,7 @@ import javax.net.ssl.SSLContext; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLPeerUnverifiedException; import javax.net.ssl.SSLSocket; +import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import io.requery.android.database.CursorWindowAllocationException; @@ -2698,51 +2699,62 @@ public class Log { static SpannableStringBuilder getCiphers() { SpannableStringBuilder ssb = new SpannableStringBuilderEx(); - for (String protocol : new String[]{"SSL", "TLS"}) { + try { + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init((KeyStore) null); + + ssb.append("Provider: ").append(tmf.getProvider().getName()).append("\r\n"); + ssb.append("Algorithm: ").append(tmf.getAlgorithm()).append("\r\n"); + + TrustManager[] tms = tmf.getTrustManagers(); + if (tms != null) + for (TrustManager tm : tms) + ssb.append("Manager: ").append(tm.getClass().getName()).append("\r\n"); + + SSLContext sslContext; try { - int begin = ssb.length(); - ssb.append(protocol).append("\n\n"); - ssb.setSpan(new StyleSpan(Typeface.BOLD), begin, ssb.length(), 0); - - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - tmf.init((KeyStore) null); - - SSLContext sslContext = SSLContext.getInstance(protocol); - sslContext.init(null, tmf.getTrustManagers(), null); - SSLSocket socket = (SSLSocket) sslContext.getSocketFactory().createSocket(); - - List protocols = new ArrayList<>(); - protocols.addAll(Arrays.asList(socket.getEnabledProtocols())); - - for (String p : socket.getSupportedProtocols()) { - boolean enabled = protocols.contains(p); - int start = ssb.length(); - ssb.append(p); - if (!enabled) - ssb.setSpan(new StrikethroughSpan(), start, ssb.length(), 0); - ssb.append("\r\n"); - } - ssb.append("\r\n"); - - List ciphers = new ArrayList<>(); - ciphers.addAll(Arrays.asList(socket.getEnabledCipherSuites())); - - for (String c : socket.getSupportedCipherSuites()) { - boolean enabled = ciphers.contains(c); - if (!enabled) - ssb.append('('); - int start = ssb.length(); - ssb.append(c); - if (!enabled) { - ssb.setSpan(new StrikethroughSpan(), start, ssb.length(), 0); - ssb.append(')'); - } - ssb.append("\r\n"); - } - ssb.append("\r\n"); + sslContext = SSLContext.getInstance("SSL"); } catch (Throwable ex) { - ssb.append(ex.toString()); + Log.e(ex); + sslContext = SSLContext.getInstance("TLS"); } + + ssb.append("Context: ").append(sslContext.getProtocol()).append("\r\n\r\n"); + + sslContext.init(null, tmf.getTrustManagers(), null); + SSLSocket socket = (SSLSocket) sslContext.getSocketFactory().createSocket(); + + List protocols = new ArrayList<>(); + protocols.addAll(Arrays.asList(socket.getEnabledProtocols())); + + for (String p : socket.getSupportedProtocols()) { + boolean enabled = protocols.contains(p); + int start = ssb.length(); + ssb.append(p); + if (!enabled) + ssb.setSpan(new StrikethroughSpan(), start, ssb.length(), 0); + ssb.append("\r\n"); + } + ssb.append("\r\n"); + + List ciphers = new ArrayList<>(); + ciphers.addAll(Arrays.asList(socket.getEnabledCipherSuites())); + + for (String c : socket.getSupportedCipherSuites()) { + boolean enabled = ciphers.contains(c); + if (!enabled) + ssb.append('('); + int start = ssb.length(); + ssb.append(c); + if (!enabled) { + ssb.setSpan(new StrikethroughSpan(), start, ssb.length(), 0); + ssb.append(')'); + } + ssb.append("\r\n"); + } + ssb.append("\r\n"); + } catch (Throwable ex) { + ssb.append(ex.toString()); } ssb.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_SMALL), 0, ssb.length(), 0);