#!/bin/bash # Default password if not provided DEFAULT_PASSWORD="!Q2w3e4r" CERTS_DIR="./certs" DAYS_VALID=365 # Check if at least one service is provided if [ "$#" -lt 2 ]; then echo "Usage: $0 ... " exit 1 fi # Use the first argument as password; default to DEFAULT_PASSWORD if empty PFX_PASSWORD=${1:-$DEFAULT_PASSWORD} shift # Shift arguments so that the remaining are service names # Create directory to store certificates mkdir -p $CERTS_DIR # Step 1: Generate the CA certificate echo "Generating CA certificate..." openssl genrsa -out "$CERTS_DIR/ca.key" 2048 openssl req -x509 -new -nodes -key "$CERTS_DIR/ca.key" -sha256 -days $DAYS_VALID -out "$CERTS_DIR/ca.crt" \ -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/OU=YourUnit/CN=your-ca" # Function to create SSL certificate for a service generate_certificate () { SERVICE_NAME=$1 echo "Generating certificate for $SERVICE_NAME..." # Generate private key openssl genrsa -out "$CERTS_DIR/$SERVICE_NAME.key" 2048 # Create CSR openssl req -new -key "$CERTS_DIR/$SERVICE_NAME.key" -out "$CERTS_DIR/$SERVICE_NAME.csr" \ -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/OU=YourUnit/CN=$SERVICE_NAME" # Sign the certificate with the CA openssl x509 -req -in "$CERTS_DIR/$SERVICE_NAME.csr" -CA "$CERTS_DIR/ca.crt" -CAkey "$CERTS_DIR/ca.key" \ -CAcreateserial -out "$CERTS_DIR/$SERVICE_NAME.crt" -days $DAYS_VALID -sha256 # Convert to PFX format for ASP.NET openssl pkcs12 -export -out "$CERTS_DIR/$SERVICE_NAME.pfx" -inkey "$CERTS_DIR/$SERVICE_NAME.key" \ -in "$CERTS_DIR/$SERVICE_NAME.crt" -certfile "$CERTS_DIR/ca.crt" -password pass:$PFX_PASSWORD # Clean up CSR rm "$CERTS_DIR/$SERVICE_NAME.csr" } # Step 2: Generate certificates for each specified service for SERVICE in "$@" do generate_certificate "$SERVICE" done echo "Certificates generated successfully in $CERTS_DIR."