Option A: Self-Signed Certificate (Quick Setup)
# Create certificate directory
mkdir -p /etc/asterisk/keys
cd /etc/asterisk/keys
# Generate CA (Certificate Authority) key and certificate
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \
-subj "/CN=Asterisk CA/O=My Company/C=US"
# Generate Asterisk server key and CSR
openssl genrsa -out asterisk.key 2048
openssl req -new -key asterisk.key -out asterisk.csr \
-subj "/CN=pbx.example.com/O=My Company/C=US"
# Sign the server certificate with our CA
openssl x509 -req -days 3650 -in asterisk.csr \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-out asterisk.crt
# Create combined PEM file (key + cert)
cat asterisk.key asterisk.crt > asterisk.pem
# Set permissions
chown asterisk:asterisk /etc/asterisk/keys/*
chmod 600 /etc/asterisk/keys/*.key
chmod 600 /etc/asterisk/keys/*.pem
Option B: Let's Encrypt (Production Recommended)
# Install certbot
apt-get install certbot
# Get certificate (your domain must point to this server)
certbot certonly --standalone -d pbx.example.com
# Certificates are stored in:
# /etc/letsencrypt/live/pbx.example.com/fullchain.pem
# /etc/letsencrypt/live/pbx.example.com/privkey.pem
# Create symlinks or copy for Asterisk:
cp /etc/letsencrypt/live/pbx.example.com/fullchain.pem \
/etc/asterisk/keys/asterisk.crt
cp /etc/letsencrypt/live/pbx.example.com/privkey.pem \
/etc/asterisk/keys/asterisk.key
cat /etc/asterisk/keys/asterisk.key \
/etc/asterisk/keys/asterisk.crt > /etc/asterisk/keys/asterisk.pem
chown asterisk:asterisk /etc/asterisk/keys/*
# Set up auto-renewal hook to copy certs and reload Asterisk:
# In /etc/letsencrypt/renewal-hooks/deploy/asterisk.sh:
#!/bin/bash
cp /etc/letsencrypt/live/pbx.example.com/fullchain.pem /etc/asterisk/keys/asterisk.crt
cp /etc/letsencrypt/live/pbx.example.com/privkey.pem /etc/asterisk/keys/asterisk.key
cat /etc/asterisk/keys/asterisk.key /etc/asterisk/keys/asterisk.crt > /etc/asterisk/keys/asterisk.pem
chown asterisk:asterisk /etc/asterisk/keys/*
asterisk -rx "core reload"