Firebird 3 WireCrypt Required with Srp Only Authentication – Remote Legacy Client Connection Fails
0 reputation · 15 Aug 2024, 00:47 UTC
0 reputation · 15 Aug 2024, 00:47 UTC
Goal: Configure a Firebird 3 server so that remote clients using the Srp authentication plugin can connect securely while legacy clients that rely on Legacy_Auth are also able to authenticate, without disabling WireCrypt encryption.
Constraint: The server presently has AuthServer set to Srp only and WireCrypt set to Required; legacy clients receive a connection‑rejected error, whereas adding Legacy_Auth to AuthServer restores access but weakens password protection because Legacy_Auth uses an 8‑character‑effective hash.
Uncertainty: It is unclear whether specifying both Srp and Legacy_Auth in AuthServer allows the server to prefer Srp for new connections while still accepting Legacy_Auth as a fallback, and how the WireCrypt setting interacts with this plugin negotiation.
Which AuthServer value enables Srp‑first negotiation with Legacy_Auth fallback? Does WireCrypt = Required enforce encryption for both Srp and Legacy_Auth paths? Can legacy authentication be isolated to a separate port or instance to avoid weakening the overall security posture?
31775 reputation · 15 Aug 2024, 06:39 UTC
Set AuthServer = Srp, Legacy_Auth in firebird.conf. Firebird 3 evaluates authentication plugins in the order listed, so any client whose fbclient library supports Srp negotiates Srp first; only clients that cannot offer Srp fall back to Legacy_Auth. Listing Legacy_Auth second does not downgrade Srp-capable clients.
WireCrypt = Required is orthogonal to the plugin list. It forces wire-protocol encryption on every accepted connection regardless of which authentication plugin was negotiated, so both the Srp path and the Legacy_Auth path are encrypted on the wire. It does not influence which plugin is chosen.
Wire encryption protects the Legacy_Auth handshake from passive sniffing on the network, but it does not repair Legacy_Auth's inherent weakness: the effective 8-character DES-based password hash. Anyone who can reach the port can attempt the weaker path, and captured hashes remain crackable. Treat Legacy_Auth as a transitional compatibility measure, not a permanent configuration.
The cleanest isolation is a second Firebird instance with its own firebird.conf, its own port (RemoteServicePort), and AuthServer = Legacy_Auth, while the main instance stays Srp-only. Point legacy clients at the legacy port and restrict that port with firewall rules to the known source addresses of the legacy machines. This keeps the weak plugin unreachable from the general network. Per-database overrides in databases.conf can further scope which databases the legacy instance exposes.
The better long-term fix is client-side: the plugin a client offers is determined by its fbclient library, not the server. Deploying a Firebird 3-capable fbclient (with AuthClient including Srp) to the legacy machines usually removes the need for Legacy_Auth entirely, even if the application itself is old.
AuthServer = Srp, Legacy_Auth and WireCrypt = Required, then restart the Firebird service — config changes do not apply to a running server.fbclient and confirm the session used Srp (for example via the monitoring tables such as MON$ATTACHMENTS or server logs).WireCrypt = Required applies to both auth paths.This applies to Firebird 3 parameter names and negotiation behavior. Firebird 4 changed defaults (for example Srp256) and some details, so confirm against the firebird.conf comments and release notes shipped with your exact installed version. Also note that Srp users must exist in the Srp user manager; accounts created only under the legacy user manager will not authenticate via Srp.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.