Jigasi or the transcriber rejects a private CA certificate

Short answer

A successful custom CA import does not prove Jigasi's running Java process uses that trust store. Issue #2344 reports this mismatch in stable-11248-1; stable-11248-2 adds the certificate-service property that preserves the custom trust store. Compare the exact error, release and service before upgrading, then verify the actual private TLS endpoint. [S1][S2][S3]

Match the symptom and the release

The upstream report concerns a Docker transcriber using Jigasi in stable-11248-1. The private CA was imported and independent TLS tests succeeded, but the running Jigasi process no longer retained javax.net.ssl.trustStore. Its outgoing WSS request failed with SSLHandshakeException and PKIX path building failed. These are the reporter’s findings, not tests completed by this site. [S1]

PR #2345 explains the integration: Jigasi’s certificate service sets the JVM trust store from net.java.sip.communicator.service.cert.truststore.file and removes it when that setting is absent. The corrected startup writes that setting when /run/ca/cacerts exists. The change shipped in stable-11248-2. [S2][S3]

Other causes remain possible: a missing mount, an unreadable or wrong CA file, a missing intermediate, an expired certificate, a hostname mismatch, an unreachable endpoint or a different TLS client. Do not diagnose all transcription failures as this regression.

Docker first: check the correct service and mount

Identify the running images and whether the failing service is jigasi or transcriber. They use different host configuration directories. The pinned stable-11248-2 Compose files mount: [S4]

Service Host directory under the actual CONFIG Container CA directory
jigasi jigasi/custom-ca /usr/local/share/ca-certificates
transcriber transcriber/custom-ca /usr/local/share/ca-certificates

The custom CA initializer accepts certificate files directly in that directory; nested folders are ignored. It builds a merged system bundle and a Java store under /run/ca. Use CA certificates approved for the endpoint, not private keys. Keep your existing Compose overlays and resolved host CONFIG; a directory created under another home folder will not populate the running container. [S5]

The standard files mount CA inputs read-only. Do not remove the root filesystem’s protections or write into system certificate directories inside a running container to make a test succeed.

Check generated configuration without exposing credentials

For an already running transcriber, these Linux-host examples inspect only the expected files and trust-store property. Include your actual Compose project and file options:

Terminal
docker compose exec -T transcriber sh -c \
  'test -r /run/ca/ca-certificates.crt && test -r /run/ca/cacerts'

docker compose exec -T transcriber sh -c \
  'grep -F "net.java.sip.communicator.service.cert.truststore.file=/run/ca/cacerts" /run/jigasi/config/sip-communicator.properties'

Use jigasi instead of transcriber only when that is the actual failing service. A zero exit status from the first command establishes readable files; the second establishes the expected generated property. Neither proves that the live Java client successfully connects. The store is not expected to exist when no custom CA is configured. [S3][S5]

Do not publish the complete properties file, process environment, connection URLs or logs: those can contain credentials and private endpoint details. Keep a sanitized error excerpt with the image version and the distinction between import, generated configuration and handshake.

Apply the released correction and retest

If the release and error match, use the matched-release upgrade workflow to evaluate stable-11248-2. Preserve persistent input files and optional Compose files, plan downtime, back up first and verify the new running images. Do not treat an in-container manual edit as a permanent deployment correction. [S2][S3]

Then repeat the actual transcription or SIP path that failed, with a disposable meeting and approved test endpoint. Confirm a successful TLS connection to the intended hostname and a useful service result. A browser trusting the same certificate does not prove the container’s Java client trusts it.

If PKIX errors remain after the correction, inspect the actual chain and CA selection with the endpoint operator. Do not disable certificate verification. Keep certificate trust separate from transcription provider credentials, model availability, WebSocket routing and meeting authorization.

Package installations and verification limits

The /run/ca initializer and Compose mount examples are Docker-release details. Debian and Ubuntu package installations need their installed Jigasi certificate-service configuration and Java trust-store lifecycle checked separately. Copying a Docker runtime path into a host package is not a package setup procedure.

Reviewed 25 October 2026 against the issue, merged correction and pinned release files. We did not reproduce the TLS failure, load a private CA into a running server or verify a real WSS/SIP/transcription connection. The upstream correction is released; these installation checks remain recommendations to perform on your setup.

Sources

Written by the Jitsi Help engineering team

Jitsi infrastructure engineers who deploy and run Jitsi Meet servers in production. Last updated . How we write our guides

Stuck on something this page does not cover? Ask a question below. Jitsi Help engineers read every one.

Did this fix it?

Something on this page is outdated or wrong?

Collect debug info

These commands gather what an engineer needs to diagnose a Jitsi server. Copy them, run them, and keep the output.

Terminal
# Run on the server, from your docker-jitsi-meet folder

# 1. Every service should be "running" (or "healthy")
docker compose ps

# 2. Which images and release tags are running
docker compose images

# 3. Recent logs from the core services
docker compose logs --tail=200 web prosody jicofo jvb

# 4. The settings most fixes depend on
grep -E '^(PUBLIC_URL|JVB_ADVERTISE_IPS|ENABLE_LETSENCRYPT|ENABLE_AUTH|AUTH_TYPE)=' .env

# 5. Is anything listening for media on UDP 10000?
sudo ss -ulnp | grep 10000

Installed with the Debian packages instead of Docker? Read the service logs with:

Terminal
sudo journalctl -u prosody -u jicofo -u jitsi-videobridge2 --since "1 hour ago"

Remove passwords, secrets and tokens before you share any output.

Send the output to an engineer

Frequently asked questions

Does a successful CA import prove Jigasi will trust my WSS service?

No. File import, the Java process's effective trust configuration and a successful TLS handshake are separate checks. Issue #2344 reports an imported CA that was not used by the running Jigasi process.

Which release corrects the reported Jigasi trust-store problem?

stable-11248-2 includes PR #2345. It sets Jigasi's certificate-service trust-store property when the generated custom Java store exists. This does not fix every possible certificate-chain or hostname problem.

Should I disable TLS verification or trust all certificates?

No. Preserve verification and use the intended CA, a complete server certificate chain and the correct hostname. Diagnose the release-specific configuration without converting a trust error into unverified connections.

Discussion

    Stuck, or would rather not do this by hand?

    Deploy it in one click

    A private Jitsi server in your own AWS account with SSL, your domain and optional recording, transcription and JWT. Free 15 minute trial.

    Start free trial

    Talk to a Jitsi engineer

    Setup, fixes, branding, recording, scaling. Tell us what is happening and we reply with a plan and a quote.

    Get expert help

    Related

    Recently updated