revoke_client.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #!/bin/bash
  2. # Функция для логирования
  3. log() {
  4. logger -t "openvpn-revoke" -p user.info "$1"
  5. echo "$1" # Также выводим в консоль для обратной связи
  6. }
  7. if [ $# -ne 3 ]; then
  8. log "Usage: $0 <service_name> <rsa_dir> <username>"
  9. exit 1
  10. fi
  11. SRV_NAME="${1}"
  12. RSA_DIR="${2}"
  13. USERNAME="${3}"
  14. ORIGINAL_USER="$SUDO_USER"
  15. if [ -z "${ORIGINAL_USER}" ]; then
  16. ORIGINAL_USER='www-data'
  17. fi
  18. log "Starting certificate revocation for $USERNAME by user $ORIGINAL_USER"
  19. # Проверяем существование директории RSA
  20. if [ ! -d "$RSA_DIR" ]; then
  21. log "Error: RSA directory not found: $RSA_DIR"
  22. exit 1
  23. fi
  24. # Переходим в директорию RSA
  25. cd "$RSA_DIR" || exit 1
  26. # Проверяем наличие easyrsa
  27. if [ ! -f "./easyrsa" ]; then
  28. log "Error: easyrsa not found in $RSA_DIR"
  29. exit 1
  30. fi
  31. # Проверяем существование сертификата
  32. if [ ! -f "./pki/issued/${USERNAME}.crt" ]; then
  33. log "Error: Certificate for user $USERNAME not found"
  34. exit 1
  35. fi
  36. # Проверяем, не отозван ли уже сертификат
  37. if grep -q "/CN=${USERNAME}" ./pki/index.txt | grep -q "R"; then
  38. log "Error: Certificate for $USERNAME is already revoked"
  39. exit 1
  40. fi
  41. # Отзываем сертификат
  42. log "Revoking certificate for user: $USERNAME"
  43. ./easyrsa --batch revoke "$USERNAME"
  44. # Проверяем успешность отзыва
  45. if [ $? -eq 0 ]; then
  46. log "Successfully revoked certificate for $USERNAME"
  47. # Генерируем CRL (Certificate Revocation List)
  48. log "Generating CRL..."
  49. ./easyrsa --batch gen-crl
  50. chown nobody:${ORIGINAL_USER} -R "$RSA_DIR/pki/issued/"
  51. chown nobody:nogroup -R "$RSA_DIR/pki/crl.pem"
  52. chmod 640 "${RSA_DIR}"/pki/issued/*.crt
  53. if [ $? -eq 0 ]; then
  54. log "CRL generated successfully"
  55. # Рестартуем сервис
  56. log "Restarting service: $SRV_NAME"
  57. systemctl restart "${SRV_NAME}"
  58. if [ $? -eq 0 ]; then
  59. log "Service $SRV_NAME restarted successfully"
  60. log "Certificate revocation completed for $USERNAME"
  61. exit 0
  62. else
  63. log "Error: Failed to restart service $SRV_NAME"
  64. exit 1
  65. fi
  66. else
  67. log "Error: Failed to generate CRL"
  68. exit 1
  69. fi
  70. else
  71. log "Error: Failed to revoke certificate for $USERNAME"
  72. exit 1
  73. fi