apksigner - Android APK-k aláírása és ellenőrzése
apksigner [options] apk
apksigner --version
apksigner --help
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.
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
Bőbeszédű kimeneti mód
Mutasson súgót ehhez a parancshoz, és lépjen ki
A figyelmeztetéseket hibaként kezelje
signÍrd alá a megadott APK-t
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.
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.
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.
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).
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 optionsEzek 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.
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.
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 optionsAz 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).
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.
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.
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.
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.
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.
A használni kívánt KeyStore típusa/algoritmusa. Alapértelmezés szerint az alapértelmezett típust használják.
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.
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.
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.
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.
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.
verifyEllenőrizze, hogy a megadott APK-nak várható-e az ellenőrzése Androidon
Információk megjelenítése az APK aláíró tanúsítványairól
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.
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.
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
signAláírjon egy APK-t a keystore release.jks egyetlen kulcsával:
apksigner sign --ks release.jks app.apk
Aláírjon APK-t privát kulccsal és egyedi fájlként tárolt tanúsítvánnyal:
apksigner sign --key release.pk8 --cert release.x509.pem app.apk
Írjon alá egy APK-t két kulccsal:
apksigner sign --ks release.jks --next-signer --ks magic.jks app.apk
verifyEllenőrizze, hogy az APK aláírásainak ellenőrzése várható-e minden Android-platformon, amelyről az APK támogatja:
apksigner verify app.apk
Ellenőrizze, hogy az APK aláírásai várhatóan ellenőrizhetők-e 15-ös vagy magasabb API-szintű Android-platformokon:
apksigner verify --min-sdk-version 15 app.apk
lineageTávolítson el minden képességet a vonal korábbi aláírójától:
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
Részletek megjelenítése az aláíró tanúsítványokról és képességeikről a származásban:
apksigner lineage --in /path/to/existing/lineage --print-certs -v
rotateHozzon létre egy új SigningCertificateLineage-t az elforgatás engedélyezéséhez:
apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --new-signer --ks release2.jks
A meglévő SigningCertificateLineage kiterjesztése az előző elforgatás utáni ismételt elforgatáshoz:
apksigner rotate --in /path/to/existing/lineage --out /path/to/new/file --old-signer --ks release2.jks --new-signer --ks release3.jks
Hozzon létre egy új SigningCertificateLineage-t explicit képességekkel az előző aláíró számára:
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
signapk(1) jar(1) zip(1) zipalign(1)
https://source.android.com/devices/tech/ota/sign_builds.html
Az Android nyílt forráskódú projektje.