apksigner - kézikönyv, opciók, parancspéldák


NÉV

apksigner - Android APK-k aláírása és ellenőrzése

SZINOPSZIS

apksigner [options] apk

apksigner --version

apksigner --help

LEÍRÁS

Parancssori eszköz Android APK-fájlok aláírására, valamint annak ellenőrzésére, hogy az APK-fájlok aláírása ellenőrizhető-e az Android-eszközökön.

Az apk egy létező fájl, amelyet alá kell írni vagy ellenőrizni kell.

Az apksig egy olyan projekt, amelynek célja az APK aláírásának egyszerűsítése és annak ellenőrzése, hogy az APK aláírásainak ellenőrizniük kell-e az Android rendszert. Az apksig támogatja a JAR-aláírást (az Android az első nap óta használja) és az APK Signature Scheme v2-t (az Android Nougat, API 24-es szint óta támogatja).

Az apksig legfontosabb jellemzője, hogy ismeri az APK aláírás-ellenőrzési logikájának különbségeit az Android platform különböző verziói között. Az apksig így ellenőrizheti, hogy az aláírt APK-tól elvárható-e az ellenőrzés az APK által támogatott összes Android-platformverzión. Az APK aláírásakor az apksig kiválasztja a legmegfelelőbb kriptográfiai algoritmusokat az aláírandó APK által támogatott Android platformverziók alapján.

PARANCSOK

sign

Ez aláírja a biztosított APK-t, és eltávolítja a már meglévő aláírásokat. Az aláírás egy vagy több aláíró használatával történik, amelyek mindegyikét egy aszimmetrikus kulcspár és egy megfelelő tanúsítvány képviseli. Egy APK-t általában csak egy aláíró ír alá. Minden aláíróhoz meg kell adnia az aláíró privát kulcsát és tanúsítványát.

verify

Ez ellenőrzi, hogy a megadott APK ellenőrizni fogja-e az Android rendszert. Alapértelmezés szerint ez ellenőrzi, hogy az APK ellenőrizni fogja-e az APK által támogatott összes Android-platformverziót (az AndroidManifest.xml fájl minSdkVersion használatával deklaráltan). A --min-sdk-version és/vagy a --max-sdk-version használatával ellenőrizze az APK-t az API-szintek egyéni tartományában.

lineage

Ez módosítja egy vagy több aláíró képességeit a biztosított SigningCertificateLineage-ben. Ez felhasználható egy korábbi aláíró tanúsítvány képességeinek visszavonására, miután a telepítési bázist áttelepítették az új aláíró tanúsítványra.

rotate

Ez felveszi a megadott kulcsokat, és létrehoz egy SigningCertificateLineage bejegyzést, amely összekapcsolja a régit az újjal, és az APK Signature Scheme v3 használatával kulcsforgatási forgatókönyvben használható.

version

Mutassa meg az eszköz verziószámát, és lépjen ki

help

Jelenítse meg ezt a használati oldalt, és lépjen ki

LEHETŐSÉGEK

-v, --verbose

Bőbeszédű kimeneti mód

-h, --help

Mutasson súgót ehhez a parancshoz, és lépjen ki

-Werr

A figyelmeztetéseket hibaként kezelje

sign

Írd alá a megadott APK-t

--out

Fájl, amelybe kiadja az aláírt APK-t. Alapértelmezés szerint az APK a helyén van aláírva, felülírva a bemeneti fájlt.

--min-sdk-version

A legalacsonyabb API-szint, amelyen az APK aláírásait ellenőrizni fogják. Alapértelmezés szerint az AndroidManifest.xml fájl értéke kerül felhasználásra. Minél nagyobb az érték, annál erősebb biztonsági paramétereket használnak az aláíráskor.

--max-sdk-version

A legmagasabb API-szint, amelyen az APK aláírásait ellenőrizni fogják. Alapértelmezés szerint a lehető legmagasabb érték kerül felhasználásra.

--v1-signing-enabled

Engedélyezze-e az aláírást a JAR aláírási sémával (más néven v1 aláírási séma, amely az első naptól kezdve az Androidban használatos). Alapértelmezés szerint az ezzel a sémával történő aláírás a minimális és maximális SDK-verzió alapján engedélyezett (lásd: --min-sdk-version és --max-sdk-version).

--v2-signing-enabled

