Engineering

Mobile app signing security

Who controls signing when Otukan protects a build: your team signs in its own pipeline, keys never leave you, and integrity checks follow your certificate.

  • Android
  • iOS
  • Flutter
  • React Native
  • Keys never leave you

    Keystores, certificates and provisioning profiles stay in your signing service or CI secret store. Otukan never asks you to upload them.

  • Protect, then sign

    Protection is part of producing the release build. Your signature comes after it, so the signed artefact is the one users receive.

  • Recovery planned ahead

    Key rotation, access revocation and failed releases each have an agreed path, per platform, before you need one.

Signing support built into Otukan

Protection that respects the signing model you already trust.

  • Separate job permissions

    The protection job and the signing job run separately with their own permissions, so changing protection never changes who can publish your app.

  • Checks follow your certificate

    Integrity checks expect the certificate users receive: Google's app signing key under Play App Signing, and App Store builds after Apple's processing.

  • Ready for key changes

    When your signing certificate changes, Otukan's engineers update the integrity expectations with you before the next release goes out.

  • Re-signed copy signals

    A copy of your app signed with someone else's key is detected at runtime, answered per your policy and reported to your backend.

A signed, protected release

  1. Protect the build

    The release variant is built and protected with the approved profile, with no signing material present.

  2. Sign in your pipeline

    Your signing job applies your upload key or distribution certificate from your own secret store.

  3. Verify the signature

    The pipeline checks the signing certificate before upload, so a wrong identity stops the release.

  4. Upload to the store

    Google Play or App Store Connect receives the artefact and applies its own signing where it applies.

  5. Confirm on devices

    Install the store-delivered build on test devices and confirm integrity checks pass for genuine installs.

Your team controls signing material, from start to finish. Otukan’s protection is applied as part of producing the release build, before any signature, and your own pipeline then signs the protected artefact with your identity: your Android upload key or app signing key, or your Apple distribution certificate and provisioning profiles. Otukan never asks you to upload keystores, certificates, passwords or store credentials. Where a store re-signs after upload, as Google does under Play App Signing and Apple does for App Store builds, Otukan’s integrity checks expect the certificate users actually receive. Android and iOS are planned separately, and recovery decisions stay with your release owner.

Key ownership

Signing proves who published an app. Whoever holds the key can publish in your name, so the first question for any protection vendor is where your keys go.

Signing modes

ModeWho holds the signing keyHow Otukan fits
Local signing in your pipelineYour CI secret store or signing serviceThe standard model: protect, then your job signs
Play App Signing on AndroidYou hold the upload key; Google holds the app signing keyYour job signs with the upload key; checks expect Google’s certificate
Android outside Google PlayYou hold the app signing keyYour job signs; checks expect your certificate
App Store and TestFlight on iOSYou hold the distribution certificate; Apple processes the buildYour job signs; checks rely on properties that survive Apple’s processing
Other Apple distribution pathsYou hold the relevant certificate and profilesPlanned with you per path
Uploading credentials to a vendorThe vendor holds a copy of your keyNot needed: Otukan does not take custody of keys

Handing a keystore or certificate to a third party so it can sign on your behalf widens who can publish your app. Otukan is built so that the protection step and the signing step are separate jobs with separate permissions.

Where the secrets live

Keep signing material in one place, used by one job. Store the keystore or certificate in your CI secret store or a dedicated signing service, scope it to the signing job only, and keep a record of who can read it. The Otukan step needs none of it, so there is nothing to grant.

Which stage modifies the app

A signature only means something if nothing changes the app after it. Map every stage that alters the binary, and make sure signing comes after the last one you control.

StageChanges the app?Owner
Compile and linkYes: produces the release binaryYour toolchain
ProtectYes: applies the approved protection profileOtukan step, in your pipeline
SignAdds your signature; no further code changesYour signing job
Store processingGoogle Play generates device-specific APKs from your app bundle and signs them; Apple re-signs and encrypts App Store buildsGoogle or Apple
InstallNoThe user’s device

Two rules follow. First, protection belongs before signing, because any change after signing breaks the signature. Second, the only changes after your signature should be the store’s own, which Otukan’s integrity checks already account for.

Artefacts to keep per release

  • the signed release artefact and the certificate fingerprint used
  • R8 mapping files and native debug symbols on Android, dSYM files on iOS
  • the protection profile version applied to that build
  • the store’s record of the delivered certificate, where one applies

These let you prove later which identity signed which protected build. For the full release record, see release evidence and auditability.

Recovery

Certificate and key changes

On Android, a lost or compromised upload key can be reset through Play Console, and Play also offers an app signing key upgrade. Apps signed outside Google Play can rotate keys with APK Signature Scheme v3. On iOS, distribution certificates expire and are renewed through your Apple Developer account. Whatever changes, tell Otukan’s engineers before the release that uses it, so integrity expectations match the new identity.

Access revocation

When someone leaves or a pipeline is retired, remove their access to the signing secret, the Apple Developer team and Play Console, and rotate any shared secret they could read. On iOS, revoking an in-house distribution certificate stops apps signed with it from launching, so plan that step carefully. The Otukan step holds no signing access, so it adds nothing to revoke.

Failed releases

A store may reject an upload signed with the wrong identity. A certificate change that was not planned can also make integrity checks flag genuine installs. Otukan reports those signals per app version, so a staged rollout shows the problem early. Halt the rollout, fix the signing or the profile, and ship a new build with a higher version number.

Platform detail is covered on Android app security and iOS app security. Where signing sits among the other pipeline stages is covered on mobile DevSecOps.

Common questions

  • Can Otukan sign our app for us?

    It does not need to, and that is deliberate. Signing stays in your pipeline, under your identity, after protection has been applied. That keeps the protection step narrow in its permissions and keeps the decision to publish with your release owner. If your signing runs in a dedicated signing service, it stays there.

  • What happens if we rotate or change our signing key?

    Tell Otukan's engineers before the release that uses the new certificate. They update the integrity expectations in your protection profile with you, so genuine installs signed with the new identity pass. Plan the change like any other release: protect, sign with the new key, verify on devices and roll out in stages.

  • Does Play App Signing affect Otukan's integrity checks?

    It changes which certificate users receive. Under Play App Signing, you sign with your upload key and Google re-signs the delivered app with the app signing key it holds. Otukan's checks are set to expect that delivered certificate, so the builds users install from Google Play pass, and copies signed with any other key do not.

Related

Protect your app, keep your keys

Tell us your platforms, frameworks, how you sign today and which stores or distribution channels you use. We never ask for keystores, certificates, passwords or store credentials.

Or request a technical demo