Samenvatting: Deze gids is bedoeld voor IT-beheerders die de branded Android-app van hun organisatie zelf verspreiden, bijvoorbeeld via Mobile Device Management (MDM). Hierin wordt uitgelegd hoe je de digitale handtekening van een APK- of AAB-bestand van Speakap controleert aan de hand van onze officiële certificaat-fingerprints, zodat je zeker weet dat het bestand authentiek en ongewijzigd is.
Waarschuwing bij gebruik: Gebruik deze gids alleen als je zelf de distributie van je app regelt (bijvoorbeeld via MDM, een beveiligde bestandsdeling of een privé enterprise app store). Dit geldt niet voor apps die rechtstreeks door Speakap in de Google Play Store worden gepubliceerd, aangezien Google dat distributiepad van begin tot eind afhandelt.
Waarom verifiëren?
Wanneer wij een app verspreiden via de Google Play Store, kunnen we garanderen dat het app-bestand dat gebruikers ontvangen exact het bestand is dat wij hebben gebouwd. Wanneer wij de distributie niet van begin tot eind beheren, is het technisch mogelijk dat een app-bestand wordt aangepast voordat het jou of je gebruikers bereikt.
Om dat te voorkomen, ondertekenen wij al onze builds met onze eigen certificaten. Als de handtekening van een app overeenkomt met die van ons, garandeert dat de integriteit en authenticiteit: het is door ons gemaakt en er zijn geen wijzigingen achteraf aangebracht.
We delen onze publieke fingerprints vrijelijk zodat je elk app-bestand dat je van ons ontvangt kunt controleren met een eenvoudig commandoregelprogramma. Mogelijk heb je betere manieren om dit automatisch binnen je eigen systemen te doen, en we moedigen je aan de beste oplossing die je hebt te gebruiken.
Stap 1: Verkrijg het commandoregelprogramma
Afhankelijk van het bestandstype heb je ofwel het apksigner of het keytool commandoregelprogramma van Google nodig.
Stap 2: Voer het commando uit
Open je terminal en voer het commando uit voor jouw bestandstype.
Voor een APK-bestand:
apksigner verify --print-certs your-app.apk
Voor een AAB-bestand:
keytool -printcert -jarfile your-app.aab
Opmerking: zoals bij elk commandoregelprogramma moet je het programma ofwel aan je PATH toevoegen, of het volledige pad naar het programma gebruiken bij het uitvoeren van het commando.
Stap 3: Vergelijk de waarden met de officiële certificaten van Speakap
Controleer de uitvoer van het commando en vergelijk de fingerprint-waarden met de officiële handtekeningen hieronder. We gebruiken twee certificaten, en jouw APK/AAB is met een van deze ondertekend. Je zou precies dezelfde waarden moeten krijgen als een van de volgende.
Certificaat 1
- SHA-256: 49:0B:36:AD:7E:A8:7C:CF:C6:45:B1:DB:5A:66:0D:9F:FE:3F:E8:03:4C:81:48:4B:23:C7:3C:4F:44:96:A6:40
- SHA-1: 5F:51:D8:79:F7:02:FE:5D:A6:C2:3E:8D:12:52:4A:31:8C:FE:95:D3
- MD5: 40:51:CE:2F:CD:64:F9:A7:CF:52:3E:03:65:AB:CD:D1
Certificaat 2
- SHA-256: 15:5D:46:AE:9D:32:A0:0C:2E:25:4F:B5:60:4E:DD:DC:EC:15:B2:0D:80:66:1F:EF:91:54:23:7C:9D:F3:9C:A6
- SHA-1: 39:67:BE:F6:BC:CC:69:9B:58:A0:2B:A4:C2:E1:75:E1:42:E9:D4:E2
- MD5: 53:EE:BB:72:94:3D:32:20:8F:AA:C4:D8:1C:89:26:F1
Voorbeeld uitvoer van commando’s
Om je te helpen verifiëren, zie hieronder hoe een succesvolle uitvoer eruitziet voor beide bestandstypen.
Uitvoer voor een APK-bestand ondertekend met Certificaat 1:
Signer #1 certificaat DN: CN=Patrick van der Mijl, OU=Speakap, O=Speakap, L=Amsterdam, ST=Noord-Holland, C=NL
certificaat SHA-256 digest: 490b36ad7ea87ccfc645b1db5a660d9ffe3fe8034c81484b23c73c4f4496a640
certificaat SHA-1 digest: 5f51d879f702fe5da6c23e8d12524a318cfe95d3
certificaat MD5 digest: 4051ce2fcd64f9a7cf523e0365abcdd1
Uitvoer voor een AAB-bestand ondertekend met Certificaat 2:
Eigenaar: CN=Patrick van der Mijl, O=Speakap, C=NL
Uitgever: CN=Patrick van der Mijl, O=Speakap, C=NL
Serienummer: 2999e34b
Certificaat fingerprints:
SHA1: 39:67:BE:F6:BC:CC:69:9B:58:A0:2B:A4:C2:E1:75:E1:42:E9:D4:E2
SHA256: 15:5D:46:AE:9D:32:A0:0C:2E:25:4F:B5:60:4E:DD:DC:EC:15:B2:0D:80:66:1F:EF:91:54:23:7C:9D:F3:9C:A6
Waar apksigner en keytool te vinden
Deze tools maken deel uit van de standaard Android SDK en de JRE.
Standaard locaties op Mac:
- apksigner: /Users/user/Library/Android/sdk/build-tools/xx.x.x/apksigner
- keytool (Android Studio): /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/keytool
- keytool (Java): /Users/user/Library/Java/JavaVirtualMachines/jbr-xx.x.xx/Contents/Home/bin/keytool
Officiële documentatie en downloads:
- apksigner referentie: https://developer.android.com/tools/apksigner
- Download commandoregeltools: https://developer.android.com/studio#downloads
- keytool referentie: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html
Veelgestelde vragen
Waarom moet ik het app-bestand zelf verifiëren?
Als je de app via je eigen MDM of bestandsdeling verspreidt, omzeil je de ingebouwde controles van de Google Play Store. Zelf de certificaat-fingerprints vergelijken bevestigt dat het bestand door Speakap is gebouwd en niet is aangepast onderweg naar jou.
Wat moet ik doen als de waarden niet overeenkomen met een van de certificaten?
Verspreid het bestand niet onder je medewerkers. Als de fingerprints niet exact overeenkomen met de officiële waarden van Speakap, kan de integriteit van het bestand niet worden bevestigd. Leg het bestand apart en neem contact met ons op via technicalimplementations@speakap.nl voor een nieuwe build.
Kan ik een .aab-bestand verifiëren met apksigner?
Nee. Het apksigner-programma werkt alleen met .apk-bestanden. Voor een .aab-bestand gebruik je Java’s keytool zoals getoond in stap 2.
Nog steeds vastgelopen?
Stuur ons een e-mail op technicalimplementations@speakap.nl met de bestandsnaam, het exacte commando dat je hebt uitgevoerd en de uitvoer die je hebt ontvangen, dan helpen we je verder.