2014-06-14 15 views
7

Tôi đã tạo APK đã ký từ Eclipse cho Android. Tôi muốn biết rằng loại chứng chỉ RSA nào được sử dụng trong APK đã ký như RSA-1024 hoặc RSA 2048.Xác định chứng chỉ ký từ một APK

Làm cách nào tôi biết rằng từ tệp APK?

EDIT Tiêu đề thay đổi từ "Chứng chỉ RSA nào được sử dụng trong APK đã ký trong Eclipse? Làm cách nào để biết kích thước khóa RSA (1024/2048)?"

+0

Tại sao bạn cần biết điều đó? Ngoài ra, tại sao bạn không chỉ tìm kiếm trang web dành cho nhà phát triển Android thay vì đặt câu hỏi ở đây? – Squonk

+0

Chúng tôi đang phát triển các ứng dụng trong Android bản địa và Action Script .. Chúng tôi đang nhận được lỗi của SSL mở từ Google. Trong Action Script, chúng tôi đã chọn một tùy chọn chứng chỉ RSA. Vì vậy, chúng tôi muốn biết rằng chứng chỉ nào được sử dụng trong android native.Cảm ơn bạn. :) –

+0

Bạn tạo chứng chỉ bao gồm một cặp khóa chính mình theo hướng dẫn trên trang web Android. Vì vậy, bạn nên biết câu trả lời. –

Trả lời

7

Chứng chỉ RSA nào được sử dụng trong APK đã ký trong Eclipse?

Trong Eclipse khi đang gỡ lỗi (và khi không có khóa khác), bạn sẽ ký bằng khóa gỡ lỗi Android mặc định.

Eclipse tạo nó nếu nó không có. Khóa được thêm vào debug.keystore, với một cửa hàng mật khẩu khóa của android. Xem Đăng nhập Chế độ gỡ lỗi tại Android Signing Your Application của Android.


Bạn có thể ký bằng một vài công cụ, bao gồm keytool hoặc jarsigner. Nhưng tôi tin rằng bạn cần sử dụng một công cụ khác để kiểm tra chứng chỉ trong APK.

Bạn có thể sử dụng OpenSSL để kết xuất các bit liên quan kể từ PKCS # 7, nhưng bạn cần trích xuất thủ công các tệp có liên quan từ APK.


Để ký, tôi sử dụng jarsigner khi làm việc từ dòng lệnh. Ví dụ: trên Windows có phím Debug:

jarsigner -verbose -keystore C:\Users\<user>\.android\debug.keystore \ 
    -storepass android -keypass android -digestalg SHA1 \ 
    -sigalg SHA1withRSA <package name>.apk androiddebugkey 

Eclipse thực hiện tương tự cho bạn theo IDE.


Bạn không thể sử dụng jarsigner để đổ thông tin. Ví dụ, sau đây sẽ in tên phân biệt, nhưng nó sẽ không in các subjectPublicKeyInfo khối:

$ jarsigner -verbose -certs -verify Test.apk 

Tương tự, bạn có thể không sử dụng keytool vì nó không in khối subjectPublicKeyInfo hoặc :

$ keytool -printcert -file META-INF/CERT.RSA 

Để xác định giấy chứng nhận trong aPK, bạn n eed để xem xét một vài tệp. Các tệp quan tâm nằm trong thư mục META_INF của APK. Chữ ký nằm trong tệp .SF cùng với tệp .RSA (hoặc .DSA tệp) cho mỗi người ký. Tệp tin .RSA của người ký (hoặc .DSA tệp) chỉ là định dạng PKCS # 7.

Tôi nói "chữ ký nằm trong ..." vì các phần tử riêng lẻ của APK được ký và không phải toàn bộ APK.Vì vậy, classes.dex được ký kết, AndroidManifest.xml được ký kết, mỗi biểu tượng trong res/ được ký kết, vv

Lưu ý: trong khi jarsigner hỗ trợ nhiều chữ ký, Android chỉ hỗ trợ một người ký (nếu tôi nhớ chính xác).


Đây là ví dụ về APK có tên là CrackMe.apk sử dụng OpenSSL.

$ mkdir APK-test 
$ mv CrackMe.apk APK-test 
$ cd APK-test 

