“Something Went Wrong” on android phone

Hey,
first - thank you for this amazing software!

  • My passbold instance is running fine.
  • Certificate is valid (Running behind a caddy container).
  • I have not configured a smtp server.
  • The Chrome extension works perfect.
  • Admin interface works fine as well.

My issue is about the Android app only.

I was able to scan the QR code succesfully. But when i enter my passphrase i get the “Something Went Wrong” message.

See the following logs (domain obfuscated):

Device: ZTE ZTE A2020G Pro
Android 10 (29)
Passbolt 2.6.0-46

Device: ZTE ZTE A2020G Pro
Android 10 (29)
Passbolt 2.6.0-46

11:09:36 [Session] Passphrase cache cleared
11:13:07 [Session] App went background
11:13:07 [Session] Scheduling passphrase cache clear
11:13:07 [Session] Passphrase cache cleared
11:14:02 --> PUT https://mybolt.zapto.org/mobile/transfers/75d75e48-83e3-4805-86f6-e0efbc2ee16d/a0d294f1-763a-46c3-a84c-57a0ad2e74f1.json h2 (41-byte body)
11:14:02 <-- 200 https://mybolt.zapto.org/mobile/transfers/75d75e48-83e3-4805-86f6-e0efbc2ee16d/a0d294f1-763a-46c3-a84c-57a0ad2e74f1.json (46ms, unknown-length body)
11:14:02 Saving private key.
11:14:03 --> PUT https://mybolt.zapto.org/mobile/transfers/75d75e48-83e3-4805-86f6-e0efbc2ee16d/a0d294f1-763a-46c3-a84c-57a0ad2e74f1.json?contain%5Buser.profile%5D=1 h2 (38-byte body)
11:14:03 <-- 200 https://mybolt.zapto.org/mobile/transfers/75d75e48-83e3-4805-86f6-e0efbc2ee16d/a0d294f1-763a-46c3-a84c-57a0ad2e74f1.json?contain%5Buser.profile%5D=1 (55ms, unknown-length body)
11:14:03 Error during qr code scan
java.util.concurrent.CancellationException: The task is canceled.
	at androidx.camera.mlkit.vision.MlKitAnalyzer.$r8$lambda$GNwv4Rnun2qWbHHIBcQEppWQl-E(SourceFile:247)
	at androidx.camera.mlkit.vision.MlKitAnalyzer$$ExternalSyntheticLambda1.onComplete(SourceFile:0)
	at com.google.android.gms.tasks.zzi.run(SourceFile:1)
	at android.os.Handler.handleCallback(Handler.java:883)
	at android.os.Handler.dispatchMessage(Handler.java:100)
	at android.os.Looper.loop(Looper.java:213)
	at android.app.ActivityThread.main(ActivityThread.java:7544)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)

java.util.concurrent.CancellationException: The task is canceled.
	at androidx.camera.mlkit.vision.MlKitAnalyzer.$r8$lambda$GNwv4Rnun2qWbHHIBcQEppWQl-E(SourceFile:247)
	at androidx.camera.mlkit.vision.MlKitAnalyzer$$ExternalSyntheticLambda1.onComplete(SourceFile:0)
	at com.google.android.gms.tasks.zzi.run(SourceFile:1)
	at android.os.Handler.handleCallback(Handler.java:883)
	at android.os.Handler.dispatchMessage(Handler.java:100)
	at android.os.Looper.loop(Looper.java:213)
	at android.app.ActivityThread.main(ActivityThread.java:7544)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
