mirror of
https://github.com/immich-app/immich.git
synced 2026-02-05 00:30:57 +03:00
[BUG] Cannot access Immich behind HTTPS reverse proxy from Android app on Caddy with self-signed CA #340
Closed
opened 2026-02-04 19:49:42 +03:00 by OVERLORD
·
29 comments
No Branch/Tag Specified
main
feat/asset-file-apis
chore/translations
fix/web-switch-label-clickable
fix/web-people-hidden-state
renovate/typescript-projects
release/next
fix/timezones
fix/time-zone-upserts
midzelis/wip
push-zpwsovysllvn
push-nwxlpmyzkyrl
push-nvnkszuqwppm
renovate/github-actions
push-smstsuupsowp
refactor/adaptive_image
push-olwpzvrxnomt
push-lmxsupnmxspl
renovate/machine-learning
feat/web-chromecast-video-looping
feat/use-native-clients
renovate/flutter
fix/create-face-edited
fix/mobile-ios-mtls
docs/contributing
docs/mise-mobile
renovate/grafana-monorepo
feature/bottom-buttons-order
feat/immich-mobile-ui-showcase
refactor/consolidate-image-requests
renovate/connectivity_plus-7.x
renovate/major-vitest-monorepo
renovate/pypi-python-multipart-vulnerability
fix/mobile-people-query
sqlite_thumbs
feat/html-text
chore/no-macro-validation
refactor/purchase-store
uhthomas/mobile-fix-app-bar-fade
uhthomas/mobile-fix-asset-jump
feat/pano-ocr
feat/shared-link-login
fix/database-backup-db-names
fix-keep-correct-ios-shared-album-asset
fix-memory-generation-and-display
feat/verify-permissions
refactor/album-service-small-tests
fix/ml-rocm-build
fix/flipped-dimensions-mobile
push-vpxwmwwxwnvw
fix-migration-width-height
refactor/more-queries
revert/prettier-translations
refactor/asset-service-queries
fix/locale-settings-desc
chore/add-debug-log
feat/edit-filters
shared-deep-link-handler
feat/mobile-editing
feat/thumbnail-native-clients
feat/platform-clients
feat/integrity-checks-izzy
fix/foreground-cloud-sync
feat/dynamic-layout
filter-by-person
feat/csp
refactor/sidebar
fix/disable-editing
fix/view-timeline-deeplink
image-zoom-on-slow-connection
fix-consider-dar-for-video-dimension
fix/merged-edited-assets
perf/optimize-album-sort
open-api-fix
feat/create-job-with-dto
use-toast-primary
feat/vitest-4
feat/ios-fastlane-match
match-signing
fix-update-time-update-timeline
chore/translation-keys
feat/modal-routes
feat/panorama-tiles
feature/mobile-view-asset-owner
feat/system-settings
feature/show-activity-count
better-info-in-asset-viewer
fix/all-people-count
feat/location-favorites
feature/rearrange-buttons-2
fix/download-storage-template
feat/kb-shortcuts-mobile
fix/people-count
push-qolzzzzxrvvn
chore/originals-in-asset-files
feat/asset-size-columns
ben/tree-a11y
new-search-filter-ui
refactor/expectSelectedReadonly
refactor/mobile-grdb
push-qvuktpxmkknu
feat/mobile-native-local-sync
refactor/timeline_ops
fix/scrubber_end
feat/version.txt
feat/context-menus
feat/server-chunked-uploads
refactor/virtualsegment
refactor/rename_daymonth_groups
fix/restrict-android-bg-worker
feat/android-periodic-worker
fix-remote-sync-clean-up
refactor/timeline_move_ops
renovate/mapbox-mapbox-gl-rtl-text-0.x
fix/timeline_split_selectable
feat/keyboard_actions_help_modal
feat/static_frontend
feat/notification-warnign-android
feat/plugins2
feat/plugins
test/create-workflow-token-action
fix/docs-force
debug/search-result-similarity
debug/cf-chunked-uploads
feat/eslint_rule
feat/search-filter-album/web
refactor/timeline_photostream
refactor/timelineasset_asset
feat/session-permissions
feat/timeline_photostream_assetnav
feat/timeline_minor_optimize
feat/timeline_perf_nocomp
feat/timeline_search_results_actions
feat/timeline_search_results_page
fix/timeline_padding
fix/timeline_search_reactivity_warnings
feat/timeline_scrollbar
feat/timeline_stream_withviewer
fix/timeline_back_forth_nav
refactor/timeline_photostream_component
fix/generated-files-checks
fix/locate-button-local
chore/base-image-mimalloc
refactor/timeline_assetlayout
refactor/timeline_selectable
refactor/timeline_aware_actions
refactor/timeline_monthsegment
feat/remove-old-pages
chore/deps-gradle
tmp_photostream
tmp/lcms
feat/mobile-dynamic-thumbnails
fix/mobile-finer-thumbnail-concurrency
refactor/timeline1
refactor/extract_photostream
refactor/rename_load_api
refactor/timeline2
refactor/timeline3
feat/multi-select-asset-viewer
feat-no-thumbhash-cache
refactor/asset_grid
feat/faster-access-checks
fix/18991
fix/19543
chore/temp-remove
fix/21419
feat/mobile-hdr-images
chore/update-mise-lockfile
feat/mise-server-checks
feat/mise-ci
feat/windows-2025
feat/dev_cli
refactor/mobile-migrate-clients
fix/map-theme
fix/require-checkbox
chore/use_swc
feat/efficient-thumbnail-decoding
refactor/mobile-thumbhash
refactor/mobile-thumbhash-new
fix/mobile-uncached-zoom
feat/beta-background-upload
fix/beta-timeline-memories-setting
fix/failed-uploads-not-removed
feat/mobile-shared-album
feat/groups
drift-map-page
drift-auth-user-sync
fix/disable-memory
feat/add-to-album-action
edit-date-time-action
drift-people-page
sqlite-remove-isIn
feat/inline-storage-columns
chore/required-reviewers
refact/asset-manager
fix/folder-sort
pnpm
feat/widget-multiple-server-urls
chore/medium-tests-dbname
fix/web-no-iterator-find
fix/map-pan-interruption
track-livephotos
timeline_events
chore/oxlint-migration
feat/maintenance-worker
feat/dav
chore/demo-snapshot
refactor/server-side-dedupe
feat/integrity-checks
dev/recognition-eval
lighter_buckets_test
perf/postgres-queue
postgres-queue
focus_rings
refactor/web-stores-1
refactor/add-to-taken
feat/sort-places
feat/sidecar-asset-file
vet
tmp/demo-snapshot-preview
fix/server-migration-file-extension
refactor/mobile-v2
fix/asset-update-race-condition
rknn-toolkit-lite2
refactor/mobile-split-up-search-page
feature/Add-rocm-support-for-machine-learning
feat/rocm
chore/async-hash-file
feat/shared-link-view-count
feat/rotation
feat/graphql
feat/job-ids
feat/ignore-library-permission-error
feat/docker-compose-builder
feat/kysely-typeorm
mobile/onboarding
no-video-player
fix/server-qsv-output-format
chore/server-geodata-tweaks
mobile/native-video-player-no-hero
feat/xxhash
fix/docs-concurrency
feat/preload-ml-textual-model
feat/local-tileserver
refactor/exif-orientation
original-path-infix
refactor/mobile/login-form-1
feat/server-editor-endpoints
fix/server-qsv-vbr
fix-mobile-db-problems
feat/ml-armnn-conversion
feat/mobile/backup-with-album-info
feat/fast-initial-sync-1
chore/handle-output_dims
feat/server-more-robust-generation
feat/unassign-faces
feat/shortcuts-on-asset-grid
feat/background-upload
feat/capacitor-mobile-app-poc
feat/server-nvenc-hw-decoding
release/v1.105
fix/mobile-fetch-non-archive
feat/fine-grained-access-controls
web/automation-ui
feat/mobile-server-endpoint-save-dropdown
feat/blurhash-thumbnail
object-storage
feat/memories-animations
dev/metrics
ml/tflite
feat/ml-export-cli
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.1
v2.4.0
v2.3.1
v2.3.0
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.1
v2.0.0
v1.144.1
v1.144.0
v1.143.1
v1.143.0
v1.142.1
v1.142.0
v1.141.1
v1.141.0
v1.140.1
v1.140.0
v1.139.4
v1.139.3
v1.139.2
v1.139.1
v1.139.0
v1.138.1
v1.138.0
v1.137.3
v1.137.2
v1.137.1
v1.137.0
v1.136.0
v1.135.3
v1.135.2
v1.135.1
v1.135.0
v1.134.0
v1.133.1
v1.133.0
v1.132.3
v1.132.2
v1.132.1
v1.132.0
v1.131.3
v1.131.2
v1.131.1
v1.131.0
v1.130.3
v1.130.2
v1.130.1
v1.130.0
v1.129.0
v1.128.0
v1.127.0
v1.126.1
v1.126.0
v1.125.7
v1.125.6
v1.125.5
v1.125.4
v1.125.3
v1.125.2
v1.125.1
v1.125.0
v1.124.2
v1.124.1
v1.124.0
v1.123.0
v1.122.3
v1.122.2
v1.122.1
v1.122.0
v1.121.0
v1.120.2
v1.120.1
v1.120.0
v1.119.1
v1.119.0
v1.118.2
v1.118.1
v1.118.0
v1.117.0
v1.116.2
v1.116.1
v1.116.0
v1.115.0
v1.114.0
v1.113.1
v1.113.0
v1.112.1
v1.112.0
v1.111.0
v1.110.0
v1.109.2
v1.109.1
v1.109.0
v1.108.0
v1.107.2
v1.107.1
v1.107.0
v1.106.4
v1.106.3
v1.106.2
v1.106.1
v1.106.0
v1.105.1
v1.105.0
v1.104.0
v1.103.1
v1.103.0
v1.102.3
v1.102.2
v1.102.1
v1.102.0
v1.101.0
v1.100.0
v1.99.0
v1.98.2
v1.98.1
v1.98.0
v1.97.0
v1.96.0
v1.95.1
v1.95.0
v1.94.1
v1.94.0
v1.93.3
v1.93.2
v1.93.1
v1.93.0
v1.92.1
v1.92.0
v1.91.4
v1.91.3
v1.91.2
v1.91.1
v1.91.0
v1.90.2
v1.90.1
v1.90.0
v1.89.0
v1.88.2
v1.88.1
v1.88.0
v1.87.0
v1.86.0
v1.85.0
v1.84.0
v1.83.0
v1.82.1
v1.82.0
v1.81.1
v1.81.0
v1.80.0
v1.79.1
v1.79.0
v1.78.1
v1.78.0
v1.77.0
v1.76.1
v1.76.0
v1.75.2
v1.75.1
v1.75.0
v1.74.0
v1.73.0
v1.72.2
v1.72.1
v1.72.0
v1.71.0
v1.70.0
v1.69.0
v1.68.0
v1.67.2
v1.67.1
v1.67.0
v1.66.1
v1.66.0
v1.65.0
v1.64.0
v1.63.2
v1.63.1
v1.63.0
v1.62.1
v1.62.0
v1.61.0
v1.60.0
v1.59.1
v1.59.0
v1.58.0
v1.57.1
v1.57.0
v1.56.2
v1.56.1
v1.56.0
v1.55.1
v1.55.0
v1.54.1
v1.54.0
v1.53.0
v1.52.1
v1.52.0
v1.51.2
v1.51.1
v1.51.0
v1.50.1
v1.50.0
v1.49.0
v1.48.1
v1.48.0
v1.47.3
v1.47.2
v1.47.1
v1.47.0
v1.46.1
v1.46.0
v1.45.0
v1.44.0
v1.43.1
v1.43.0
v1.42.0_65-dev
v1.41.1_64-dev
v1.41.0_64-dev
v1.40.1_63-dev
v1.40.0_63-dev
v1.39.0_61-dev
v1.38.2_60-dev
v1.38.1_60-dev
v1.38.0_60-dev
v1.37.0_58-dev
v1.36.2_56-dev
v1.36.1_55-dev
v1.36.0_55-dev
v1.35.0_54-dev
v1.34.0_53-dev
v1.33.1_52-dev
v1.33.0_52-dev
v1.32.1_51-dev
v1.32.0_50-dev
v1.31.1_49-dev
v1.31.0_49-dev
v1.30.2_48-dev
v1.30.0_46-dev
v1.29.6_45-dev
v1.29.6_44-dev
v1.29.5_44-dev
v1.29.4_44-dev
v1.29.3_43-dev
v1.29.2_43-dev
v1.29.1_43-dev
v1.29.0_42-dev
v1.28.4_41-dev
v1.28.4_42-dev
v1.28.3_41-dev
v1.28.2_40-dev
v1.28.1_39-dev
v1.28.0_38-dev
v1.27.0_37-dev
v1.26.0_36-dev
v1.25.0_35-dev
v1.24.0_34-dev
v1.23.0_33-dev
v1.22.0_32-dev
v1.21.1_31-dev
v1.21.0_31-dev
v1.20.3_30-dev
v1.20.2_30-dev
v1.20.1_30-dev
v1.20.0_30-dev
v1.19.1_29-dev
v1.19.0_29-dev
v1.18.0_27-dev
v1.17.0_25-dev
v1.16.0_23-dev
v1.15.1_21-dev
v1.15.0_21-dev
v1.14.0_21-dev
v1.13.0_20-dev
v1.12.0_18-dev
v1.11.0_17-dev
v1.10.0_15-dev
v1.9.1_14-dev
v1.9.0_13-dev
v1.8.0_12-dev
v1.7.0_11-dev
v1.6.0_10-dev
v1.5.1+9-dev
v1.5.0+8-dev
v1.4.0+7-dev
v1.4.0+6-dev
v1.4.0-dev
v1.3.0-dev
v1.3.1-dev
v0.6-dev
v0.5-dev
v0.4-dev
v0.3-dev
v0.2-dev
first-android-release
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: immich-app/immich#340
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @FileGo on GitHub (Sep 30, 2022).
Describe the bug
I run my own CA, and have root certificate installed in trusted store of all of my devices. Reverse proxy (Caddy) obtains certificate from the CA for every subdomain, and this works great for all services on all of my devices.
I can access Immich via HTTPS from my phone's browser without any security warnings, but when I try to access it via app, I get the "Error logging you in, check server url, email and password" error message.
Task List
Please complete the task list below. We need this information to help us reproduce the bug or point out problems in your setup. You are not providing enough info may delay our effort to help you.
docker-composefile..envfile.To Reproduce
Steps to reproduce the behavior:
Expected behavior
The app should be able to login normally to Immich server, just as it does when accessing the instance directly (without reverse proxy).
Screenshots
If applicable, add screenshots to help explain your problem.
System
v1.30.01.30.0 build.46Additional context
docker-compose.yaml:
.env:
@alextran1502 commented on GitHub (Sep 30, 2022):
I also use Caddy as a reverse proxy but with its own auto managed certificated and I am able to access the site just fine.
Besides checking your email/password and the server URL, I don't have any suggestion at the moment since this is very specific to your setup 🤔.
@FileGo commented on GitHub (Oct 1, 2022):
That's because Caddy by default obtains a certificate from Let's Encrypt, whose root CA is trusted by pretty much every modern device connected to the internet.
I think this might be connected to this issue: https://github.com/flutter/flutter/issues/41781
@JaxTheWolf commented on GitHub (Nov 8, 2022):
I'm experiencing the exact same issue; I let Caddy handle my internal network SSL certs with my own root cert.
Perhaps could a switch be added to the login screen, explicitly telling the HTTP/S library in use in the mobile apps to ignore any certificate validation issues? Just shooting ideas here, as I have no idea how it's actually implemented.
@sirdeniel commented on GitHub (Nov 17, 2022):
Hi, would you mind sharing your compose.yaml and .env to reproduce? I'm having trouble setting mine with the default Caddy. I think I got the proxy part working but the web server response is:
Many thanks for considering my request.
Deniel
@alextran1502 commented on GitHub (Nov 17, 2022):
@sirdeniel Can you share your Caddy setting. I used Caddy myself, here is the config
@sirdeniel commented on GitHub (Nov 17, 2022):
@alextran1502 My Caddyfile has this:
I'm on Caddy v2, prior to 2.6
My compose.yml, with commented default proxy part:
immich-compose.yml
``` version: "3.8" networks: default: name: internalI manually set the
container_nameto match with Caddyimmich-web.My .env file:
@alextran1502 commented on GitHub (Nov 17, 2022):
It would be best if you did not uncomment the immich-proxy because it is used for the internal routing of the app.
@sirdeniel commented on GitHub (Nov 17, 2022):
I see, I thought it would conflict with Caddy since that is what I use as a proxy. Caddy uses container names to reverse proxy. Uncommenting
immich-proxywould requireIMMICH_WEB_URL,IMMICH_SERVER_URL, andIMMICH_MACHINE_LEARNING_URLwith their respective ports. Should I also reverse proxy them too?@alextran1502 commented on GitHub (Nov 17, 2022):
They are not required, you can see those values are commented out as optional
@d-sko commented on GitHub (Nov 21, 2022):
Hi, I have the same issue with Immich behind a traefik reverse proxy with certificates from my internal CA, which is trusted by my Phone (Android 13).
@sirdeniel commented on GitHub (Nov 23, 2022):
TLDR:
I got it! Mapping
nginx.confto a Caddyfile produces the following:Explanation
handle_pathtakes/api/*and does the same as the linerewrite /api/(.*) /$1 break;innginx.conffile. The intention is to map all/api/*requests to/*. e.g.yourdomain.com/api/something->yourdomain.com/something, thus translating the request toimmich-server:3001/somethinghandlewith no arguments takes the parentyourdomain.comto apply thereverse_proxy. e.g.yourdomain.com/myphotosends up toimmich-web:3000/myphotos/I setup Caddy and Immich in Docker where they see each other inside an internal network with no internet access rendering Immich more secure. Only Caddy connects to another network with internet access to serve as a proxy.
@d-sko commented on GitHub (Nov 23, 2022):
I've also fiddled around a bit and noticed that
https://<url>/apireturns a 404 if I only forward from traefik to theimmich-proxy-container.With the hint from @sirdeniel about the
/api-route I changed the traefik config like here: https://github.com/immich-app/immich/discussions/437#discussioncomment-3609797 but still no login from the app. Also the OIDC-login-button does not appear. Web UI works though.@d-sko commented on GitHub (Nov 28, 2022):
Small update: I enabled access logging in Traefik and while I can access Immich via browser on my phone without problems, I don't even get an entry in the access log when trying to use the app. It only says "Error logging you in, check server url, email and password". But when I try to connect with http instead of https I get entries in the access log.
@sirdeniel commented on GitHub (Dec 1, 2022):
My guess is you are trying to run both proxies, the
immich-proxyand yourtrafeikone. They may interfere with each other, that's why I comment theimmich-proxysection in my Docker composeimmich-compose.ymlshared above.@d-sko commented on GitHub (Dec 1, 2022):
@sirdeniel yes thats right, I had both proxies running then. But thats not the case anymore as I wrote in the same message. I also have the
immich-proxysection commented out and use only traefik. My current problem is that Immich is working in the browser on all my devices including my Android phone. I can login via OIDC (with Authentik as IDP), I can view and upload images, everything works. But if I try to use the app I don't even get an entry in traefiks access log. As if the app doesn't even try to connect. And thats very confusing to me. If I enter the url with http instead of https I get entries in the access log.@kriskbx commented on GitHub (Jan 18, 2023):
I experience the exact same problem. I have my own root CA and self-signed certificates. Running immich behind a traefik proxy. I have a few devices lying around, and can confirm that it's definitely related to Android. It works with the iOS app and it works on web.
@kriskbx commented on GitHub (Jan 20, 2023):
Here's a possible fix for all that are struggling with an immich instance in a local network and self-signed certificates: Use a real domain that you actually own and request a wildcard certificate using certbot and e.g. the DNS method (then you don't even need to spin up a server or something, you can do it from your local machine). Use that certificate with your local traefik proxy. If your router supports it, or you're using some kind of local DNS resolver like pihole you can point a chosen subdomain to your immich instance easily by setting an A record. It's a little bit or work and doesn't solve the issue itself, but it's cheap as you only need some kind of domain and I guess most of us have a spare domain lying around, right? Edit: And don't forget to put a reminder in your calendar to renew the certificate ;D
@greglook commented on GitHub (Jun 3, 2023):
How was this completed? As far as I can tell, this is still an issue and affected my recent setup of Immich. The underlying root issue in dart-lang is still open: https://github.com/dart-lang/sdk/issues/50435
I ultimately just allowed insecure HTTP traffic to the Immich server, which is obviously not a great end result.
@r01k commented on GitHub (Jun 9, 2023):
Same situation. Most likely the problem is that the Immich app is not trusting user-installed certificates. My solution will be to just get a publicly-trusted cert, which I was going to do anyways down the road.
Update:
Even with a publicly trusted cert the problem persists. In my case the error I get is "TLS/SSL communication failed: POST /oauth/config" when clicking Next on the endpoint screen. The same on all tested Android devices. On iOS is does work.
Update:
My problem was due to my certificate chain. See https://github.com/immich-app/immich/issues/2711
@Pheggas commented on GitHub (Jun 11, 2023):
Hello, @d-sko . I would have some questions about your setup as mine is really similar, could i get some contact info on you so we can chat about it? (maybe Discord / matrix / reddit)?
@d-sko commented on GitHub (Jun 12, 2023):
@Pheggas sorry, I've given up on Immich, never got it to work with my internal CA, don't have it running anymore.
@Pheggas commented on GitHub (Jun 12, 2023):
It's alright. I've already solved my issue just now. Thank you for reply anyway.
@ioogithub commented on GitHub (Jul 23, 2023):
Hi @Pheggas How did you end up fixing the problem?
@Pheggas commented on GitHub (Jul 24, 2023):
I've had wrongly set DNS on server. Just browse my issues - I've noted my journey in one of those.
@sjayanna01 commented on GitHub (Apr 12, 2024):
I have setup Caddy and Tailscale on synology NAS. Portainer and Tesmate are working fine over Tailscale HTTPS. But Grafana and Immich aren't working on similar grounds.
Immich is currently returning 404 in the caddy logs with a white screen in the UI. Can anybody please share your working caddy setups for immich, along with the docker composer details? Thank you!
@z1haze commented on GitHub (Jun 21, 2024):
Running into this issue on latest android app and latest immich server using traefik with cloud flare dns challenge Sadly more than 2 years later this is still unresolved
@mrspy87 commented on GitHub (Jun 25, 2024):
Same issue, please solve it.
@akostadinov commented on GitHub (Sep 8, 2024):
Can this be anyhow related to
IMMICH_TRUSTED_PROXIES? I can't find any documentation about it. But might play a role.Although it sounds like a specific device issue, in case maybe if it doesn't trust the proxy headers, it doesn't set secure cookies or something and some browsers consider this insecure, idk
PS I saw this env variable in https://immich.app/docs/install/environment-variables/
@da-wilky commented on GitHub (Apr 12, 2025):
Looks like a problem since 3 years.
Still no real fix for that. I also have a caddy setup in a local network and my root certificate installed on my android device.
I can access it via the browser (and ofc. https) but I can't set the url in the immich app - connection will fail that way. Inside the app its only possible for me on the 2283 port of the immich server, that I now need to expose instead of proxy it through caddy.
Pretty sad the app is not accepting the certificate added to android, even tho the browsers do.