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 và 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
.
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
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. :) –
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. –