[Android] App signing khi xuất bản ứng dụng lên Google Play Store

Tại Google I/O 2017, Google vừa mới giới thiệu dịch vụ được gọi là Google Play App Signing (Đăng ký ứng dụng Google Play), cho phép các nhà phát triển lưu trữ Signing keys (Khóa ứng dụng) trên các máy chủ của Google. Các khóa được lưu trữ trên cùng một cơ sở hạ tầng bảo mật mà Google sử dụng để lưu trữ khóa của riêng mình.

Giới thiệu về Google Play Signing

Nếu không có Google Play App Signing: Bạn ký ứng dụng bằng khóa ký ứng dụng, tải ứng dụng lên Google Play, sau đó ứng dụng của bạn sẽ được phân phối cho người dùng.

Nếu có Google Play App Signing: Bạn ký ứng dụng bằng khóa tải lên. Sau đó, Google xác minh và xóa chữ ký khóa tải lên. Cuối cùng, Google ký lại ứng dụng bằng khóa ký ứng dụng ban đầu mà bạn đã cung cấp và phân phối ứng dụng của bạn cho người dùng.

Quan trọng: Chọn tham gia App Signing là vĩnh viễn Google Play App Signing là một chương trình tùy chọn. Nếu muốn, bạn có thể tiếp tục quản lý khóa của riêng mình.

Nhưng sau khi bạn đã đăng ký ứng dụng trong Google Play App Signing, bạn không hỗ trợ rút đăng ký do để bảo vệ tính bảo mật của khóa ký ứng dụng của bạn nên Google không có khả năng xóa khóa khỏi máy chủ an toàn.

Các loại khóa và định nghĩa quan trọng

  1. App signing key (Khóa ký ứng dụng): Khóa được sử dụng để ký APK trên thiết bị của người dùng. Bạn hiện giữ khóa ký ứng dụng và sử dụng khóa đó để ký APK. Khi bạn hoàn tất luồng đăng ký chương trình, bạn sẽ tải khóa này lên Google.
  2. Upload key (Khóa tải lên): Khóa mới bạn tạo trong khi đăng ký tham gia chương trình. Bạn sẽ sử dụng khóa tải lên để ký tất cả APK trong tương lai trước khi tải chúng lên Play Console.
  3. Private Key (Khóa riêng tư): Đối với chữ ký APK, đây là khóa được sử dụng để ký APK. Khóa riêng tư phải được giữ bí mật.
  4. Public Key (Khóa công khai): Đối với chữ ký APK, đây là khóa được sử dụng để xác minh chữ ký của APK. Có thể hiển thị khóa công khai cho tất cả mọi người.
  5. Certificate (Chứng chỉ): Chứng chỉ chứa khóa công khai cũng như một số thông tin xác định bổ sung về người sở hữu khóa này.
  6. PEPK tool (Công cụ PEPK): Mã hóa khóa riêng tư cho Play là một công cụ dùng để xuất khóa riêng tư từ Keystore Java và mã hóa các khóa riêng tư để chuyển sang Google Play như một phần của việc đăng ký Google Play App Signing.

Xuất, Mã hóa và Tải App signing private key

Đầu tiên bạn cần đăng nhập vào Google Play Developer Consoler, Chuyển tới mục Release Management -> AppSigning

Tiếp theo chấp nhận điều khoản dịch vụ

Bước 1: Dowload công cụ PEPK

Bước 2: Mở terminal và nhập

$ java -jar PATH_TO_PEPK --keystore=PATH_TO_KEYSTORE --alias=ALIAS_YOU_USE_TO_SIGN_APK --output=PATH_TO_OUTPUT_FILE --encryptionkey=GOOGLE_ENCRYPTION_KEY

Trong đó: PATH_TO_PEPK: Đường dẫn tới file pepk.jar đã down ở Bước 1 PATH_TO_KEYSTORE: Đường dẫn tới file keystore để release apk PATH_TO_OUTPUT_FILE: Tên alias mà bạn đăng ký trong khi release apk PATH_TO_OUTPUT_FILE: Đường dẫn file output với đuôi mở rộng .pem GOOGLE_ENCRYPTION_KEY: Khóa mã hóa được google cung cấp trong trang App Signing trong Play Developer Consoler

Ví dụ:

$ java -jar pepk.jar --keystore="/home/nguyen.duc.manh/Desktop/Myproject/nextdictENVI/keystore.jks" --alias=dictionaryAndroid --output="/home/nguyen.duc.manh/Desktop/Myproject/nextdictENVI/private_key.pem" --encryptionkey=xxx0fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9dxxx

Nhập Enter sau đó nhập password theo thứ tự yêu cầu:

  1. The keystore password
  2. The alias password

Sau khi thành công, bạn sẽ có 1 file tại thư mực PATH_TO_OUTPUT_FILE có dạng: private_key.pem (Hoặc theo tên mà bạn đặt)

Bước 3: Upload file private_key.pem

Bước 4: Tạo 1 file keystore mới

BẠN SẼ CẦN KEYSTORE NÀY TRONG TƯƠNG LAI ĐỂ KÝ KẾT CÁC ỨNG DỤNG TIẾP THEO CỦA BẠN, DO VẬY KHÔNG ĐƯỢC QUÊN PASSWORD

Có thể tạo keystore bằng Android Studio, ví dụ

Bước 5: Xuất chứng chỉ cho khóa tải lên vừa tạo, ra định dạng PEM Mở terminal lên và nhập

$ keytool -export -rfc -keystore UPLOAD_KEYSTORE_PATH -alias UPLOAD_KEYSTORE_ALIAS -file PATH_TO_OUTPUT_FILE

Trong đó: UPLOAD_KEYSTORE_PATH: Đường dẫn của keystore tải lên mà bạn vừa tạo (upload_key.jks) UPLOAD_KEYSTORE_ALIAS: Tên alias của keystore vừa tạo PATH_TO_OUTPUT_FILE: Đường dẫn của file output với đuôi mở rộng .pem

Ví dụ

$ keytool -export -rfc -keystore "/home/nguyen.duc.manh/Desktop/Myproject/nextdictENVI/AppSign.jks" -alias manhND -file "/home/nguyen.duc.manh/Desktop/Myproject/nextdictENVI/upload_key_public_certificate.pem"

Sau khi thành công, bạn sẽ có 1 file tại thư mực PATH_TO_OUTPUT_FILE có dạng: upload_key_public_certificate.pem (Hoặc theo tên mà bạn đặt) Bước 6: Upload file upload_key_public_certificate.pem

Bước 7: Click "ENROLL" ở cuối trang đăng ký ứng dụng

Sau khi thành công, bạn sẽ nhận đc các thông tin về chứng chỉ như sau

Tổng kết

Bây giờ, mỗi phát hành 1 apk mới phải được ký với upload_key.jks (keystore được tạo ở Bước 4) trước khi được tải lên trên Google Play Developer

Đọc thêm tại: https://support.google.com/googleplay/android-developer/answer/7384423?hl=en-GB

https://stackoverflow.com/questions/44103024/how-to-enable-google-play-app-signing