show_crt_date.sh 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/bin/bash
  2. set -o errexit
  3. set -o nounset
  4. set -o pipefail
  5. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  6. source "$SCRIPT_DIR/functions.sh"
  7. show_usage() {
  8. echo "Usage: $0 <login> [pki_dir]"
  9. echo "Default pki_dir: /etc/openvpn/server/server/rsa/pki"
  10. exit 1
  11. }
  12. main() {
  13. [[ $# -lt 1 ]] && show_usage
  14. check_permissions
  15. local CN=$1
  16. local PKI_DIR=${2:-/etc/openvpn/server/server/rsa/pki}
  17. validate_pki_dir "${PKI_DIR}"
  18. local CERT_FILE
  19. CERT_FILE=$(find_cert_file "${CN}" "${PKI_DIR}") || {
  20. echo "${CN};NOT_FOUND;NOT_FOUND;ERROR;0"
  21. exit 3
  22. }
  23. # Получаем даты
  24. local NOT_BEFORE=$(openssl x509 -in "${CERT_FILE}" -noout -startdate | cut -d= -f2)
  25. local NOT_AFTER=$(openssl x509 -in "${CERT_FILE}" -noout -enddate | cut -d= -f2)
  26. # Вычисляем статус и дни
  27. local NOW_EPOCH=$(date -u +%s)
  28. local END_EPOCH=$(date -u -d "${NOT_AFTER}" +%s 2>/dev/null || date -u -j -f "%b %d %T %Y %Z" "${NOT_AFTER}" +%s 2>/dev/null)
  29. local DAYS=$(( (END_EPOCH - NOW_EPOCH) / 86400 ))
  30. local STATUS
  31. if [[ ${DAYS} -lt 0 ]]; then
  32. STATUS="EXPIRED"
  33. DAYS=$(( -DAYS ))
  34. else
  35. STATUS="VALID"
  36. fi
  37. # Выводим в формате CSV
  38. echo "${CN};${NOT_BEFORE};${NOT_AFTER};${STATUS};${DAYS}"
  39. exit 0
  40. }
  41. main "$@"