Engedélyezze-e az aláírást az APK Signature Scheme v2 (más néven v2 aláírási séma, az Android Nougat 24-es API-szintjén bevezetett) használatával. Alapértelmezés szerint az ezzel a sémával történő aláírás a minimális és maximális SDK-verzió alapján engedélyezett (lásd: --min-sdk-version és --max-sdk-version).

per-signer options

Ezek a beállítások egy adott aláíró konfigurációját határozzák meg. A különböző aláírók beállításainak elhatárolásához használja a --next-signer parancsot.

--next-signer

Elhatárolja két különböző aláíró opcióit. Nincs szükség ennek a lehetőségnek a használatára, ha csak egy aláírót használnak.

--v1-signer-name

Az aláíró JAR aláírási séma (más néven v1 séma) aláírását tartalmazó fájlok alapneve. Alapértelmezés szerint a KeyStore kulcs álneve vagy a kulcsfájl alapneve használatos.

per-signer signing key & certificate options

Az aláíró privát kulcsa és tanúsítványa kétféleképpen biztosítható: (1) Java KeyStore (lásd a --ks), vagy (2) privát kulcsfájl PKCS #8 formátumban és tanúsítványfájl X.509 formátumban (lásd --key) és --cert).

--ks

A privát kulcs és tanúsítványlánc betöltése a megadott fájlból inicializált Java KeyStore-ból. A NONE azt jelenti, hogy a KeyStore-nak nincs szüksége fájlra, ami néhány PKCS #11 KeyStore esetében így van.

--ks-key-alias

Alias, amely alatt a titkos kulcs és a tanúsítvány a KeyStore-ban tárolva van. Ezt meg kell adni, ha a KeyStore több kulcsot tartalmaz.

--ks-pass

KeyStore jelszó (lásd --ks). A következő formátumok támogatottak:

  • igazolvány: a jelszó beírása

  • env: a megnevezett környezeti változóban megadott jelszó

  • fájl: a megnevezett fájlban, egyetlen sorban megadott jelszó

  • stdin jelszó szabványos bemeneten, egyetlen sorban

A KeyStore megnyitásához jelszó szükséges. Alapértelmezés szerint az eszköz konzolon vagy szabványos bemeneten keresztül jelszót kér. Ha ugyanazt a fájlt (beleértve a szabványos bemenetet is) több jelszó megadására használják, a jelszavak soronként kerülnek kiolvasásra a fájlból. A jelszavak beolvasása az aláírók megadásának sorrendjében történik, és az egyes aláírókon belül a KeyStore-jelszó a kulcsjelszó beolvasása előtt.

--key-pass

Jelszó, amellyel a privát kulcs védve van. Alapértelmezés szerint a KeyStore kulcsok ugyanazzal a jelszóval védettek, mint a KeyStore (lásd --ks-pass). A következő formátumok támogatottak:

  • igazolvány: a jelszó beírása

  • env: a megnevezett környezeti változóban megadott jelszó

  • fájl: a megnevezett fájlban megadott jelszó, egysoros stdin jelszó szabványos bemeneten, egyetlen sorként

Alapértelmezés szerint, ha a kulcs jelszóval védett, az eszköz konzolon vagy szabványos bemeneten keresztül jelszót kér. Ha ugyanazt a fájlt (beleértve a szabványos bemenetet is) több jelszó megadására használják, a jelszavak soronként kerülnek kiolvasásra a fájlból. A jelszavak beolvasása az aláírók megadásának sorrendjében történik, és az egyes aláírókon belül a KeyStore-jelszó a kulcsjelszó beolvasása előtt.

--pass-encoding

További karakterkódolás (pl. ibm437 vagy utf-8) a nem ASCII karaktereket tartalmazó jelszavak kipróbálásához. A keytool által létrehozott kulcstárolók gyakran nem a jelszó Unicode formájával vannak titkosítva, hanem a jelszónak a konzol karakterkódolásával történő kódolásával előállított űrlap használatával. Az apksigner alapértelmezés szerint a jelszó többféle formájával próbálja megfejteni a titkosítást: az Unicode űrlapot, a JVM alapértelmezett karakterkészletével kódolt űrlapot, valamint Java 8 és régebbi verziókon a konzol karakterkészletével kódolt űrlapot. Java 9-en az apksigner nem tudja felismerni a konzol karakterkészletét, és előfordulhat, hogy --pass kódolást kell biztosítania, ha nem ASCII jelszót használnak. ---pass-kódolást is meg kell adni egy KeyStore-hoz, amelyet a keytool hoz létre egy másik operációs rendszeren vagy egy másik területi beállításon.

--ks-type

