Documentation for controlling and preserving Bose SoundTouch devices
To use the /etc/hosts redirection method safely, SoundTouch devices must communicate over HTTPS. This requires the device to trust the AfterTouch Root CA certificate used by the local service.
The soundtouch-service can automatically configure a device to use the /etc/hosts method:
curl -X POST "http://localhost:8000/setup/migrate/{deviceIP}?method=hosts"
This command will:
/etc/hosts to point Bose domains to the service IP./etc/pki/tls/certs/ca-bundle.crt).The AfterTouch service automatically generates a Root CA when it first starts.
data/certs/ca.crtdata/certs/ca.keyYou can download the CA certificate for manual installation on other devices (like your phone or PC) from:
http://<server-ip>:8000/setup/ca.crt
The soundtouch-service now includes a built-in HTTPS listener. This simplifies the /etc/hosts redirection method by automatically presenting the correct certificates for Bose domains.
HTTPS_PORT environment variable (defaults to 8443).HTTPS_SERVER_URL (e.g., https://mysoundtouch.local:8443). If not set, the service attempts to guess it using the system hostname.*.api.bose.io, *.api.bosecm.com) plus specific domains (streaming.bose.com, updates.bose.com, stats.bose.com, bmx.bose.com, worldwide.bose.com, bose-prod.apigee.net, etc.).events.api.bosecm.com, eventsdev.api.bosecm.com, and future API services.The built-in HTTPS listener is configured to use modern and secure TLS settings while maintaining compatibility with SoundTouch devices (which support up to TLS 1.2 with OpenSSL 1.0.2).
ECDHE-RSA-AES128-GCM-SHA256[TLS] Certificate request for ServerName: events.api.bosecm.com)[TLS] ✅ Serving certificate for events.api.bosecm.com (matched *.api.bosecm.com))[TLS] ❌ Handshake failed from 192.168.1.50: tls: certificate not found)[TLS] ✅ Successful connection from 192.168.1.50)ECDHE-RSA-AES256-GCM-SHA384ECDHE-RSA-CHACHA20-POLY1305RSA-AES128-GCM-SHA256 (Legacy support)RSA-AES256-GCM-SHA384 (Legacy support)SoundTouch devices expect HTTPS on the default port 443. Since binding to port 443 usually requires root privileges, you have two options:
iptables or your firewall to forward traffic from 443 to 8443.sudo setcap 'cap_net_bind_service=+ep' ./soundtouch-service.soundtouch-service.server {
listen 443 ssl;
server_name streaming.bose.com bmx.bose.com stats.bose.com updates.bose.com;
ssl_certificate /path/to/generated-cert.crt;
ssl_certificate_key /path/to/generated-cert.key;
# Secure TLS configuration (matches soundtouch-service defaults)
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:AES128-GCM-SHA256:AES256-GCM-SHA384';
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
If you prefer to inject the CA certificate manually:
ca.crt to the device:
scp data/certs/ca.crt root@{deviceIP}:/tmp/
ssh root@{deviceIP} "(rw || mount -o remount,rw /) && cat /tmp/ca.crt >> /etc/pki/tls/certs/ca-bundle.crt"
You can verify that your device can correctly reach the soundtouch-service over HTTPS using the management web UI.
In the Migration Summary for a device, you will find an HTTPS Connection Test section:
curl --cacert to verify the connection. Use this to verify your HTTPS setup before modifying the device’s shared trust store.