Port 8443 is a conventional alternative HTTPS port. It is not registered as a standard, it carries exactly the same TLS traffic as 443, and it is used mostly by admin consoles, appliance management interfaces, and applications running without root privileges. The convention exists for a practical reason that has nothing to do with security.
That distinction matters because a non-standard port is regularly treated as a security measure, and it is not one. Understanding why it exists tells you when using it is sensible and when it is papering over a missing reverse proxy.
Table of contents
- Why the convention exists
- Why it is not more secure
- Binding to 443 without running as root
- The practical costs of a non-standard port
- Securing what is actually there
- Checking what is listening
- How this fits the rest of the stack
- FAQ
Why the convention exists
On Unix-like systems, ports below 1024 are privileged: binding to them historically requires root. Port 443 is in that range.
So an application that should not run as root — which is nearly all of them — cannot bind 443 directly. Ports above 1024 are unrestricted, and 8443 became the convention for HTTPS in the same way 8080 became the convention for HTTP: it is visually related to the real port and easy to remember.
The other driver is co-existence. If a web server already occupies 443, a management interface on the same host needs somewhere else to live. Appliances, application servers, and control panels commonly land on 8443 for exactly this reason.
Neither reason involves security. The port number is a binding constraint and a naming convention, nothing more.
Why it is not more secure
The belief that a non-standard port provides protection deserves addressing directly, because it is common and it is wrong.
Internet-wide port scanning covers the full range routinely. Scanning all 65,535 ports on an address takes seconds, and services on unusual ports are catalogued by public scanning projects continuously. A service on 8443 is found essentially as fast as one on 443.
What a non-standard port does provide is a modest reduction in undirected background noise. Automated scripts probing for known vulnerabilities often check common ports only, so log volume drops. That is real and it is not security — anyone targeting you specifically finds the service immediately.
The distinction worth holding: a different port changes how much untargeted noise you see. It changes nothing about whether a determined attacker finds the service. Treat anything on 8443 as exactly as exposed as it would be on 443, because it is.
Binding to 443 without running as root
Since the privileged-port constraint is the main reason for 8443, it is worth knowing that it is solvable. Three approaches:
- A reverse proxy. The proxy binds 443 as root and drops privileges, forwarding to your application on a high port. This is the standard answer and it brings TLS termination, request logging, and rate limiting with it.
- Linux capabilities.
setcap 'cap_net_bind_service=+ep' /path/to/binarylets a specific binary bind low ports without full root. Cleaner than running as root and it must be reapplied after every upgrade replaces the binary, which is easy to forget. - Port forwarding at the firewall. Redirect 443 to 8443 with an iptables or nftables rule. The application still binds a high port and clients use the standard one.
The reverse proxy is the right default for anything user-facing. Not because of the port — because you almost certainly want TLS termination, logging, and the ability to route more than one application on one address, and a proxy gives you all of it.
In a container the whole question often evaporates. Containers have their own network namespace, so a process can bind 443 inside the container without host privileges, and the orchestrator maps it wherever it likes.
The practical costs of a non-standard port
Using 8443 for something users reach has real friction:
- The port must be in the URL. https://example.com:8443 is what people have to type, bookmark, and get right.
- Corporate firewalls frequently block it. Many networks allow 80 and 443 outbound and nothing else. A service on 8443 is unreachable from those networks, and the failure is a timeout with no explanation.
- Some tools assume 443. Webhook senders, integrations, and monitoring services sometimes cannot be configured with a port at all.
- Certificate automation may need port 80. The HTTP-01 challenge requires port 80; if that is unavailable, the DNS-01 challenge is the alternative and it needs DNS API access.
The firewall point is the one that produces the most confusing support conversations. The service works for everyone testing it and fails for users on a restrictive corporate network, with no error beyond a hang.
So: 8443 is fine for an internal admin interface or something accessed by a known set of people. For anything public, put it behind 443.
Securing what is actually there
Given the port itself provides nothing, the controls that do:
- Restrict by source address. An admin interface reachable only from a VPN range or specific addresses is genuinely protected. This is worth more than every other item combined.
- Use a real certificate. Management interfaces frequently ship with self-signed certificates, which trains people to click through warnings — and once that habit exists, a genuine interception warning gets clicked through too.
- Change default credentials. Appliance interfaces on 8443 with factory passwords are a well-known category of exposure.
- Require modern TLS. Management interfaces are often the last thing updated and the most likely to still accept TLS 1.0.
- Log and alert on authentication failures. Repeated failed logins on an admin interface is a signal worth having.
The first is the one that changes the risk profile. Everything on that list is standard practice; source restriction is what makes an admin interface genuinely hard to reach rather than merely inconvenient to find.
Checking what is listening
To see what is actually bound locally:
ss -tlnp | grep 8443
# or
lsof -i :8443
To verify what is exposed and what certificate it presents:
openssl s_client -connect example.com:8443 -servername example.com < /dev/null 2>/dev/null | openssl x509 -noout -subject -dates
The check worth doing periodically is from outside your network rather than from the host. A service bound to 0.0.0.0 is reachable from anywhere the network allows, and the difference between intended and actual exposure is one firewall rule that was never added.
The recurring mistake is an admin interface intended for internal use that was bound to all interfaces on a host with a public address. It works, nobody notices, and it is public. Scanning your own external address is the two-minute check that catches it.
How this fits the rest of the stack
The useful summary is that a port number is a binding convention, not a security control, and anything on a high port needs the same protection it would need on a standard one. What genuinely reduces exposure is restricting who can reach the service at all — which is a network decision rather than a port choice. Services on RunxBuild deploy behind a live route with certificates handled, so the privileged-port question does not arise, and databases are reachable over private networking rather than a public port. The RunxBuild hosting calculator itemises what the service and database cost together.
Useful related references:
- What Port is SSH: 22 (Default), How to Change, and Why
- Default Port for SSH: Why 22, and When to Change It
- What Port for SSH: 22, 2222, and the Right Defaults
- Services on RunxBuild
FAQ
What is port 8443 used for?
It is a conventional alternative HTTPS port, carrying the same TLS traffic as 443. It is used by admin consoles, appliance management interfaces, and applications that cannot bind privileged ports below 1024 without root.
Is running a service on port 8443 more secure than 443?
No. Internet-wide scanning covers all ports routinely and services on unusual ports are catalogued continuously. It reduces untargeted background noise in your logs and provides no protection against anyone targeting you specifically.
Why can my application not bind to port 443?
Ports below 1024 are privileged on Unix-like systems and require root or a specific capability. Use a reverse proxy, grant cap_net_bind_service to the binary, or forward the port at the firewall.
Will port 8443 be blocked by firewalls?
Often. Many corporate networks permit only 80 and 443 outbound, so a service on 8443 is unreachable from them and fails as an unexplained timeout. For anything public-facing, serve it on 443.
How do I check what is listening on port 8443?
Run ss -tlnp | grep 8443 or lsof -i :8443 on the host. More importantly, scan from outside your network — a service bound to 0.0.0.0 on a host with a public address is publicly reachable whether you intended it or not.