heroagent/scripts/generate_cert.sh
2025-04-23 04:18:28 +02:00

72 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# Script to generate a self-signed certificate for WebDAV HTTPS testing
# Default values
CERT_DIR="./certs"
CERT_FILE="$CERT_DIR/webdav.crt"
KEY_FILE="$CERT_DIR/webdav.key"
DAYS=365
COMMON_NAME="localhost"
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-d|--dir)
CERT_DIR="$2"
CERT_FILE="$CERT_DIR/webdav.crt"
KEY_FILE="$CERT_DIR/webdav.key"
shift 2
;;
-cn|--common-name)
COMMON_NAME="$2"
shift 2
;;
-days)
DAYS="$2"
shift 2
;;
-h|--help)
echo "Usage: $0 [options]"
echo "Options:"
echo " -d, --dir DIR Directory to store certificates (default: ./certs)"
echo " -cn, --common-name CN Common name for certificate (default: localhost)"
echo " -days DAYS Validity period in days (default: 365)"
echo " -h, --help Show this help message"
exit 0
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;;
esac
done
# Create certificate directory if it doesn't exist
mkdir -p "$CERT_DIR"
echo "Generating self-signed certificate for $COMMON_NAME"
echo "Certificate will be valid for $DAYS days"
echo "Files will be stored in $CERT_DIR"
# Generate private key and certificate
openssl req -x509 -newkey rsa:4096 -keyout "$KEY_FILE" -out "$CERT_FILE" -days "$DAYS" -nodes -subj "/CN=$COMMON_NAME"
# Check if generation was successful
if [ $? -eq 0 ]; then
echo "Certificate generation successful!"
echo "Certificate: $CERT_FILE"
echo "Private key: $KEY_FILE"
# Make the files readable
chmod 644 "$CERT_FILE"
chmod 600 "$KEY_FILE"
echo ""
echo "To use these certificates with the WebDAV server, run:"
echo "go run cmd/webdavserver/main.go -https -cert $CERT_FILE -key $KEY_FILE [other options]"
else
echo "Certificate generation failed!"
fi