summaryrefslogtreecommitdiff
path: root/localmksslcerts
blob: 5cd706608860510070b86f0e8de9d9fe2f500e99 (plain)
  1. #!/bin/sh
  2. #
  3. # /usr/local/sbin/localmksslcerts
  4. # Copyright 2001-2002 Jonas Smedegaard <dr@jones.dk>
  5. #
  6. # $Id: localmksslcerts,v 1.7 2002-10-17 17:23:36 jonas Exp $
  7. #
  8. # Generate certificates for mail (and other) servers
  9. # Based on uw-imapd-ssl post-install script
  10. #
  11. prg=$(basename $0)
  12. copyright="(C) 2001-2002 Jonas Smedegaard <dr@jones.dk>"
  13. usage() {
  14. echo "$prg, $copyright
  15. Usage: $prg [--fqdn <FQDN>] [--issuer <issuer>] --daemon <daemon> [...] [--force]
  16. or: $prg [<FQDN>] <daemon> [<daemon>...] [-f]
  17. Options:
  18. --fqdn Fully Qualified Domain Name for this host.
  19. --daemon Daemon(s) in need for a certificate
  20. (separate certificate is generated for each daemon)
  21. --issuer Email address of the person responsible for the certificate
  22. -f, --force Force overwriting existing certificate
  23. -h, --help This help text
  24. If issuer is not given, \"postmaster@<localdomain>\" is used."
  25. exit 1
  26. }
  27. # Set some defaults
  28. CWD=`pwd`
  29. PATH=$PATH:/usr/bin/ssl
  30. COUNTRY='.'
  31. STATE='.'
  32. LOCALITY='.'
  33. DAYS2EXPIRE=365
  34. fqdn=''
  35. daemons=''
  36. issuer=''
  37. force=''
  38. args=''
  39. while [ $# -gt 0 ]; do
  40. doubleshift=''
  41. case $1 in
  42. --fqdn) fqdn="$2"; doubleshift=1;;
  43. --daemon) daemons="$daemons$2 "; doubleshift=1;;
  44. --issuer) issuer="$2"; doubleshift=1;;
  45. --force|-f) force=1;;
  46. -*) usage;;
  47. *) args="$args$1 ";;
  48. esac
  49. if [ -n "$doubleshift" ];then
  50. if [ $# -gt 1 ]; then
  51. shift
  52. else
  53. echo "Missing parameter for option \"$1\"!"
  54. usage
  55. fi
  56. fi
  57. shift
  58. done
  59. set -- $args
  60. if [ -z "$issuer" ]; then
  61. DOMAINNAME=`hostname -d`
  62. ISSUER="postmaster@$DOMAINNAME"
  63. fi
  64. if [ -z "$fqdn" ]; then
  65. if [ $# -gt 0 ]; then
  66. fqdn=$1
  67. shift
  68. else
  69. echo "Too few parameters!"
  70. usage
  71. fi
  72. fi
  73. cd /etc/ssl/certs
  74. for daemon in $daemons $@; do
  75. if [ -f $daemon.pem ]; then
  76. if [ -n $force ]; then
  77. rm -f `openssl x509 -noout -hash < $daemon.pem`.0
  78. rm -f $daemon.pem
  79. else
  80. echo "You already have /etc/ssl/certs/$daemon.pem - exiting...!"
  81. exit 1
  82. fi
  83. fi
  84. echo -n "Generating $daemon certificate..."
  85. openssl req -new -x509 -nodes -out $daemon.pem -keyout $daemon.pem -days $DAYS2EXPIRE > /dev/null 2>&1 <<+
  86. $COUNTRY
  87. $STATE
  88. $LOCALITY
  89. $fqdn
  90. $fqdn
  91. $fqdn
  92. $issuer
  93. +
  94. ln -sf $daemon.pem `openssl x509 -noout -hash < $daemon.pem`.0
  95. echo "Done!"
  96. chown root.root /etc/ssl/certs/$daemon.pem
  97. chmod 0640 /etc/ssl/certs/$daemon.pem
  98. done
  99. cd $CWD