home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / sbin / make-ssl-cert < prev    next >
Encoding:
Text File  |  2006-05-24  |  3.7 KB  |  137 lines

  1. #!/bin/bash -e
  2. # This is a mockup of a script to produce a snakeoil cert
  3. # The aim is to have a debconfisable ssl-certificate script
  4.  
  5. . /usr/share/debconf/confmodule
  6. db_version 2.0
  7. db_capb backup
  8.  
  9. ask_via_debconf() {
  10.     db_settitle make-ssl-cert/title
  11.  
  12.     templates="countryname statename localityname organisationname ouname hostname email"
  13.  
  14.     for i in $templates; do
  15.     RET=""
  16.     while [ "x$RET" = "x" ]; do
  17.         db_fset make-ssl-cert/$i seen false
  18.         db_input high make-ssl-cert/$i || true
  19.         db_go
  20.         db_get make-ssl-cert/$i
  21.     done
  22.      done
  23.  
  24.      db_get make-ssl-cert/countryname
  25.      CountryName="$RET"
  26.      db_fset make-ssl-cert/countryname seen false
  27.  
  28.      db_get make-ssl-cert/statename
  29.      StateName="$RET"
  30.      db_fset make-ssl-cert/statename seen false
  31.  
  32.      db_get make-ssl-cert/localityname
  33.      LocalityName="$RET"
  34.      db_fset make-ssl-cert/localityname seen false
  35.  
  36.      db_get make-ssl-cert/organisationname
  37.      OrganisationName="$RET"
  38.      db_fset make-ssl-cert/organisationname seen false
  39.  
  40.      db_get make-ssl-cert/ouname
  41.      OUName="$RET"
  42.      db_fset make-ssl-cert/ouname seen false
  43.  
  44.      db_get make-ssl-cert/hostname
  45.      HostName="$RET"
  46.      db_fset make-ssl-cert/hostname seen false
  47.  
  48.      db_get make-ssl-cert/email
  49.      Email="$RET"
  50.      db_fset make-ssl-cert/email seen false
  51. }
  52.  
  53. make_snakeoil() {
  54.      CountryName="XX"
  55.      StateName="There is no such thing outside US"
  56.      LocalityName="Everywhere"
  57.      OrganisationName="OCOSA"
  58.      OUName="Office for Complication of Otherwise Simple Affairs"
  59.      HostName="$(hostname)"
  60.      Email="root@$HostName"
  61. }
  62.  
  63. create_temporary_cnf() {
  64.     sed -e s#@CountryName@#"$CountryName"# \
  65.     -e s#@StateName@#"$StateName"# \
  66.     -e s#@LocalityName@#"$LocalityName"# \
  67.     -e s#@OrganisationName@#"$OrganisationName"# \
  68.     -e s#@OUName@#"$OUName"# \
  69.     -e s#@HostName@#"$HostName"# \
  70.     -e s#@Email@#"$Email"# \
  71.     $template > $TMPFILE
  72. }
  73.  
  74. # Takes two arguments, the base layout and the output cert.
  75.  
  76. if [ $# -lt 2 ] && [ "$1" != "generate-default-snakeoil" ]; then
  77.     printf "Usage: $0 template output [--force-overwrite]\n";
  78.     printf "Usage: $0 generate-default-snakeoil [--force-overwrite]\n";
  79.     exit 1;
  80. fi
  81.  
  82. if [ "$1" != "generate-default-snakeoil" ]; then
  83.     template="$1"
  84.     output="$2"
  85.     # be anal in manual mode.
  86.     if [ ! -f $template ]; then
  87.     printf "Could not open template file: $template!\n";
  88.     exit 1;
  89.     fi
  90.     if [ -f $output ] && [ "$3" != "--force-overwrite" ]; then
  91.         printf "$output file already exists!\n";
  92.         exit 1;
  93.     fi
  94.     ask_via_debconf
  95. else
  96.     template="/usr/share/ssl-cert/ssleay.cnf"
  97.     if [ -f "/etc/ssl/certs/ssl-cert-snakeoil.pem" ] && [ -f "/etc/ssl/private/ssl-cert-snakeoil.key" ]; then
  98.         if [ "$2" != "--force-overwrite" ]; then
  99.              exit 0
  100.         fi
  101.     fi
  102.     make_snakeoil
  103. fi
  104.  
  105. # # should be a less common char
  106. # problem is that openssl virtually accepts everything and we need to
  107. # sacrifice one char.
  108.  
  109. TMPFILE="$(mktemp)" || exit 1
  110.  
  111. create_temporary_cnf
  112.  
  113. # create the certiface.
  114.  
  115. export RANDFILE=/dev/random
  116.  
  117. if [ "$1" != "generate-default-snakeoil" ]; then
  118.     openssl req -config $TMPFILE -new -x509 -nodes -out $output -keyout $output > /dev/null 2>&1
  119.     chmod 600 $output
  120.     # hash symlink
  121.     cd $(dirname $output)
  122.     ln -sf $(basename $output) $(openssl x509 -hash -noout -in $output)
  123. else
  124.     openssl req -config $TMPFILE -new -x509 -nodes \
  125.     -out /etc/ssl/certs/ssl-cert-snakeoil.pem \
  126.         -keyout /etc/ssl/private/ssl-cert-snakeoil.key > /dev/null 2>&1
  127.     chmod 644 /etc/ssl/certs/ssl-cert-snakeoil.pem
  128.     chmod 640 /etc/ssl/private/ssl-cert-snakeoil.key
  129.     chown root:ssl-cert /etc/ssl/private/ssl-cert-snakeoil.key
  130.     # hash symlink
  131.     cd /etc/ssl/certs/
  132.     ln -sf ssl-cert-snakeoil.pem $(openssl x509 -hash -noout -in ssl-cert-snakeoil.pem)
  133. fi
  134.  
  135. # cleanup
  136. rm -f $TMPFILE
  137.