A használni kívánt KeyStore típusa/algoritmusa. Alapértelmezés szerint az alapértelmezett típust használják.

--ks-provider-name

Annak a JCA-szolgáltatónak a neve, amelytől a KeyStore megvalósítást kérni kell. Alapértelmezés szerint a legmagasabb prioritású szolgáltató kerül alkalmazásra. A szolgáltató megadásának alternatív módját lásd a --ks-provider-class oldalon.

--ks-provider-class

A JCA-szolgáltató teljes képzésű osztályneve, amelytől a KeyStore-megvalósítás kérhető. Alapértelmezés szerint a szolgáltató kiválasztása a --ks-szolgáltató-név alapján történik.

--ks-provider-arg

A --ks-provider-class által megadott JCA Provider osztály konstruktorába átadandó érték. Az érték java.lang.String alakban kerül a konstruktorba. Alapértelmezés szerint a no-arg szolgáltató konstruktora kerül felhasználásra.

--key

Privát kulcs betöltése a megadott fájlból. Ha a kulcs jelszóval védett, a jelszót a rendszer szabványos bemeneten keresztül kéri, hacsak nincs másként megadva a --key-pass használatával. A fájlnak PKCS #8 DER formátumban kell lennie.

--cert

Tanúsítványlánc betöltése a megadott fájlból. A fájlnak X.509 PEM vagy DER formátumúnak kell lennie.

verify

Ellenőrizze, hogy a megadott APK-nak várható-e az ellenőrzése Androidon

--print-certs

Információk megjelenítése az APK aláíró tanúsítványairól

--min-sdk-version

A legalacsonyabb API-szint, amelyen az APK aláírásait ellenőrizni fogják. Alapértelmezés szerint az AndroidManifest.xml fájl értéke kerül felhasználásra.

--max-sdk-version

A legmagasabb API-szint, amelyen az APK aláírásait ellenőrizni fogják. Alapértelmezés szerint a lehető legmagasabb érték kerül felhasználásra.

PÉLDÁK

apksigner sign --ks release.jks app.apk apksigner verify --verbose app.apk 
apksigner lineage --in /path/to/existing/lineage --print-certs -v 
apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --new-signer --ks release2.jks
sign
  1. Aláírjon egy APK-t a keystore release.jks egyetlen kulcsával:

  2. apksigner sign --ks release.jks app.apk
  3. Aláírjon APK-t privát kulccsal és egyedi fájlként tárolt tanúsítvánnyal:

  4. apksigner sign --key release.pk8 --cert release.x509.pem app.apk
  5. Írjon alá egy APK-t két kulccsal:

  6. apksigner sign --ks release.jks --next-signer --ks magic.jks app.apk
verify
  1. Ellenőrizze, hogy az APK aláírásainak ellenőrzése várható-e minden Android-platformon, amelyről az APK támogatja:

  2. apksigner verify app.apk
  3. Ellenőrizze, hogy az APK aláírásai várhatóan ellenőrizhetők-e 15-ös vagy magasabb API-szintű Android-platformokon:

  4. apksigner verify --min-sdk-version 15 app.apk
lineage
  1. Távolítson el minden képességet a vonal korábbi aláírójától:

  2. apksigner lineage --in /path/to/existing/lineage --out /path/to/new/file --signer --ks release.jks --set-installed-data false --set-shared-uid false --set-permission false --set-rollback false --set-auth false
  1. Részletek megjelenítése az aláíró tanúsítványokról és képességeikről a származásban:

  2. apksigner lineage --in /path/to/existing/lineage --print-certs -v
rotate
  1. Hozzon létre egy új SigningCertificateLineage-t az elforgatás engedélyezéséhez:

  2. apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --new-signer --ks release2.jks
  1. A meglévő SigningCertificateLineage kiterjesztése az előző elforgatás utáni ismételt elforgatáshoz:

  2. apksigner rotate --in /path/to/existing/lineage --out /path/to/new/file --old-signer --ks release2.jks --new-signer --ks release3.jks
  1. Hozzon létre egy új SigningCertificateLineage-t explicit képességekkel az előző aláíró számára:

  2. apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --set-installed-data true --set-shared-uid true --set-permission true --set-rollback false --set-auth true --new-signer --ks release2.jks

LÁSD MÉG

signapk(1) jar(1) zip(1) zipalign(1)

https://source.android.com/devices/tech/ota/sign_builds.html

SZERZŐI

Az Android nyílt forráskódú projektje.