2010-11-09 10 views
9

Şu anda geliştiricilerin kullanması için RPC hizmetleri geliştiriyorum, ancak başka bir uygulamanın hata ayıklama anahtarı ile bunların açık anahtarını birbirinden ayırt edebildiğimden emin olmak isterim. Başka bir uygulamanın anahtarını kontrol etmenin ve bunun bir hata ayıklama anahtarı olup olmadığını ve yayınlanmış bir uygulama anahtarının OLMADIĞINI söylemenin bir yolu var mı?Uygulama imzasının hata ayıklayıp yayınlanmadığını kontrol etmenin bir yolu var mı?

Bunun amacı, uygulamalarının geliştirilme veya yayınlanma durumunda olup olmadıklarını anlayabilmektir; çünkü, benim dev sunucuma veya üretim sunucumuma erişip erişmeyeceklerini anlayabilmem gerekir.

+0

İkiniz de gerçekten yararlı bilgiler sağladınız. Her iki cevabı da oylama. –

cevap

4

gelecekte en fazla 1 yıl olan bir notAfter tarih & zamanı var - bu kadar kısa bir değer Android Market tarafından kabul edilmeyen - Sen arasında ayrım yapmak kullanabilirsin geliştirici imzalı oluşturur? Ya da .. sadece uygulamanın kullandığı publickey'i kontrol edebilirsin - onların uygulamalarının android.content.pm.Signature ile RPC isteklerini imzalamasını sağla.

 
PackageInfo pkgInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); 

for (Signature appSignature : pkgInfo.signatures) { 
    // javax.security - NOT java.security! 
    X509Certificate appCertificate = X509Certificate.getInstance(appSignature.toByteArray()); 
    // appCertificate.getNotAfter() can give you the date & time the cert expires 
    // appCertificate.getPublicKey() can give you the public key you sign the RPC requests with. 
    // appCertificate.getSubjectDN() will give you a Principal named "CN=Android Debug,O=Android,C=US" for any debug certificate that hasn't been handcrafted by the developer. 
} 
+0

Yardımlarınız için teşekkür ederiz! O kadar uzun zaman oldu ki neredeyse pes ettim. Buradaki sorun, anahtarın "varsayılan" 1 yıl olmasıdır. Hata ayıklama anahtarlarını 25 yıl boyunca ayarladım ... Bu yüzden farkı anlayabilmem gerek. Düşüncesi olan var mı? –

+0

Bence bu doğru yol. GetSubjectDN() kesinlikle bir olasılıktır. Bana bu bilgiyi nerede bulduğunu söyler misin? –

+0

Bu rehberle ilgili daha fazla araştırma yaptıktan sonra, etkili bir çözüm buldum. Çok parçalı, ancak olabildiğince çok şartı var. İlk tarihi kontrol ediyor. Ardından, SubjectDN. Son olarak, bir başka başarısızlıkta, Genel Anahtarı bir Market Sorguyla eşleştiriyorum. Kesinlikle, tam bir çözüme bile yakın değil, fakat ihtiyacımın çoğunu barındırıyor. Bu harika bilgi için tekrar teşekkürler. –

4
static final String DEBUGKEY = 
     " key ";  


public static boolean signedWithDebugKey(Context context, Class<?> cls) 
{ 
    boolean result = false; 
    try { 
     PackageInfo pinfo = context.getPackageManager().getPackageInfo("your package name",PackageManager.GET_SIGNATURES); 
     Signature sigs[] = pinfo.signatures; 

     Log.d(TAG,sigs[0].toCharsString()); 

     if (DEBUGKEY.equals(sigs[0].toCharsString())) { 
      result = true; 
      Log.d(TAG,"package has been signed with the debug key"); 
     } else { 
      Log.d(TAG,"package signed with a key other than the debug key"); 
     } 

    } catch (android.content.pm.PackageManager.NameNotFoundException e) { 
     return false; 
    } 

    return result; 

} 

Çalıştır debugkey ile bu kod ilk kez bu Alway return false, ancak LogCat kodlanmış anahtarı alırsınız. Kodlanmış anahtarı kopyalayın ve DEBUGKEY'in "anahtarını" değiştirin ve iyi çalışacaktır. Varsayılan Eclipse kullandığı androiddebugkey (örneğin) tarafından

+0

Örneğin, javax.security.X509Certificate - sigs [0] .toCharsString() işlevi "androiddebugkey" i döndürmezse, imzayı paketinden çıkarmanız gerekir. Bu, büyük bir hex-kodlanmış dizge döndürür. – Jens

+0

Özür dilerim, cevabı düzelttim. – xtr

+1

static final String DEBUGKEY = " key "; Bu satır zaten hata ayıklama anahtarını bildiğimi ima ediyor gibi görünüyor muyum? Eğer öyleyse, başka bir geliştirici tarafından sağlanan hata ayıklama anahtarını bilmem mümkün değil. API'mizin çalışma şekli, bir hata ayıklama uygulaması için testle kullanım için ücretsiz, ancak yayınlanan bir uygulama için geliştiricinin entegre edilmesi gereken minimum bir ücret ödemesi gerekir. Anahtarın, anahtarın ne olduğunu bilmeden hata ayıklayıp yayınlanmadığını bilmek önemlidir. –

İlgili konular