provisioning/taskservs/polkadot/node/default/setup-ssl.sh.j2

108 lines
3.1 KiB
Plaintext
Raw Permalink Normal View History

#!/bin/bash
# Info: SSL setup script for Polkadot Node WSS
# Author: Provisioning System
set -e
DOMAIN="{{ polkadot_node.wss.domain }}"
SSL_CERT_FILE="{{ polkadot_node.wss.ssl.cert_file }}"
SSL_KEY_FILE="{{ polkadot_node.wss.ssl.key_file }}"
EMAIL=${SSL_EMAIL:-admin@${DOMAIN}}
echo "Setting up SSL certificates for Polkadot Node WSS..."
# Function to setup Let's Encrypt certificate
setup_letsencrypt() {
echo "Setting up Let's Encrypt certificate for $DOMAIN..."
# Stop nginx temporarily
systemctl stop nginx 2>/dev/null || true
# Generate certificate
certbot certonly --standalone \
--non-interactive \
--agree-tos \
--email "$EMAIL" \
-d "$DOMAIN"
# Copy certificates to expected locations
cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" "$SSL_CERT_FILE"
cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" "$SSL_KEY_FILE"
# Set proper permissions
chmod 644 "$SSL_CERT_FILE"
chmod 600 "$SSL_KEY_FILE"
chown root:root "$SSL_CERT_FILE" "$SSL_KEY_FILE"
echo "Let's Encrypt certificate installed successfully"
}
# Function to generate self-signed certificate
setup_selfsigned() {
echo "Generating self-signed certificate for $DOMAIN..."
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout "$SSL_KEY_FILE" \
-out "$SSL_CERT_FILE" \
-subj "/C=US/ST=State/L=City/O=Organization/CN=$DOMAIN"
# Set proper permissions
chmod 644 "$SSL_CERT_FILE"
chmod 600 "$SSL_KEY_FILE"
chown root:root "$SSL_CERT_FILE" "$SSL_KEY_FILE"
echo "Self-signed certificate generated successfully"
}
# Create certificate directories
mkdir -p "$(dirname "$SSL_CERT_FILE")"
mkdir -p "$(dirname "$SSL_KEY_FILE")"
# Setup certificate based on preference
case "${SSL_METHOD:-letsencrypt}" in
"letsencrypt")
setup_letsencrypt
;;
"selfsigned")
setup_selfsigned
;;
*)
echo "Invalid SSL method: ${SSL_METHOD}"
echo "Use 'letsencrypt' or 'selfsigned'"
exit 1
;;
esac
# Verify certificates
if [ -f "$SSL_CERT_FILE" ] && [ -f "$SSL_KEY_FILE" ]; then
echo "SSL certificates installed:"
echo "Certificate: $SSL_CERT_FILE"
echo "Private key: $SSL_KEY_FILE"
# Test certificate
openssl x509 -in "$SSL_CERT_FILE" -noout -text | grep -E "(Subject:|Issuer:|Not After:)"
else
echo "Error: SSL certificate setup failed"
exit 1
fi
# Setup certificate renewal for Let's Encrypt
if [ "${SSL_METHOD:-letsencrypt}" = "letsencrypt" ]; then
# Create renewal hook
cat > /etc/letsencrypt/renewal-hooks/deploy/polkadot-node.sh << 'EOF'
#!/bin/bash
# Copy renewed certificates
cp "/etc/letsencrypt/live/{{ polkadot_node.wss.domain }}/fullchain.pem" "{{ polkadot_node.wss.ssl.cert_file }}"
cp "/etc/letsencrypt/live/{{ polkadot_node.wss.domain }}/privkey.pem" "{{ polkadot_node.wss.ssl.key_file }}"
# Reload nginx
systemctl reload nginx
echo "Polkadot Node SSL certificates renewed"
EOF
chmod +x /etc/letsencrypt/renewal-hooks/deploy/polkadot-node.sh
echo "Certificate auto-renewal configured"
fi
echo "SSL setup completed successfully!"