In an Android app, I fetch content from a https url; in order to avoid SSL cert verification errors, I add the SSL public key to my keystore, which then resides in my res/raw folder of the app.
Following the instructions as on http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html, which all works fine so far.
..until I activate Proguard and obfuscation. With Proguard activated, I am getting the following error,
ERROR/Login(4401): Could not login.
javax.net.ssl.SSLException: hostname in certificate didn't match: <store.mydomain.com/185.165.192.15> != <store.mydomain.com> OR <store.mydomain.com>
at xyz.fd.a(Unknown Source)
which I don’t quite understand. Why would the idenfitication of the url change in a way that it’s also fetching the /<ipAddress> together with the domain name, whereas it works fine without Proguard obfuscation.
As the httpClient for fetching the https content, I use sources as in MyHttpClient at:
http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html
proguard.cfg:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep class * extends DefaultHttpClient
-ignorewarnings
-repackageclasses 'xyz'
-allowaccessmodification
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
Update:
Also removing -repackageclasses ‘xyz’ and -allowaccessmodification doesn’t make a difference, same error.
I was using the latest httpclient 4.1.2. Now when I switch back to 4.1.1, the problem is gone.
Also see: http://comments.gmane.org/gmane.comp.apache.httpclient.user/262