1
0

show_client_crt.sh 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. #SCRIPT_DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
  7. source "$SCRIPT_DIR/functions.sh"
  8. show_usage() {
  9. echo "Usage: $0 <login> [pki_dir]"
  10. echo "Default pki_dir: /etc/openvpn/server/server/rsa/pki"
  11. exit 1
  12. }
  13. main() {
  14. # Process arguments
  15. [[ $# -lt 1 ]] && show_usage
  16. check_permissions
  17. local CN=$1
  18. local PKI_DIR=${2:-/etc/openvpn/server/server/rsa/pki}
  19. # Validate PKI directory
  20. validate_pki_dir "${PKI_DIR}"
  21. # Find certificate file
  22. local CERT_FILE
  23. CERT_FILE=$(find_cert_file "${CN}" "${PKI_DIR}") || {
  24. log "Error: Certificate for CN=${CN} not found"
  25. exit 3
  26. }
  27. # Extract serial number for key lookup
  28. local SERIAL
  29. SERIAL=$(openssl x509 -in "${CERT_FILE}" -noout -serial | cut -d= -f2)
  30. # Find private key file
  31. local KEY_FILE
  32. KEY_FILE=$(find_key_file "${CN}" "${PKI_DIR}" "${SERIAL}") || {
  33. log "Error: Private key for CN=${CN} not found"
  34. exit 4
  35. }
  36. # Output results in XML-like format
  37. echo "<cert>"
  38. openssl x509 -in "${CERT_FILE}"
  39. echo "</cert>"
  40. echo
  41. echo "<key>"
  42. cat "${KEY_FILE}"
  43. echo "</key>"
  44. exit 0
  45. }
  46. main "$@"