Script Bash Interattivo per la Creazione di Certificati SSL
Ho preparato uno script bash che ti guiderà passo passo nella creazione di un certificato SSL. Lo script ti chiederà le informazioni necessarie durante l'esecuzione, incluso se hai Apache o Nginx installato e se desideri che lo script configuri automaticamente il server per te.
Ecco il contenuto dello script:
#!/bin/bash
# Verifica che lo script sia eseguito come root
if [ "$(id -u)" != "0" ]; then
echo "Questo script deve essere eseguito come root" 1>&2
exit 1
fi
# Funzione per verificare se un comando esiste
command_exists () {
command -v "$1" >/dev/null 2>&1 ;
}
# Variabili iniziali
CERTS_DIR="$HOME/certs"
CA_KEY="myCA.key"
CA_CERT="myCA.pem"
SERVER_KEY="server.key"
SERVER_CSR="server.csr"
SERVER_CERT="server.crt"
EXT_FILE="server.ext"
# Chiedi all'utente il dominio
read -p "Inserisci il nome di dominio (es: esempio.local): " DOMAIN
# Chiedi all'utente se ha Apache o Nginx
echo "Quale server web stai utilizzando?"
echo "1) Apache"
echo "2) Nginx"
echo "3) Nessuno/Altro"
read -p "Seleziona un'opzione [1-3]: " SERVER_CHOICE
# Chiedi se desidera che lo script configuri il server
read -p "Vuoi che lo script configuri automaticamente il server web? [s/n]: " CONFIGURE_SERVER
# Installazione dei pacchetti necessari
apt update
if ! command_exists openssl ; then
apt install -y openssl
fi
if ! command_exists update-ca-certificates ; then
apt install -y ca-certificates
fi
if [ "$SERVER_CHOICE" == "1" ] && ! command_exists apache2 ; then
apt install -y apache2
elif [ "$SERVER_CHOICE" == "2" ] && ! command_exists nginx ; then
apt install -y nginx
fi
# Creazione della directory per i certificati
mkdir -p "$CERTS_DIR"
cd "$CERTS_DIR"
# Generazione della chiave privata per il CA
echo "Generazione della chiave privata per il CA..."
openssl genrsa -des3 -out "$CA_KEY" 2048
# Generazione del certificato self-signed per il CA
echo "Generazione del certificato self-signed per il CA..."
openssl req -x509 -new -nodes -key "$CA_KEY" -sha256 -days 1825 -out "$CA_CERT"
# Copia del certificato CA nella store dei certificati di sistema
echo "Aggiunta del certificato CA alla store dei certificati di sistema..."
cp "$CA_CERT" /usr/local/share/ca-certificates/myCA.crt
update-ca-certificates
# Generazione della chiave privata per il server
echo "Generazione della chiave privata per il server..."
openssl genrsa -out "$SERVER_KEY" 2048
# Generazione della CSR per il server
echo "Generazione della CSR per il server..."
openssl req -new -key "$SERVER_KEY" -out "$SERVER_CSR" -subj "/C=IT/ST=/L=/O=/OU=/CN=$DOMAIN/emailAddress="
# Creazione del file delle estensioni
echo "Creazione del file delle estensioni..."
cat > "$EXT_FILE" << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
EOF
# Generazione del certificato per il server firmato dal CA
echo "Generazione del certificato per il server firmato dal CA..."
openssl x509 -req -in "$SERVER_CSR" -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial -out "$SERVER_CERT" -days 825 -sha256 -extfile "$EXT_FILE"
# Copia dei certificati nelle directory appropriate
cp "$SERVER_CERT" /etc/ssl/certs/
cp "$SERVER_KEY" /etc/ssl/private/
# Configurazione del server web
if [[ "$CONFIGURE_SERVER" =~ ^[sS]$ ]]; then
if [ "$SERVER_CHOICE" == "1" ]; then
# Configurazione per Apache
echo "Configurazione di Apache..."
APACHE_CONF="/etc/apache2/sites-available/$DOMAIN.conf"
cat > "$APACHE_CONF" << EOF
<VirtualHost *:443>
ServerName $DOMAIN
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/$SERVER_CERT
SSLCertificateKeyFile /etc/ssl/private/$SERVER_KEY
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
a2enmod ssl
a2ensite "$DOMAIN.conf"
systemctl restart apache2
elif [ "$SERVER_CHOICE" == "2" ]; then
# Configurazione per Nginx
echo "Configurazione di Nginx..."
NGINX_CONF="/etc/nginx/sites-available/$DOMAIN"
cat > "$NGINX_CONF" << EOF
server {
listen 443 ssl;
server_name $DOMAIN;
ssl_certificate /etc/ssl/certs/$SERVER_CERT;
ssl_certificate_key /etc/ssl/private/$SERVER_KEY;
root /var/www/html;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
ln -s "$NGINX_CONF" /etc/nginx/sites-enabled/
systemctl restart nginx
else
echo "Configurazione automatica del server non supportata per questa opzione."
fi
else
echo "Configurazione del server web saltata."
fi
# Aggiunta del certificato del server alla store dei certificati di sistema
echo "Aggiunta del certificato del server alla store dei certificati di sistema..."
cp /etc/ssl/certs/"$SERVER_CERT" /usr/local/share/ca-certificates/"$SERVER_CERT"
update-ca-certificates
echo "Operazione completata. Il certificato SSL per $DOMAIN è stato creato."
Come Utilizzare lo Script
Spiegazione Passo Passo
Consigliati da LinkedIn
Teoria Relativa ai Certificati SSL
I certificati SSL (Secure Sockets Layer) sono fondamentali per garantire comunicazioni sicure su internet. Ecco perché sono importanti e come funzionano:
Perché Creare un CA Locale?
Componenti Chiave del Processo
Estensioni del Certificato
Conclusione
Questo script ti aiuterà a creare certificati SSL personalizzati, chiedendoti passo passo le informazioni necessarie e automatizzando la configurazione del server web se lo desideri. La comprensione della teoria sottostante ai certificati SSL ti aiuterà a gestire meglio la sicurezza della tua infrastruttura.
Se hai domande o necessiti di ulteriori chiarimenti, non esitare a chiedere!