Merge pull request #554 from SamWhited/tls
Enable TLSv1.1 and 1.2 and add option to enable/disable SSLv3
This commit is contained in:
		
						commit
						0b61fb0129
					
				| @ -249,8 +249,10 @@ | ||||
|     <string name="pref_force_encryption">Force end-to-end encryption</string> | ||||
|     <string name="pref_force_encryption_summary">Always send messages encrypted (except for conferences)</string> | ||||
|     <string name="pref_dont_save_encrypted">Don’t save encrypted messages</string> | ||||
|     <string name="pref_dont_save_encrypted_summary">Warning: This could lead to message loss</string> | ||||
|     <string name="pref_expert_options">Expert options</string> | ||||
| 		<string name="pref_dont_save_encrypted_summary">Warning: This could lead to message loss</string> | ||||
| 		<string name="pref_enable_legacy_ssl">Enable legacy SSL</string> | ||||
| 		<string name="pref_enable_legacy_ssl_summary">Enables SSLv3 support for legacy servers. Warning: SSLv3 is considered insecure.</string> | ||||
| 		<string name="pref_expert_options">Expert options</string> | ||||
|     <string name="pref_expert_options_summary">Please be very careful with those</string> | ||||
|     <string name="pref_use_larger_font">Increase font size</string> | ||||
|     <string name="pref_use_larger_font_summary">Use larger font sizes across the entire app</string> | ||||
|  | ||||
| @ -88,6 +88,11 @@ | ||||
|                     android:key="dont_save_encrypted" | ||||
|                     android:summary="@string/pref_dont_save_encrypted_summary" | ||||
|                     android:title="@string/pref_dont_save_encrypted" /> | ||||
|                 <CheckBoxPreference | ||||
|                     android:defaultValue="false" | ||||
|                     android:key="enable_legacy_ssl" | ||||
|                     android:summary="@string/pref_enable_legacy_ssl_summary" | ||||
|                     android:title="@string/pref_enable_legacy_ssl" /> | ||||
|             </PreferenceCategory> | ||||
|             <PreferenceCategory android:title="@string/pref_expert_options_other" > | ||||
|                 <CheckBoxPreference | ||||
| @ -105,4 +110,4 @@ | ||||
|             android:title="@string/pref_never_send_crash" /> | ||||
|     </PreferenceCategory> | ||||
| 
 | ||||
| </PreferenceScreen> | ||||
| </PreferenceScreen> | ||||
|  | ||||
| @ -10,8 +10,10 @@ import java.security.KeyManagementException; | ||||
| import java.security.NoSuchAlgorithmException; | ||||
| import java.security.SecureRandom; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.HashMap; | ||||
| import java.util.Hashtable; | ||||
| import java.util.LinkedList; | ||||
| import java.util.List; | ||||
| import java.util.Map.Entry; | ||||
| 
 | ||||
| @ -26,15 +28,19 @@ import org.xmlpull.v1.XmlPullParserException; | ||||
| 
 | ||||
