init-pki.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/bin/bash
  2. set -euo pipefail
  3. export EASYRSA_PKI=/openvpn/pki
  4. EASYRSA=/usr/share/easy-rsa/3/easyrsa
  5. mkdir -p /openvpn/state
  6. # --------------------------------------------------------
  7. # CA
  8. # --------------------------------------------------------
  9. if [ ! -f "${EASYRSA_PKI}/ca.crt" ]; then
  10. echo "Initializing PKI..."
  11. "${EASYRSA}" \
  12. --batch \
  13. init-pki
  14. echo "Generating CA..."
  15. EASYRSA_REQ_CN="OpenVPN Homelab CA" \
  16. "${EASYRSA}" \
  17. --batch \
  18. build-ca \
  19. nopass
  20. fi
  21. # --------------------------------------------------------
  22. # Certificat serveur
  23. # --------------------------------------------------------
  24. if [ ! -f "${EASYRSA_PKI}/issued/server.crt" ]; then
  25. echo "Generating server certificate..."
  26. "${EASYRSA}" \
  27. --batch \
  28. build-server-full \
  29. server \
  30. nopass
  31. fi
  32. # --------------------------------------------------------
  33. # tls-crypt
  34. # --------------------------------------------------------
  35. if [ ! -f "${EASYRSA_PKI}/tls-crypt.key" ]; then
  36. echo "Generating tls-crypt key..."
  37. openvpn \
  38. --genkey secret \
  39. "${EASYRSA_PKI}/tls-crypt.key"
  40. fi
  41. # --------------------------------------------------------
  42. # CRL
  43. # --------------------------------------------------------
  44. echo "Generating CRL..."
  45. EASYRSA_CRL_DAYS=3650 \
  46. "${EASYRSA}" \
  47. --batch \
  48. gen-crl
  49. # --------------------------------------------------------
  50. # Permissions
  51. #
  52. # OpenVPN passe en nobody après l'initialisation.
  53. # --------------------------------------------------------
  54. chown -R 65534:65534 /openvpn/state
  55. chmod 755 "${EASYRSA_PKI}"
  56. chmod 755 "${EASYRSA_PKI}/issued"
  57. chmod 711 "${EASYRSA_PKI}/private"
  58. chmod 644 \
  59. "${EASYRSA_PKI}/ca.crt" \
  60. "${EASYRSA_PKI}/issued/server.crt" \
  61. "${EASYRSA_PKI}/crl.pem"
  62. chmod 600 \
  63. "${EASYRSA_PKI}/private/server.key" \
  64. "${EASYRSA_PKI}/tls-crypt.key"
  65. chown 65534:65534 \
  66. "${EASYRSA_PKI}/ca.crt" \
  67. "${EASYRSA_PKI}/issued/server.crt" \
  68. "${EASYRSA_PKI}/crl.pem" \
  69. "${EASYRSA_PKI}/private/server.key" \
  70. "${EASYRSA_PKI}/tls-crypt.key"
  71. echo "PKI ready."