-
Notifications
You must be signed in to change notification settings - Fork 0
Installing
BlackBerry OS 7 installs over the air. You open a .jad in the handset's own
browser and it fetches the .jar beside it. No cable, no desktop tool, no
signing.
On the handset's browser, over plain HTTP:
http://berryssh.cobanov.run/
Tap the install link. Done.
python3 tools/ota_server.py outOpen the printed URL on the handset, over Wi-Fi.
Use this script, not python3 -m http.server. A generic static server
sends the wrong MIME type and the handset then shows the descriptor as a page
of text instead of installing it, with no error. The two that must be right:
berryssh.jad text/vnd.sun.j2me.app-descriptor
berryssh.jar application/java-archive
No HTTPS redirect. The device cannot complete a modern TLS handshake, so a
hostname that redirects HTTP to HTTPS is simply unreachable from it. On
Cloudflare, turn off "Always Use HTTPS" for that hostname. A .dev domain
cannot work at all — it is HSTS-preloaded.
Serve both files no-store. The descriptor states the jar's exact byte
length, and if a cache serves an old descriptor beside a new jar the install
fails silently.
The version in the descriptor must increase. Equal is refused as already installed, and the message does not mention versions.
Saved connections survive upgrades — the stored format is versioned and older layouts are still read.
Why plain HTTP is not laziness
An OS 7.1 browser offers TLS 1.0 at best and its trust store is from 2011. A current CDN refuses TLS 1.0 and 1.1 outright and presents a certificate chained to a root that did not exist when the handset shipped. Neither half can be worked around from the device.
This applies only to fetching the installer. Once installed, berryssh does its own cryptography and never uses the browser's TLS.
Problems: Troubleshooting.