linphone-desktop
linphone-desktop copied to clipboard
Linux: CardDav synchronization fails
I'm having a similar problem as described for the Android version with a CardDav provider that only seems to support basic authentication (NextCloud). I'm getting closer but it's still not working:
After both setting store_ha1_passwd=0 in the linphonerc and using the basic realm sent by NextCloud in the WWW-Authenticate header for the authentication realm field in the Linphone GUI, I was able to synchronize the address book.
However, the contacts don't show up under contacts (despite being in the linphone.db) immediately after synchronization. And when I restart Linphone it segfaults:
QML debugging is enabled. Only use this in a safe environment.
2025-05-26 14:29:50:528 [app] DEBUG [Main] Setting ShareOpenGLContexts
2025-05-26 14:29:50:528 [app] DEBUG [Main] Disabling VSync
2025-05-26 14:29:50:531 [app] DEBUG [Main] Disabling QML disk cache
2025-05-26 14:29:50:531 [app] DEBUG [Main] Setting application to UTF8
2025-05-26 14:29:50:531 [app] DEBUG [Main] Creating application
2025-05-26 14:29:50:659 [app] MESSAGE Loading Fonts
2025-05-26 14:29:50:741 [app] MESSAGE Font families loaded:
Noto Sans
Noto Sans Light
Noto Sans ExtraBold
Noto Sans ExtraLight
Noto Sans Black
Noto Sans Thin
Noto Sans Medium
Noto Sans SemiBold
OpenMoji Color
OpenMoji
2025-05-26 14:29:50:742 [app] MESSAGE [App]: Starting Thread
2025-05-26 14:29:50:742 [app] MESSAGE Thread is running
2025-05-26 14:29:50:854 [app] DEBUG installed sys locale "en_US"
2025-05-26 14:29:50:854 [app] MESSAGE [App]: Display server : xcb
2025-05-26 14:29:50:854 [app] MESSAGE Starting application Linphone (bin: linphone). Version:6.0.0-CallEdition Os:ubuntu/24.04 Qt:6.9.0
2025-05-26 14:29:50:854 [app] DEBUG binpath= "/tmp/.mount_LinphosdDbtq/usr/bin/linphone"
2025-05-26 14:29:50:854 [app] DEBUG exec path autostart set appimage= "/home/floi/Downloads/Linphone-6.0.0-CallEdition-x86_64.AppImage"
2025-05-26 14:29:50:854 [app] DEBUG [Main] Initializing core for primary application
[1] 39186 segmentation fault (core dumped) Downloads/Linphone-6.0.0-CallEdition-x86_64.AppImage
I haven't been able to find the core file and would appreciate any pointers.
Hi @floi ,
Could you please attach the crash stack trace please ? You can use a tool like GDB to capture it, and when it happens type 'bt' and copy paste here what's printed.
Also the whole logs showing what happens during CardDAV sync might help us.
Thanks in advance.
The full logs from synchronization contain all of the vCards, but as far as I can see, this is how it ends:
2025-05-27 10:45:02:433 [AppRun.wrapped/liblinphone] MESSAGE [CardDAV] Contact created [<ContactName>] with eTag ["<eTag>"]
2025-05-27 10:45:02:433 [AppRun.wrapped/liblinphone] MESSAGE Insert new friend in database: <ContactName>
2025-05-27 10:45:02:435 [AppRun.wrapped/liblinphone] MESSAGE [CardDAV] Sync successful, saving new cTag [21]
2025-05-27 10:45:02:436 [AppRun.wrapped/app] MESSAGE [CarddavModel]: Successfully synchronized: <CardDavAddress>
~ » gdb -q Downloads/Linphone-6.0.0-CallEdition-x86_64.AppImage
Reading symbols from Downloads/Linphone-6.0.0-CallEdition-x86_64.AppImage...
(No debugging symbols found in Downloads/Linphone-6.0.0-CallEdition-x86_64.AppImage)
(gdb) run
Starting program: /home/floi/Downloads/Linphone-6.0.0-CallEdition-x86_64.AppImage
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Detaching after fork from child process 6584]
process 6581 is executing new program: /usr/bin/env
warning: could not find '.gnu_debugaltlink' file for /usr/bin/env
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
process 6581 is executing new program: /usr/bin/bash
warning: could not find '.gnu_debugaltlink' file for /lib/x86_64-linux-gnu/libtinfo.so.6
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Detaching after fork from child process 6589]
process 6581 is executing new program: /tmp/.mount_LinphoF9M7t9/usr/bin/linphone
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
warning: could not find '.gnu_debugaltlink' file for /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libpulse.so.0
warning: could not find '.gnu_debugaltlink' file for /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libglib-2.0.so.0
warning: could not find '.gnu_debugaltlink' file for /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libgthread-2.0.so.0
warning: could not find '.gnu_debugaltlink' file for /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libpulsecommon-15.99.so
warning: could not find '.gnu_debugaltlink' file for /lib/x86_64-linux-gnu/libbrotlidec.so.1
warning: could not find '.gnu_debugaltlink' file for /lib/x86_64-linux-gnu/libbrotlicommon.so.1
QML debugging is enabled. Only use this in a safe environment.
2025-05-27 10:33:30:270 [app] DEBUG [Main] Setting ShareOpenGLContexts
2025-05-27 10:33:30:270 [app] DEBUG [Main] Disabling VSync
2025-05-27 10:33:30:273 [app] DEBUG [Main] Disabling QML disk cache
2025-05-27 10:33:30:273 [app] DEBUG [Main] Setting application to UTF8
2025-05-27 10:33:30:273 [app] DEBUG [Main] Creating application
[New Thread 0x7fffedfff6c0 (LWP 6591)]
[New Thread 0x7fffed7fe6c0 (LWP 6592)]
2025-05-27 10:33:30:428 [app] MESSAGE Loading Fonts
2025-05-27 10:33:30:496 [app] MESSAGE Font families loaded:
Noto Sans
Noto Sans Light
Noto Sans ExtraBold
Noto Sans ExtraLight
Noto Sans Black
Noto Sans Thin
Noto Sans Medium
Noto Sans SemiBold
OpenMoji Color
OpenMoji
2025-05-27 10:33:30:496 [app] MESSAGE [App]: Starting Thread
[New Thread 0x7fffe57fe6c0 (LWP 6594)]
2025-05-27 10:33:30:497 [app] MESSAGE Thread is running
2025-05-27 10:33:30:607 [app] DEBUG installed sys locale "en_US"
2025-05-27 10:33:30:607 [app] MESSAGE [App]: Display server : xcb
2025-05-27 10:33:30:607 [app] MESSAGE Starting application Linphone (bin: linphone). Version:6.0.0-CallEdition Os:ubuntu/24.04 Qt:6.9.0
2025-05-27 10:33:30:607 [app] DEBUG binpath= "/tmp/.mount_LinphoF9M7t9/usr/bin/linphone"
2025-05-27 10:33:30:608 [app] DEBUG exec path autostart set appimage= "/home/floi/Downloads/Linphone-6.0.0-CallEdition-x86_64.AppImage"
2025-05-27 10:33:30:608 [app] DEBUG [Main] Initializing core for primary application
[New Thread 0x7fffe4ffd6c0 (LWP 6595)]
[New Thread 0x7fffdd3ff6c0 (LWP 6596)]
[New Thread 0x7fffcbfff6c0 (LWP 6597)]
[New Thread 0x7fffcb7fe6c0 (LWP 6598)]
[New Thread 0x7fffcaffd6c0 (LWP 6599)]
[New Thread 0x7fffca7fc6c0 (LWP 6600)]
[New Thread 0x7fffc9ffb6c0 (LWP 6601)]
[New Thread 0x7fffc97fa6c0 (LWP 6605)]
[New Thread 0x7fffb1bfe6c0 (LWP 6607)]
Thread 4 "QThread" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffe57fe6c0 (LWP 6594)]
0x00007ffff7f2e8ad in linphone::Address::clone() const ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/liblinphone++.so.10
(gdb) bt
#0 0x00007ffff7f2e8ad in linphone::Address::clone() const ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/liblinphone++.so.10
#1 0x000055555570df34 in MagicSearchModel::onSearchResultsReceived (this=0x555559c22190, magicSearch=...)
at /usr/include/c++/11/bits/shared_ptr_base.h:1295
#2 0x00007ffff7f43ce9 in ?? ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/liblinphone++.so.10
#3 0x00007ffff741b1ee in _linphone_magic_search_notify_search_results_received ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/liblinphone.so.10
#4 0x00007ffff7769eab in LinphonePrivate::MagicSearch::iterate()
()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/liblinphone.so.10
#5 0x00007ffff4f4ac02 in ?? ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libbelle-sip.so.1
#6 0x00007ffff4f14be8 in belle_sip_main_loop_run ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libbelle-sip.so.1
#7 0x00007ffff4f150f1 in belle_sip_main_loop_sleep ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libbelle-sip.so.1
#8 0x00007ffff7a1240f in linphone_core_iterate ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/liblinphone.so.10
#9 0x00005555556f3a32 in operator() (__closure=0x7fffd80040c0)
at ../../Linphone/model/core/CoreModel.cpp:73
#10 operator() (__closure=<optimized out>)
at /opt/Qt/6.9.0/gcc_64/include/QtCore/qobjectdefs_impl.h:116
#11 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, CoreModel::start()::<lambda()> >::call(CoreModel::start()::<lambda()>&, void**)::<lambda()> > (fn=...,
args=<optimized out>)
at /opt/Qt/6.9.0/gcc_64/include/QtCore/qobjectdefs_impl.h:65
#12 QtPrivate::FunctorCall<std::integer_sequence<long unsigned int--Type <RET> for more, q to quit, c to continue without paging--c
>, QtPrivate::List<>, void, CoreModel::start()::<lambda()> >::call (arg=<optimized out>, f=...)
at /opt/Qt/6.9.0/gcc_64/include/QtCore/qobjectdefs_impl.h:115
#13 QtPrivate::FunctorCallable<CoreModel::start()::<lambda()> >::call<QtPrivate::List<>, void> (arg=<optimized out>, f=...)
at /opt/Qt/6.9.0/gcc_64/include/QtCore/qobjectdefs_impl.h:337
#14 QtPrivate::QCallableObject<CoreModel::start()::<lambda()>, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>,
this_=0x7fffd80040b0, r=<optimized out>, a=<optimized out>,
ret=<optimized out>)
at /opt/Qt/6.9.0/gcc_64/include/QtCore/qobjectdefs_impl.h:547
#15 0x00007ffff31e3d38 in ?? ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#16 0x00007ffff31f2cfe in QTimer::timeout(QTimer::QPrivateSignal)
()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#17 0x00007ffff31d7f8f in QObject::event(QEvent*) ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#18 0x00007ffff5d9197b in QApplicationPrivate::notify_helper(QObject*, QEvent*) ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Widgets.so.6
#19 0x0000555555764f26 in App::notify (this=0x5555575af620,
receiver=0x7fffd8003fe0, event=0x7fffe57fd850)
at ../../Linphone/core/App.cpp:856
#20 0x00007ffff317ff9a in QCoreApplication::notifyInternal2(QObject*, QEvent*) ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#21 0x00007ffff333102a in QTimerInfoList::activateTimers() ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#22 0x00007ffff3465cd4 in ?? ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#23 0x00007ffff1a9bd3b in g_main_context_dispatch ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libglib-2.0.so.0
#24 0x00007ffff1af12b8 in ?? ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libglib-2.0.so.0
#25 0x00007ffff1a993e3 in g_main_context_iteration ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libglib-2.0.so.0
#26 0x00007ffff3465e9e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#27 0x00007ffff318cd0b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#28 0x00007ffff3296eae in QThread::exec() ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#29 0x00005555556ad408 in Thread::run (this=0x5555583126f0)
at ../../Linphone/tool/thread/Thread.cpp:34
#30 0x00007ffff333269b in ?? ()
from /tmp/.mount_LinphoF9M7t9/usr/bin/../lib/libQt6Core.so.6
#31 0x00007ffff289caa4 in start_thread (arg=<optimized out>)
at ./nptl/pthread_create.c:447
#32 0x00007ffff2929c3c in clone3 ()
at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
Two more things I've noticed:
- Linphone now syncs contacts with an empty authentication realm field (with store_ha1_passwd=0), I'm not sure if my previous observation was wrong or if this is due to my setup not being clean after multiple attempts at fixing this.
- While the vcards are stored in the friend table of linphone.db after synchronization, Linphone also creates a friends.db that does not seem to have any tables in it. I don't know if this is related.
Thanks!
It seems there is an attempt at cloning a SIP Address object that's null for at least one contact. I'll forward this issue to our desktop lead engineer.
Cheers,
In fact, for all the records in the friend table resulting from CardDav synchronization, the sip_address_id is NULL.
Thank you!
While the vcards are stored in the friend table of linphone.db after synchronization, Linphone also creates a friends.db that does not seem to have any tables in it. I don't know if this is related.
An addition on what you noticed:
I had some local contacts in friends.db which have been left intact after adding the CardDAV server. The table friends in linphone.db contains all the entries from friends.db and the CardDAV entries were added below. As @Viish already mentioned the field sip_address_id is empty for all those new entries which seems to be leading to the crash.
If you want to "revive" your Linphone after playing around with CardDAV you have to remove the credentials for the CardDAV sync from linphonerc and also remove all those entries with empty sip_address_id from the SQLite db linphone.db. Also remove the new added entry for the CardDAV from table friends_list.
Now Linphone works again.
Linux: CardDAV (Nextcloud) sync fails in Linphone 6 (Call Edition)
Environment
OS: Fedora 42 (x86_64)
Server: Nextcloud CardDAV (app password, HTTPS; URL ends with /)
Linphone: 6.x (Call Edition) on Linux (Also tested 5.3 “Full Edition” built from source with -DENABLE_CARDDAV=ON — CardDAV module is present there.)
Qt: 5.15
CA bundle set to system path:
[sip] root_ca=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
Steps to reproduce
Start Linphone 6.x (Call Edition) on Linux.
Create any SIP account (so the Contacts “Manage contact sources” UI is available).
Add a CardDAV source pointing to Nextcloud with valid credentials:
[contact_source_0]
type=carddav
enabled=1
default=1
label=Nextcloud Contacts
url=https://
Wait for initial sync.
Expected Contacts are fetched and shown in the Contacts view.
Actual
A “Synchronization error” appears and no contacts are imported.
Endpoint is reachable and creds are valid (verified with curl "
Notes
Same CardDAV source works at the HTTP level; problem appears specific to Linphone 6 on Linux.
Happy to provide a redacted debug log (LINPHONE_LOG_LEVEL=debug) if that helps.
Hi @ralfrupf1976,
Yes please attach logs so I can take a look at what happens please, thanks.
2025-10-07 13:37:24:801 [AppRun.wrapped/app] MESSAGE [CarddavModel]: No auth info provided upon saving.
2025-10-07 13:37:25:035 [AppRun.wrapped/belle-sip] MESSAGE channel ... message sent: PROPFIND /remote.php/dav/addressbooks/users/ralf/ralf-2/ HTTP/1.1 User-Agent: Linphone-Desktop/6.0.0-CallEdition ... LinphoneSDK/5.4.17 Depth: 0 Content-Type: application/xml;charset=utf-8 ... <-- NO "Authorization:" header
2025-10-07 13:37:25:094 [AppRun.wrapped/belle-sip] MESSAGE ... received: HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm="Unsere Cloud", charset="UTF-8" ... <s:exception>Sabre\DAV\Exception\NotAuthenticated</s:exception> <s:message>... No 'Authorization: Basic' header found ...</s:message>
2025-10-07 13:37:25:095 [AppRun.wrapped/liblinphone] WARNING [CardDAV] Query HTTP result code was [401], trying well-known 2025-10-07 13:37:25:095 [AppRun.wrapped/liblinphone] MESSAGE [CardDAV] Trying a well-known query on URL https://cloud.rupfs.ch/.well-known/carddav
Thanks @ralfrupf1976.
Indeed by default we don't support Basic auth as our policy is to store password under hash form, so if you can change your server settings to switch from Basic to Digest it shall work. Another option is to disable storing hashed password by editing your linphonerc file and adding/edition this:
[sip]
store_ha1_passwd=0
You'll also need to add your server credentials again (I recommend removing & adding back the whole CardDAV config just to be sure).
Cheers,
Hi, thanks for the quick feedback! I tried to apply your suggested workaround on Linux (Fedora, AppImage build of Linphone 6), but it seems the configuration model has changed:
On this version, there is no ~/.linphonerc file and also no ~/.linphone/ directory.
Instead, all configuration and settings are stored inside an SQLite database:
~/.local/share/linphone/linphone.db
The other files in that directory are only friends.db, call-history.db, logs/, codecs, etc.
So unfortunately, editing ~/.linphonerc as you suggested is not possible with the AppImage desktop build.
Would you be able to clarify:
Where exactly we should apply store_ha1_passwd=0 when running Linphone Desktop 6 as AppImage?
Is the correct approach to manually edit the SQLite config database (linphone.db) and add the [sip] store_ha1_passwd=0 entry there?
Or is there another supported way to enable Basic Auth for CardDAV in the new storage format?
This would help a lot, since at the moment CardDAV cannot authenticate due to the missing Authorization: Basic header, and the .linphonerc workaround doesn’t map directly to the AppImage/Linux Desktop deployment.
Thanks!
PS: Just to note: my Nextcloud instance runs behind Nginx Proxy Manager, which only exposes standard Basic Auth (as expected by most CardDAV/CalDAV clients like DAVx⁵, iOS, Thunderbird, etc.). Switching the server to Digest Auth isn’t really feasible here, since it would likely break compatibility with other clients and NPM doesn’t provide Digest support out of the box.
@ralfrupf1976,
First of all DAVx⁵ and Thunderbird do support Digest auth, it's what I use on my personal setup and it works fine (and in Linphone as well).
The configuration hasn't moved to the database, it's still in the linphonerc file but you're not looking at the right place, it's in ~/.config/linphone/linphonerc (I don't believe this change was made recently but I can be mistaken).
Hi, thanks again for your support. I’ve applied the store_ha1_passwd=0 change in linphonerc so that HA1 is no longer stored, and I can now add a CardDAV account in Linphone.
However, it’s still not working, and I’m unsure about the correct way to fill in the CardDAV configuration fields in Linphone. Could you clarify the following?
Server URL – should this be the direct path to a specific address book, e.g.
https://cloud.example.com/remote.php/dav/addressbooks/users/ralf/ralf-2/
or just the base URL, e.g.
https://cloud.example.com
so that Linphone discovers the right address book via /.well-known/carddav?
Username / Password – are these expected to be my Nextcloud login credentials (or an app password)?
Authentication realm – this field is still unclear to me. Should it be left empty so Linphone uses the default realm provided by the server, or does it need to match the WWW-Authenticate realm string (in my case Unsere Cloud from the 401 response)?
It would be very helpful if you could provide an example of a correct CardDAV configuration in Linphone Desktop, so I can compare with my Nextcloud setup.
Username & password are the credentials to get access to your CardDAV server, so probably your Nextcloud account.
The Server URL can be either the direct addressbook full URL (that's best as it prevents the discovery process and thus it's faster and mitigates the risk of failure during that step) or simply the base.
The Authentication realm is mandatory (even more in Basic auth) for our SDK to select the right account to use during the Basic/Digest auth process. You can find it in the logs in the 401 Unauthorized response sent by your server.
Summary of progress & remaining issues
After applying store_ha1_passwd=0 in linphonerc I was able to add my Nextcloud CardDAV account.
SIP registration and calls are working fine.
CardDAV sync succeeds (Linphone reports “Successfully synchronized”).
However:
Many of my contacts are not imported because Linphone cannot parse their vCards (all are vCard 4.0, produced by Nextcloud/Sabre VObject). Typical error in logs:
[vCard] Couldn't parse buffer … VERSION:4.0 … PREF=1;TYPE=work …
Shortly after sync, the app segfaults:
Magic Search … Found 141 results … Segmentation fault (core dumped)
So the main issues are:
Linphone’s vCard parser does not handle vCard 4.0 fields/parameters reliably.
The app crashes instead of gracefully skipping unsupported vCards.
Suggestion:
Make the CardDAV client request version="3.0" in REPORT queries, or add robust vCard 4.0 support.
Ensure non-parsable vCards are ignored/logged without crashing the app.
Thanks again – happy to provide a crash backtrace or sample vCards if that helps.
FYI: Under Windows 11 - it works!
Summary of the issue
I’m trying to configure Linphone Desktop (AppImage, Fedora 42) with my Nextcloud CardDAV address book. Functionally it should work (TLS is valid, authentication works with curl, etc.), but Linphone keeps failing to sync contacts.
Main problems encountered:
-
Configuration persistence
-
Any manual edits to
~/.linphonercare overwritten at startup. -
For example, I add
store_ha1_passwd=0, setroot_ca=/etc/pki/tls/certs/ca-bundle.crt, and replaceha1=with a plainpasswd=for my Nextcloud account. -
After restarting Linphone, these changes are lost:
root_cais reset to the temporary AppImage path (/tmp/.mount_linpho.../rootca.pem) which doesn’t exist.store_ha1_passwd=0disappears.- My Nextcloud
passwd=entry is replaced with anha1=hash again.
This makes it almost impossible to use Basic auth with CardDAV on Linux without hacking directly into Linphone’s SQLite database. That’s not something end users should ever need to do.
-
-
TLS / CA handling
-
Linphone AppImage fails the TLS handshake with:
SSL handshake failed : SSL - No CA Chain is set, but required to operate Could not load root ca from /tmp/.mount_linpho.../rootca.pem: No such file or directory -
This happens even though the system CA bundle (
/etc/pki/tls/certs/ca-bundle.crt) is valid and works withcurl. -
On Windows, it works fine because the Windows certificate store is used. On Linux AppImage, it seems the embedded CA path is broken.
-
-
Workarounds required
-
The only way to make it work is by manually editing both the SQLite database (
linphone.db) and thelinphonercfile, and launching Linphone with environment variables like:SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt \ BCTBX_TLS_CA_FILE=/etc/pki/tls/certs/ca-bundle.crt \ ./linphone.appimage -
Even then, Linphone may overwrite settings again on the next restart.
-
Expected behavior
- Linphone should respect user configuration in
linphonercand not silently overwrite it. - For CardDAV, it should allow storing plain passwords (
passwd=) ifstore_ha1_passwd=0is set. - The AppImage should either ship a working CA bundle or correctly use the system’s CA store.
Why this matters Right now, setting up CardDAV with Nextcloud on Linux AppImage is extremely fragile and requires low-level hacks. This is not acceptable for normal users and makes CardDAV basically unusable.
👉 Could you please confirm if this is a known limitation, and if there’s a plan to fix the config overwrite and CA bundle issues in future builds?