2011-11-18 4 views
1

Android 앱에서 https url의 콘텐츠를 가져옵니다. SSL 인증서 확인 오류를 피하기 위해 SSL 공개 키를 내 키 저장소에 추가합니다.이 키 저장소는 앱의 내 res/raw 폴더에 있습니다. http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html에 대한 지침을 따르십시오.이 모든 것은 지금까지 정상적으로 작동합니다.Proguard가 Android의 SSL 키 저장소에 문제 발생

.. Proguard를 활성화하고 난독 화까지. Proguard를 활성화하면 다음과 같은 오류가 발생합니다.

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) 

나는 꽤 이해하지 못합니다. 왜 URL의 idenfitication은 도메인 이름과 함께 /<ipAddress>을 가져 오는 방식으로 바뀌지 만, Proguard 난독 화 없이는 잘 작동합니다. 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 *; 
} 

업데이트 :

또한 제거 -repackageclasses 'XYZ

은 HTTPS의 콘텐츠를 가져 오는위한 세션 객체로서, 나는에 MyHttpClient에서 같은 소스를 사용 '및 -allowaccessmodification은 차이를 만들지 않으며 동일한 오류가 발생합니다.

답변