Tiếp theo giải nén APK. Chỉ là một tệp ZIP có siêu dữ liệu bổ sung trong số META-INF/.

$ unzip -a CrackMe.apk 
$ ls 
AndroidManifest.xml META-INF    res 
CrackMe.apk   classes.dex   resources.arsc 

Tiếp theo, hãy xem trong thư mục META-INF.

$ cd META-INF/ 
$ ls 
CERT.RSA CERT.SF MANIFEST.MF 

Chữ ký là trong CERT.SF, và người ký là trong CERT.RSA.

Cuối cùng, sử dụng OpenSSL để phân tích cú pháp CERT.RSA.

$ openssl pkcs7 -in CERT.RSA -inform DER -print_certs | openssl x509 -text -noout 
Certificate: 
    Data: 
     Version: 3 (0x2) 
     Serial Number: 1346030704 (0x503acc70) 
    Signature Algorithm: sha1WithRSAEncryption 
     Issuer: C=US, ST=NY, L=New York, O=Unknown, OU=Unknown, CN=Example, LLC 
     Validity 
      Not Before: Aug 27 01:25:04 2012 GMT 
      Not After : Dec 5 01:25:04 2035 GMT 
     Subject: C=US, ST=NY, L=New York, O=Unknown, OU=Unknown, CN=Example, LLC 
     Subject Public Key Info: 
      Public Key Algorithm: rsaEncryption 
       Public-Key: (3072 bit) 
       Modulus: 
        00:8d:a8:9a:34:84:d5:72:4f:e8:e7:69:78:e4:17: 
        13:93:e8:c5:23:a0:93:a7:f8:6c:58:3d:f0:ed:30: 
        ... 
        c1:2d:5e:9f:a4:79:56:19:7d:26:4d:27:6a:3e:26: 
        c0:fd:6a:ed:24:e9:62:80:73:8d 
       Exponent: 65537 (0x10001) 
    Signature Algorithm: sha1WithRSAEncryption 
     80:c0:ac:a5:65:13:f3:2d:dd:d5:71:82:7c:2e:72:63:72:cf: 
     76:49:4b:09:3c:12:e7:d6:9b:3d:53:8b:d4:e0:9c:ff:f2:d6: 
     ... 
     80:4d:9b:15:3f:82:1a:72:b2:4b:fd:05:2b:e7:36:f0:43:98: 
     80:b7:8f:6c:fd:64 

Bạn cũng có thể sử dụng -pubkey khi sử dụng x509 để trích xuất các định dạng PEM khóa công khai:

$ openssl pkcs7 -in CERT.RSA -inform DER -print_certs | openssl x509 -noout -pubkey 
-----BEGIN PUBLIC KEY----- 
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAjaiaNITVck/o52l45BcT 
k+jFI6CTp/hsWD3w7TAoGMA4RyH1pNcLD3ZZLXqdCPGKzKf107YhmiSp9K3DALG+ 
AHorHroKsnmGJFXglIEOLAq7gBVrfxOiBAxr0HW4MLXXGMvr2Asq4AkJAbFFmApU 
5I3bGv3DCApHBbH6B10V5gTT0VzbkxHAejqNJVIHBmi6ueKLKh5ytJeRZufgD3ZX 
+uEszGfJrD48woXkqSlCOyxHSi4PWyHLm95OXYkvlBSudNt5q9yDuy+KkJgrSHLC 
jwxISkM2JzEoWYhqNqRgosBv6pg16+97YPeE6tHoG6dHazjCClhr5oZxw/7t6969 
8rZ8m/fcLf3cOtcApqOFhCViq0ddADrOxMD2Qsp/xHx1kUg7eprE6dOEvQKr4oT5 
oBiJkOStnAQFWRw/GDFTqpvDsYSOKn64/1cJ/+NEeLw4y+HCTMcNAsPknBQlXxNc 
hzX0zSqrJ+vBLV6fpHlWGX0mTSdqPibA/WrtJOligHONAgMBAAE= 
-----END PUBLIC KEY----- 

Nếu quan tâm đến mã xác nhận Android apk, xem collectCertificates từ PackageParser.java.

Các vấn đề liên quan