# SSL/TLS Setup Guide
This guide covers setting up SSL/TLS support for Rostrum using the built-in SSL/TLS features.
## Overview
Rostrum provides built-in SSL/TLS support for:
- **TCP SSL (ElectrumS)**: Secure TCP connections
- **WebSocket SSL (WSS)**: Secure WebSocket connections
- **HTTPS**: Secure HTTP connections
## Prerequisites
- A domain name pointing to your server
- Root or sudo access to your server
- Port 80 and 443 open (for Let's Encrypt verification)
## Install Certbot
It is recommended that you set up certbot with auto-renewal of certificates.
However, the following is to help you get started.
Certbot is the recommended tool for obtaining free SSL certificates from Let's Encrypt.
### Ubuntu/Debian
```bash
sudo apt update
sudo apt install certbot
```
### CentOS/RHEL
```bash
sudo yum install certbot
# or for newer versions
sudo dnf install certbot
```
### macOS
```bash
brew install certbot
```
## Obtaining SSL Certificate
### Standalone Method (Recommended)
```bash
sudo certbot certonly --standalone -d yourdomain.com
```
### Webroot Method (Alternative)
If you have a web server running, you can use the webroot method:
```bash
sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com
```
## Configure Rostrum with SSL
### Basic SSL Configuration
When you provide SSL certificate files, Rostrum automatically enables SSL/TLS endpoints:
```bash
rostrum \
--ssl-cert-file=/etc/letsencrypt/live/yourdomain.com/fullchain.pem \
--ssl-key-file=/etc/letsencrypt/live/yourdomain.com/privkey.pem
```
**Enabled by default: With the above configuration, Rostrum will automatically enable:
- TCP SSL (ElectrumS) on the default SSL port
- WebSocket SSL (WSS) on the default WSS port
HTTPS needs to be explicitly enabled using the `--https` flag.
**Note**: TCP SSL and WebSocket SSL are enabled by default when SSL certificate files are provided. You only need to specify `--https` to enable the HTTPS endpoint. To disable any of these SSL endpoints, use the corresponding `--no-` flag (e.g., `--no-tcp-ssl`, `--no-websocket-ssl`).
### Enable All SSL Endpoints
```bash
rostrum \
--ssl-cert-file=/etc/letsencrypt/live/yourdomain.com/fullchain.pem \
--ssl-key-file=/etc/letsencrypt/live/yourdomain.com/privkey.pem \
--https
```
### Custom Port Configuration
```bash
rostrum \
--ssl-cert-file=/etc/letsencrypt/live/yourdomain.com/fullchain.pem \
--ssl-key-file=/etc/letsencrypt/live/yourdomain.com/privkey.pem \
--electrum-rpc-ssl-addr=0.0.0.0:50002 \
--electrum-ws-ssl-addr=0.0.0.0:50004 \
--https \
--electrum-https-addr=0.0.0.0:51001
```
**Note**: The ports shown above are the default Bitcoin Cash mainnet ports. For other networks (Nexa, testnet, etc.), see the [ports documentation](ports.md) for the correct default ports.
## Step 6: Firewall Configuration
Ensure your firewall allows the SSL ports:
### UFW (Ubuntu)
```bash
sudo ufw allow 50002/tcp # TCP SSL
sudo ufw allow 50004/tcp # WSS
sudo ufw allow 50001/tcp # HTTPS
```
### iptables
```bash
sudo iptables -A INPUT -p tcp --dport 50002 -j ACCEPT # TCP SSL
sudo iptables -A INPUT -p tcp --dport 50004 -j ACCEPT # WSS
sudo iptables -A INPUT -p tcp --dport 50001 -j ACCEPT # HTTPS
```
### firewalld (CentOS/RHEL)
```bash
sudo firewall-cmd --permanent --add-port=50002/tcp # TCP SSL
sudo firewall-cmd --permanent --add-port=50004/tcp # WSS
sudo firewall-cmd --permanent --add-port=50001/tcp # HTTPS
sudo firewall-cmd --reload
```