| import de.duenndns.ssl.MemorizingTrustManager; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.SharedPreferences; | ||||
| import android.os.Bundle; | ||||
| import android.os.PowerManager; | ||||
| import android.os.PowerManager.WakeLock; | ||||
| import android.os.SystemClock; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.util.Log; | ||||
| import android.util.SparseArray; | ||||
| import eu.siacs.conversations.Config; | ||||
| import eu.siacs.conversations.entities.Account; | ||||
| import eu.siacs.conversations.services.XmppConnectionService; | ||||
| import eu.siacs.conversations.ui.StartConversationActivity; | ||||
| import eu.siacs.conversations.utils.CryptoHelper; | ||||
| import eu.siacs.conversations.utils.DNSHelper; | ||||
| import eu.siacs.conversations.utils.zlib.ZLibOutputStream; | ||||
| @ -105,6 +111,7 @@ public class XmppConnection implements Runnable { | ||||
| 	private OnBindListener bindListener = null; | ||||
| 	private OnMessageAcknowledged acknowledgedListener = null; | ||||
| 	private MemorizingTrustManager mMemorizingTrustManager; | ||||
|     private final Context applicationContext; | ||||
| 
 | ||||
| 	public XmppConnection(Account account, XmppConnectionService service) { | ||||
| 		this.mRandom = service.getRNG(); | ||||
| @ -113,6 +120,7 @@ public class XmppConnection implements Runnable { | ||||
| 		this.wakeLock = service.getPowerManager().newWakeLock( | ||||
| 				PowerManager.PARTIAL_WAKE_LOCK, account.getJid()); | ||||
| 		tagWriter = new TagWriter(); | ||||
|         applicationContext = service.getApplicationContext(); | ||||
| 	} | ||||
| 
 | ||||
| 	protected void changeStatus(int nextStatus) { | ||||
| @ -377,13 +385,13 @@ public class XmppConnection implements Runnable { | ||||
| 		iq.addChild("ping", "urn:xmpp:ping"); | ||||
| 		this.sendIqPacket(iq, new OnIqPacketReceived() { | ||||
| 
 | ||||
| 			@Override | ||||
| 			public void onIqPacketReceived(Account account, IqPacket packet) { | ||||
| 				Log.d(Config.LOGTAG, account.getJid() | ||||
| 						+ ": online with resource " + account.getResource()); | ||||
| 				changeStatus(Account.STATUS_ONLINE); | ||||
| 			} | ||||
| 		}); | ||||
|             @Override | ||||
|             public void onIqPacketReceived(Account account, IqPacket packet) { | ||||
|                 Log.d(Config.LOGTAG, account.getJid() | ||||
|                         + ": online with resource " + account.getResource()); | ||||
|                 changeStatus(Account.STATUS_ONLINE); | ||||
|             } | ||||
|         }); | ||||
| 	} | ||||
| 
 | ||||
| 	private Element processPacket(Tag currentTag, int packetType) | ||||
| @ -519,6 +527,14 @@ public class XmppConnection implements Runnable { | ||||
| 		tagWriter.writeTag(startTLS); | ||||
| 	} | ||||
| 
 | ||||
| 	private SharedPreferences getPreferences() { | ||||
| 		return PreferenceManager.getDefaultSharedPreferences(applicationContext); | ||||
| 	} | ||||
| 
 | ||||
| 	private boolean enableLegacySSL() { | ||||
| 		return getPreferences().getBoolean("enable_legacy_ssl", false); | ||||
| 	} | ||||
| 
 | ||||
| 	private void switchOverToTls(Tag currentTag) throws XmlPullParserException, | ||||
| 			IOException { | ||||
| 		tagReader.readTag(); | ||||
| @ -535,6 +551,21 @@ public class XmppConnection implements Runnable { | ||||
| 					socket.getInetAddress().getHostAddress(), socket.getPort(), | ||||
| 					true); | ||||
| 
 | ||||
| 			// Support all protocols except legacy SSL. | ||||
| 			// The min SDK version prevents us having to worry about SSLv2. In future, this may be | ||||
| 			// true of SSLv3 as well. | ||||
| 			final String[] supportProtocols; | ||||
| 			if (enableLegacySSL()) { | ||||
| 				supportProtocols = sslSocket.getSupportedProtocols(); | ||||
| 			} else { | ||||
| 				final List<String> supportedProtocols = new LinkedList<String>(Arrays.asList( | ||||
| 							sslSocket.getSupportedProtocols())); | ||||
| 				supportedProtocols.remove("SSLv3"); | ||||
| 				supportProtocols = new String[supportedProtocols.size()]; | ||||
| 				supportedProtocols.toArray(supportProtocols); | ||||
| 			} | ||||
| 			sslSocket.setEnabledProtocols(supportProtocols); | ||||
| 
 | ||||
| 			if (verifier != null | ||||
| 					&& !verifier.verify(account.getServer(), | ||||
| 							sslSocket.getSession())) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch