BroadNet
SMPPSecurity

Securing SMPP: TLS, auth and IP allow-listing

Updated 2 min readStandards-based
Direct answer

SMPP itself is unencrypted — the bind system_id and password cross the wire in the clear over plain TCP. In production you secure it by running SMPP over TLS (wrapping the TCP session), authenticating with credentials plus IP allow-listing, enforcing TLS 1.2+, and rotating credentials from a secret manager rather than hard-coding them.

DiagramAn SMPP session between your platform and BroadNet
Your platform (ESME)
BroadNet SMSC
One persistent TCP/TLS connection
  1. bind_transceiverOpen and authenticate the session
  2. bind_transceiver_respSession accepted
  3. submit_smSend a message
  4. submit_sm_respAccepted, message ID returned
  5. deliver_smDelivery receipt or inbound message
  6. deliver_sm_respAcknowledged
  7. enquire_linkKeepalive while idle
§01

Why plaintext SMPP is a risk

The SMPP specification defines no transport security. On a plain TCP bind (port 2775), the system_id and password in bind_transmitter/receiver/transceiver, and every message body, travel unencrypted. On any untrusted path that exposes credentials to interception and traffic to eavesdropping. Security is therefore added at the transport layer, not by the protocol.

§02

SMPP over TLS

The standard control is to run the SMPP session inside a TLS tunnel: the TCP connection completes a TLS handshake before the bind PDU is sent, so credentials and payloads are encrypted end to end. There is no single IANA TLS port for SMPP, so providers expose a dedicated TLS-enabled port. Enforce TLS 1.2 or higher, validate the server certificate chain, reject expired or self-signed certificates, and never disable verification to 'make it work'.

Plaintext vs TLS SMPP
AspectPlain SMPPSMPP over TLS
TransportTCP (default port 2775)TCP + TLS (provider-provisioned port)
Credentials on wireCleartextEncrypted
Message bodiesCleartextEncrypted
Server identityUnverifiedCertificate-validated
§03

Authentication and IP allow-listing

SMPP authenticates with the system_id/password pair in the bind. That is weak on its own, so operators layer IP allow-listing on top: only pre-registered source IP addresses may open a bind, on both ends. Allow-listing is a standard operator control and a fast way to contain a leaked credential — a stolen password is useless from an unlisted IP. Combine it with TLS, not as a replacement for it.

§04

Credential hygiene

Treat SMPP credentials like any other secret. Store them in a secret manager, never in source code or config committed to a repo. Rotate on a schedule and immediately on any suspected exposure. Use distinct credentials per environment and per integration so one leak has a limited blast radius, and monitor for binds from unexpected IPs or at unexpected times.

FAQ

Frequently asked

Is SMPP encrypted by default?

No. SMPP has no built-in encryption — over plain TCP the credentials and message bodies are sent in cleartext. Encryption is added by running the SMPP session over TLS, which the protocol does not specify but every serious provider supports.

What port is SMPP over TLS?

There is no single standardised TLS port. Plaintext SMPP uses IANA port 2775; for TLS, providers expose a separate provisioned port (3550 is sometimes used). Use whatever TLS port your provider assigns.

Is IP allow-listing enough on its own?

No. IP allow-listing limits who can connect and contains leaked credentials, but it does not encrypt the traffic. Combine allow-listing with SMPP over TLS so both connection origin and data confidentiality are protected.

How should I store SMPP credentials?

In a secret manager, never in code or committed config. Use separate credentials per environment and integration, rotate them on a schedule and on any suspected leak, and monitor for binds from unexpected IPs.

References

Source specifications

The published standards this page is grounded in. Opens in a new tab.

BNMaintained by the BroadNet engineering team·Carrier-grade messaging since 2003
Put it on the wire

Build with a real SMPP bind and REST API.

Request test access with real test keys: send to your own verified number first, then move to production across 200+ countries once your sender identity and routes are approved.