11:14:05 Checking biometry state
11:14:23 [Session] Passphrase cache cleared
11:14:23 [Session] Passphrase cached
11:14:23 Getting server pgp and rsa keys
11:14:24 --> GET https://mybolt.zapto.org/auth/verify.json h2
11:14:24 <-- 200 https://mybolt.zapto.org/auth/verify.json (54ms, unknown-length body)
11:14:24 --> GET https://mybolt.zapto.org/auth/jwt/rsa.json h2
11:14:24 <-- 500 https://mybolt.zapto.org/auth/jwt/rsa.json (36ms, unknown-length body)
11:14:24 retrofit2.HttpException: HTTP 500
	at retrofit2.KotlinExtensions$await$2$2.onResponse(SourceFile:53)
	at retrofit2.OkHttpCall$1.onResponse(SourceFile:164)
	at okhttp3.internal.connection.RealCall$AsyncCall.run(SourceFile:576)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:919)

retrofit2.HttpException: HTTP 500
	at retrofit2.KotlinExtensions$await$2$2.onResponse(SourceFile:53)
	at retrofit2.OkHttpCall$1.onResponse(SourceFile:164)
	at okhttp3.internal.connection.RealCall$AsyncCall.run(SourceFile:576)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:919)
11:14:24 There was an error during checking if MFA is required
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
	at com.passbolt.mobile.android.core.networking.ErrorHeaderMapper.checkMfaRequired(SourceFile:70)
	at com.passbolt.mobile.android.core.networking.ResponseHandler.checkIfMfaRequired(SourceFile:77)
	at com.passbolt.mobile.android.core.networking.ResponseHandler.handleException(SourceFile:48)
	at com.passbolt.mobile.android.passboltapi.auth.AuthRepository.getServerPublicRsaKey(SourceFile:99)
	at com.passbolt.mobile.android.passboltapi.auth.AuthRepository$getServerPublicRsaKey$1.invokeSuspend(Unknown Source:11)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:34)
	at kotlinx.coroutines.DispatchedTask.run(SourceFile:98)
	at android.os.Handler.handleCallback(Handler.java:883)
	at android.os.Handler.dispatchMessage(Handler.java:100)
	at android.os.Looper.loop(Looper.java:213)
	at android.app.ActivityThread.main(ActivityThread.java:7544)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
	at com.passbolt.mobile.android.core.networking.ErrorHeaderMapper.checkMfaRequired(SourceFile:70)
	at com.passbolt.mobile.android.core.networking.ResponseHandler.checkIfMfaRequired(SourceFile:77)
	at com.passbolt.mobile.android.core.networking.ResponseHandler.handleException(SourceFile:48)
	at com.passbolt.mobile.android.passboltapi.auth.AuthRepository.getServerPublicRsaKey(SourceFile:99)
	at com.passbolt.mobile.android.passboltapi.auth.AuthRepository$getServerPublicRsaKey$1.invokeSuspend(Unknown Source:11)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:34)
	at kotlinx.coroutines.DispatchedTask.run(SourceFile:98)
	at android.os.Handler.handleCallback(Handler.java:883)
	at android.os.Handler.dispatchMessage(Handler.java:100)
	at android.os.Looper.loop(Looper.java:213)
	at android.app.ActivityThread.main(ActivityThread.java:7544)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
11:14:24 Generic error occurred

Any help is highly appreciated!

Cheers

I was able to fix the issue on container side!

I found this in the passbolt container logs:

passbolt-1  | 2026-02-18 19:09:52 alert: The key pair for JWT Authentication is not complete.
passbolt-1  | 2026-02-18 19:09:52 error: The following file could not be read: /etc/passbolt/jwt/jwt.pem.

=> Something wrong with JWT!

BEFORE (Error in Android App):

root@ec3d8298bbdd:/usr/share/php/passbolt# ls -l /etc/passbolt/jwt
total 8
-rw-r----- 1 root root 3272 Feb 18 07:58 jwt.key
-rw-r----- 1 root root  800 Feb 18 07:58 jwt.pem

FIXING:

root@ec3d8298bbdd:/etc/passbolt/jwt# chown -R www-data:www-data /etc/passbolt/jwt
chmod 640 /etc/passbolt/jwt/*.pem

Restarting container

Result => Android App is working as expected!