Advertisement
fruffl

SSL from CA certificate chain factory

Nov 14th, 2015
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 16.31 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #
  4. # idea... only.
  5. # I've to create ~2100 ssl certificates from database
  6. #
  7.  
  8.  
  9. export SCRIPT_PATH=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )
  10.  
  11. DEFAULT_DOMAIN='reverse.com'
  12. DEFAULT_IP='123.123.123.123'
  13.  
  14. declare -A DIR_NAME
  15. DIR_NAME[cnf]='etc'
  16. DIR_NAME[db]='db'
  17. DIR_NAME[private]='private'
  18. DIR_NAME[public]='public'
  19. DIR_NAME[intermediateDir]='intermediate'
  20. DIR_NAME[lookup]='lookup'
  21. DIR_NAME[caRoot]='ca'
  22. DIR_NAME[caEmail]='ca-email'
  23. DIR_NAME[caSoftware]='ca-software'
  24. DIR_NAME[caTls]='ca-tls'
  25. DIR_NAME[crtEmail]='crt-email'
  26. DIR_NAME[crtSoftware]='crt-software'
  27. DIR_NAME[crtTls]='crt-tls'
  28. DIR_NAME[email]='email'
  29. DIR_NAME[software]='software'
  30. DIR_NAME[tls]='tls'
  31. declare -r DIR_NAME
  32.  
  33. declare -A FILE_NAME
  34. FILE_NAME[cnf]='%s.%s.cnf'
  35. FILE_NAME[csr]='%s.%s.csr'
  36. FILE_NAME[p12]='%s.%s.p12'
  37. FILE_NAME[crt]='%s.%s.crt'
  38. FILE_NAME[crtPem]='%s.%s.crt.pem'
  39. FILE_NAME[cer]='%s.%s.cer'
  40. FILE_NAME[chainPem]='%s.%s.chain.pem'
  41. FILE_NAME[chainP7c]='%s.%s.chain.p7c'
  42. FILE_NAME[crtDb]='%s.%s.crt.db'
  43. FILE_NAME[crtSrl]='%s.%s.crt.srl'
  44. FILE_NAME[crl]='%s.%s.crl'
  45. FILE_NAME[crlPem]='%s.%s.crl.pem'
  46. FILE_NAME[crlSrl]='%s.%s.crl.srl'
  47. FILE_NAME[key]='%s.%s.key'
  48. FILE_NAME[keyPem]='%s.%s.key.pem'
  49. FILE_NAME[password]='%s.%s.pwd'
  50. declare -r FILE_NAME
  51.  
  52. declare -A DIRECTORIES_CA_ROOT
  53. DIRECTORIES_CA_ROOT[caPath]="${DIR_NAME[caRoot]}"
  54. DIRECTORIES_CA_ROOT[dbPath]="${DIR_NAME[caRoot]}/${DIR_NAME[db]}"
  55. DIRECTORIES_CA_ROOT[cnfPath]="${DIR_NAME[caRoot]}/${DIR_NAME[cnf]}"
  56. DIRECTORIES_CA_ROOT[privatePath]="${DIR_NAME[caRoot]}/${DIR_NAME[private]}"
  57. declare -r DIRECTORIES_CA_ROOT
  58.  
  59. declare -A DIRECTORIES_CA_EMAIL
  60. DIRECTORIES_CA_EMAIL[caPath]="${DIR_NAME[caEmail]}"
  61. DIRECTORIES_CA_EMAIL[dbPath]="${DIR_NAME[caEmail]}/${DIR_NAME[db]}"
  62. DIRECTORIES_CA_EMAIL[cnfPath]="${DIR_NAME[caEmail]}/${DIR_NAME[cnf]}"
  63. DIRECTORIES_CA_EMAIL[privatePath]="${DIR_NAME[caEmail]}/${DIR_NAME[private]}"
  64. declare -r DIRECTORIES_CA_EMAIL
  65.  
  66. declare -A DIRECTORIES_CRT_EMAIL
  67. DIRECTORIES_CRT_EMAIL[crtPath]="${DIR_NAME[crtEmail]}"
  68. DIRECTORIES_CRT_EMAIL[cnfPath]="${DIR_NAME[crtEmail]}/${DIR_NAME[cnf]}"
  69. DIRECTORIES_CRT_EMAIL[privatePath]="${DIR_NAME[crtEmail]}/${DIR_NAME[private]}"
  70. declare -r DIRECTORIES_CRT_EMAIL
  71.  
  72. declare -A DIRECTORIES_CA_SOFTWARE
  73. DIRECTORIES_CA_SOFTWARE[caPath]="${DIR_NAME[caSoftware]}"
  74. DIRECTORIES_CA_SOFTWARE[dbPath]="${DIR_NAME[caSoftware]}/${DIR_NAME[db]}"
  75. DIRECTORIES_CA_SOFTWARE[cnfPath]="${DIR_NAME[caSoftware]}/${DIR_NAME[cnf]}"
  76. DIRECTORIES_CA_SOFTWARE[privatePath]="${DIR_NAME[caSoftware]}/${DIR_NAME[private]}"
  77. declare -r DIRECTORIES_CA_SOFTWARE
  78.  
  79. declare -A DIRECTORIES_CRT_SOFTWARE
  80. DIRECTORIES_CRT_SOFTWARE[crtPath]="${DIR_NAME[crtSoftware]}"
  81. DIRECTORIES_CRT_SOFTWARE[cnfPath]="${DIR_NAME[crtSoftware]}/${DIR_NAME[cnf]}"
  82. DIRECTORIES_CRT_SOFTWARE[privatePath]="${DIR_NAME[crtSoftware]}/${DIR_NAME[private]}"
  83. declare -r DIRECTORIES_CRT_SOFTWARE
  84.  
  85. declare -A DIRECTORIES_CA_TLS
  86. DIRECTORIES_CA_TLS[caPath]="${DIR_NAME[caTls]}"
  87. DIRECTORIES_CA_TLS[dbPath]="${DIR_NAME[caTls]}/${DIR_NAME[db]}"
  88. DIRECTORIES_CA_TLS[cnfPath]="${DIR_NAME[caTls]}/${DIR_NAME[cnf]}"
  89. DIRECTORIES_CA_TLS[privatePath]="${DIR_NAME[caTls]}/${DIR_NAME[private]}"
  90. declare -r DIRECTORIES_CA_TLS
  91.  
  92. declare -A DIRECTORIES_CRT_TLS
  93. DIRECTORIES_CRT_TLS[crtPath]="${DIR_NAME[crtTls]}"
  94. DIRECTORIES_CRT_TLS[cnfPath]="${DIR_NAME[crtTls]}/${DIR_NAME[cnf]}"
  95. DIRECTORIES_CRT_TLS[privatePath]="${DIR_NAME[crtTls]}/${DIR_NAME[private]}"
  96. declare -r DIRECTORIES_CRT_TLS
  97.  
  98. declare -A DIRECTORIES_PUB
  99. DIRECTORIES_PUB[email]="${DIR_NAME[public]}/${DIR_NAME[email]}"
  100. DIRECTORIES_PUB[software]="${DIR_NAME[public]}/${DIR_NAME[software]}"
  101. DIRECTORIES_PUB[tls]="${DIR_NAME[public]}/${DIR_NAME[tls]}"
  102. declare -r DIRECTORIES_PUB
  103.  
  104. check_result()
  105. {
  106.     if [ $1 -ne 0 ]; then
  107.         echo -e "\e[91m        Error\e[39m $2"
  108.         exit $1
  109.     fi
  110.     echo -e "\e[92m        Ok\e[39m"
  111. }
  112.  
  113. warn_result()
  114. {
  115.     if [ $1 -ne 0 ]; then
  116.         echo -e "\e[93m        Warning\e[39m $2"
  117.     fi
  118. }
  119.  
  120. check_prompt()
  121. {
  122.     if [ $1 -ne 0 ]; then
  123.         warn_result "$@"
  124.         read -p 'Would you like to continue [y/n]: ' answer
  125.         if [ "$answer" != 'y' ] && [ "$answer" != 'Y'  ]; then
  126.             echo 'Goodbye'
  127.             exit 1
  128.         fi
  129.     fi
  130. }
  131.  
  132. writeNewCert()
  133. {
  134.     local domain=$1
  135.     local x=$(printf '%-64s' "create certificates for")
  136.     local y=$(printf '%-64s' "$domain")
  137.     local z=$(printf '%-64s' '')
  138.    
  139.     echo -e "\e[90m$z\e[39m"
  140.     echo -e "\e[92m$x\e[39m"
  141.     echo -e "\e[96m$y\e[39m"
  142.     echo -e "\e[90m$z\e[39m"
  143. }
  144.  
  145. writeDelCert()
  146. {
  147.     local domain=$1
  148.     local x=$(printf '%-64s' "delete certificates for")
  149.     local y=$(printf '%-64s' "$domain")
  150.     local z=$(printf '%-64s' '')
  151.    
  152.     echo -e "\e[90m$z\e[39m"
  153.     echo -e "\e[91m$x\e[39m"
  154.     echo -e "\e[96m$y\e[39m"
  155.     echo -e "\e[90m$z\e[39m"
  156. }
  157.  
  158. writeRevCert()
  159. {
  160.     local domain=$1
  161.     local x=$(printf '%-64s' "revoke certificates for")
  162.     local y=$(printf '%-64s' "$domain")
  163.     local z=$(printf '%-64s' '')
  164.    
  165.     echo -e "\e[90m$z\e[39m"
  166.     echo -e "\e[93m$x\e[39m"
  167.     echo -e "\e[96m$y\e[39m"
  168.     echo -e "\e[90m$z\e[39m"
  169. }
  170.  
  171. writeNewType()
  172. {
  173.     local type=$1
  174.     echo -e "\e[97m• \e[92mcreate\e[97m $type\e[39m"
  175. }
  176. writeDelType()
  177. {
  178.     local type=$1
  179.     echo -e "\e[97m• \e[91mdelete\e[97m $type\e[39m"
  180. }
  181.  
  182. writeNewItem()
  183. {
  184.     local item=$1
  185.     echo -e "\e[90m  \e[92m+\e[90m $item\e[39m"
  186. }
  187.  
  188. writeDelItem()
  189. {
  190.     local item=$1
  191.     echo -e "\e[90m  \e[91m-\e[90m $item\e[39m"
  192. }
  193.  
  194. writeDelItem2()
  195. {
  196.     local item=$1
  197.     echo -e "\e[90m    \e[91m-\e[90m $item\e[39m"
  198. }
  199.  
  200. writeNewItem2()
  201. {
  202.     local item=$1
  203.     echo -e "\e[90m    \e[92m+\e[90m $item\e[39m"
  204. }
  205.  
  206. #
  207. # certificate reverse.com domain.com create tls-server ssl
  208. #
  209. certificate()
  210. {
  211.     local reverseDomain=$1
  212.     local domain=$2
  213.     local action=$3
  214.     local configType=$4
  215.     local fileNameInfix=$5
  216.     local subject=$6
  217.    
  218.     ##############################################################
  219.     #
  220.     # bootstrap
  221.     #
  222.     ##############################################################
  223.    
  224.     local fileName="$fileNameInfix;;$domain"
  225.        
  226.     getDomainPath()
  227.     {
  228.         local reverseDomain=$1
  229.         local domain=$2
  230.         local lookup="$reverseDomain/lookup/$domain"
  231.        
  232.         if [ -f $lookup ]; then
  233.             echo $(head -n 1 "$lookup")
  234.         fi
  235.     }
  236.    
  237.     getBaseType()
  238.     {
  239.         local type=$1
  240.         case "$type" in
  241.                 email)
  242.                     echo 'email'
  243.                     ;;
  244.                 tls-server|tls-server-external|tls-client|tls-client-external)
  245.                     echo 'tls'
  246.                     ;;
  247.                 code-signing)
  248.                     echo 'software'
  249.                     ;;
  250.                 *)
  251.                     check_result 1 "invalid request type $type; {email|tls-client|tls-client-external|tls-server|tls-server-external|code-signing}"
  252.         esac
  253.     }
  254.    
  255.     declare -A FILES
  256.     declare -A DIRS
  257.     getFiles()
  258.     {
  259.         local domain=$1
  260.         local domainPath=$2
  261.         local baseType=$3
  262.         local configType=$4
  263.         local fileName=$5
  264.        
  265.         local caType
  266.         local crtType
  267.        
  268.         DIRS[ca]=$domainPath
  269.         DIRS[pub]=$domainPath/${DIR_NAME[public]}
  270.        
  271.         case "$baseType" in
  272.                 email)
  273.                     local caType=${DIR_NAME[caEmail]}
  274.                     local crtType=${DIR_NAME[crtEmail]}
  275.                    
  276.                     DIRS[caDb]=$domainPath/${DIRECTORIES_CA_EMAIL[dbPath]}
  277.                     DIRS[caCnf]=$domainPath/${DIRECTORIES_CA_EMAIL[cnfPath]}
  278.                     DIRS[caPrivate]=$domainPath/${DIRECTORIES_CA_EMAIL[privatePath]}
  279.                    
  280.                     DIRS[crt]=$domainPath/${DIRECTORIES_CRT_EMAIL[crtPath]}
  281.                     DIRS[crtCnf]=$domainPath/${DIRECTORIES_CRT_EMAIL[cnfPath]}
  282.                     DIRS[crtPrivate]=$domainPath/${DIRECTORIES_CRT_EMAIL[privatePath]}
  283.                    
  284.                     DIRS[pubCrt]=$domainPath/${DIRECTORIES_PUB[email]}
  285.                     ;;
  286.                 tls)
  287.                     local caType=${DIR_NAME[caTls]}
  288.                     local crtType=${DIR_NAME[crtTls]}
  289.                    
  290.                     DIRS[caDb]=$domainPath/${DIRECTORIES_CA_TLS[dbPath]}
  291.                     DIRS[caCnf]=$domainPath/${DIRECTORIES_CA_TLS[cnfPath]}
  292.                     DIRS[caPrivate]=$domainPath/${DIRECTORIES_CA_TLS[privatePath]}
  293.                    
  294.                     DIRS[crt]=$domainPath/${DIRECTORIES_CRT_TLS[crtPath]}
  295.                     DIRS[crtCnf]=$domainPath/${DIRECTORIES_CRT_TLS[cnfPath]}
  296.                     DIRS[crtPrivate]=$domainPath/${DIRECTORIES_CRT_TLS[privatePath]}
  297.                    
  298.                     DIRS[pubCrt]=$domainPath/${DIRECTORIES_PUB[tls]}
  299.                     ;;
  300.                 software)
  301.                     local caType=${DIR_NAME[caSoftware]}
  302.                     local crtType=${DIR_NAME[crtSoftware]}
  303.                    
  304.                     DIRS[caDb]=$domainPath/${DIRECTORIES_CA_SOFTWARE[dbPath]}
  305.                     DIRS[caCnf]=$domainPath/${DIRECTORIES_CA_SOFTWARE[cnfPath]}
  306.                     DIRS[caPrivate]=$domainPath/${DIRECTORIES_CA_SOFTWARE[privatePath]}
  307.                    
  308.                     DIRS[crt]=$domainPath/${DIRECTORIES_CRT_SOFTWARE[crtPath]}
  309.                     DIRS[crtCnf]=$domainPath/${DIRECTORIES_CRT_SOFTWARE[cnfPath]}
  310.                     DIRS[crtPrivate]=$domainPath/${DIRECTORIES_CRT_SOFTWARE[privatePath]}
  311.                    
  312.                     DIRS[pubCrt]=$domainPath/${DIRECTORIES_PUB[software]}
  313.                     ;;
  314.                 *)
  315.                     check_result 1 "invalid request baseType $baseType; {email|tls|software}"
  316.         esac
  317.        
  318.         FILES[caChainPem]=${DIRS[ca]}/$(printf ${FILE_NAME[chainPem]} $domain $caType)
  319.         FILES[caCrl]=${DIRS[caDb]}/$(printf ${FILE_NAME[crl]} $domain $caType)
  320.         FILES[caCnf]=${DIRS[caCnf]}/$(printf ${FILE_NAME[cnf]} $domain $caType)
  321.         FILES[caPwd]=${DIRS[caPrivate]}/$(printf ${FILE_NAME[password]} $domain $caType)
  322.        
  323.         FILES[crt]=${DIRS[crt]}/$(printf ${FILE_NAME[crt]} $fileName $configType)
  324.         FILES[crtCsr]=${DIRS[crt]}/$(printf ${FILE_NAME[csr]} $fileName $configType)
  325.         FILES[crtP12]=${DIRS[crt]}/$(printf ${FILE_NAME[p12]} $fileName $configType)
  326.         FILES[crtChainPem]=${DIRS[crt]}/$(printf ${FILE_NAME[chainPem]} $fileName $configType)
  327.         FILES[crtCnf]=${DIRS[crtCnf]}/$(printf ${FILE_NAME[cnf]} $domain $configType)
  328.         FILES[crtKey]=${DIRS[crtPrivate]}/$(printf ${FILE_NAME[key]} $fileName $configType)
  329.        
  330.         FILES[pubCaCrl]=${DIRS[pub]}/$(printf ${FILE_NAME[crl]} $domain $caType)
  331.        
  332.         FILES[pubCer]=${DIRS[pubCrt]}/$(printf ${FILE_NAME[cer]} $fileName $configType)
  333.         FILES[pubChainP7c]=${DIRS[pubCrt]}/$(printf ${FILE_NAME[chainP7c]} $fileName $configType)
  334.         FILES[pubKeyPem]=${DIRS[pubCrt]}/$(printf ${FILE_NAME[keyPem]} $fileName $configType)
  335.         FILES[pubCrtPem]=${DIRS[pubCrt]}/$(printf ${FILE_NAME[crtPem]} $fileName $configType)
  336.     }
  337.    
  338.     local domainPath=$(getDomainPath $reverseDomain $domain)
  339.     local baseType=$(getBaseType $configType)
  340.     getFiles $domain $domainPath $baseType $configType $fileName
  341.    
  342.     local lvl=$(grep -o '/intermediate/' <<< "$domainPath" | wc -l)
  343.     case "$lvl" in
  344.         0)
  345.             export CA_0_SCRIPT_PATH="$domainPath"
  346.             ;;
  347.         1)
  348.             export CA_1_SCRIPT_PATH="$domainPath"
  349.             ;;
  350.         2)
  351.             export CA_2_SCRIPT_PATH="$domainPath"
  352.             ;;
  353.     esac
  354.    
  355.    
  356.     ##############################################################
  357.     #
  358.     # actions
  359.     #
  360.     ##############################################################
  361.    
  362.     case "$action" in
  363.         create)
  364.             writeNewCert "$4: $5"
  365.             if [ -e ${FILES[crt]} ]; then
  366.                 writeDelType "old $4: $5"
  367.                 certificate "$1" "$2" revoke "$4" "$5"
  368.             fi
  369.            
  370.             case "$configType" in
  371.                 tls-server)
  372.                     writeNewType "$4: $5"
  373.                     writeNewItem 'csr + key'
  374.                     export SAN="DNS:$domain,DNS:*.$domain"
  375.                     openssl req -new \
  376.                         -config ${FILES[crtCnf]} \
  377.                         -out ${FILES[crtCsr]} \
  378.                         -keyout ${FILES[crtKey]} \
  379.                         -subj "/C=BE/ST=Antwerp/O=### Network $domain/CN=$domain"
  380.                     check_result $? 'unable to create csr + key'
  381.                    
  382.                     openssl ca \
  383.                         -batch \
  384.                         -config ${FILES[caCnf]} \
  385.                         -in ${FILES[crtCsr]} \
  386.                         -out ${FILES[crt]} \
  387.                         -passin file:${FILES[caPwd]} \
  388.                         -extensions server_ext \
  389.                             > /dev/null 2>&1
  390.                     check_result $? 'unable to create crt'
  391.                    
  392.                     writeNewItem 'dump'
  393.                     head -3 ${FILES[crtKey]}
  394.                     head -3 ${FILES[crtCsr]}
  395.                     head -3 ${FILES[crt]}
  396.                    
  397.                     writeNewItem "verify"
  398.                     openssl verify -CAfile ${FILES[caChainPem]} ${FILES[crt]}
  399.                    
  400.                     writeNewItem 'p12'
  401.                     openssl pkcs12 -export \
  402.                         -name "$domain: $fileNameInfix (TLS Network Component)" \
  403.                         -inkey ${FILES[crtKey]} \
  404.                         -passout pass:\
  405.                         -in ${FILES[crt]} \
  406.                         -certfile ${FILES[caChainPem]} \
  407.                         -out ${FILES[crtP12]} \
  408.                             > /dev/null 2>&1
  409.                     check_result $? 'unable to create p12'
  410.                    
  411.                     writeNewItem 'pem key from p12'
  412.                     openssl pkcs12 -nocerts -nodes \
  413.                         -in ${FILES[crtP12]} \
  414.                         -passin pass:\
  415.                         -out ${FILES[pubKeyPem]} \
  416.                             > /dev/null 2>&1
  417.                     check_result $? 'unable to create pem key'
  418.                    
  419.                     writeNewItem 'passfree pem key'
  420.                     openssl rsa \
  421.                         -in ${FILES[pubKeyPem]} \
  422.                         -out ${FILES[pubKeyPem]} \
  423.                             > /dev/null 2>&1
  424.                     check_result $? 'unable to create passfree pem key'
  425.                    
  426.                     writeNewItem 'pem crt from p12'
  427.                     openssl pkcs12 -clcerts -nokeys \
  428.                         -in ${FILES[crtP12]} \
  429.                         -passin pass:\
  430.                         -out ${FILES[pubCrtPem]} \
  431.                             > /dev/null 2>&1
  432.                     check_result $? 'unable to create p12'
  433.                    
  434.                     ;;
  435.                 esac
  436.            
  437.             ;;
  438.         delete)
  439.             writeDelCert "$4: $5"
  440.             if [ -e ${FILES[crt]} ]; then
  441.                 certificate "$1" "$2" revoke "$4" "$5"
  442.             fi
  443.             writeDelType 'files'
  444.             writeDelItem ${FILES[crt]}
  445.             rm ${FILES[crt]} > /dev/null 2>&1
  446.            
  447.             writeDelItem ${FILES[crtCsr]}
  448.             rm ${FILES[crtCsr]} > /dev/null 2>&1
  449.            
  450.             writeDelItem ${FILES[crtP12]}
  451.             rm ${FILES[crtP12]} > /dev/null 2>&1
  452.            
  453.             writeDelItem ${FILES[crtKey]}
  454.             rm ${FILES[crtKey]} > /dev/null 2>&1
  455.            
  456.             writeDelItem ${FILES[pubCrtPem]}
  457.             rm ${FILES[pubCrtPem]} > /dev/null 2>&1
  458.            
  459.             writeDelItem ${FILES[pubKeyPem]}
  460.             rm ${FILES[pubKeyPem]} > /dev/null 2>&1
  461.             ;;
  462.         revoke)
  463.             writeRevCert "$4: $5"
  464.             if [ -e ${FILES[crt]} ]; then
  465.                 local lastSrl=$(openssl x509 -in ${FILES[crt]} -serial -noout)
  466.                 local lastFnr=$(openssl x509 -in ${FILES[crt]} -fingerprint -noout)
  467.                 local revokationReason
  468.                
  469.                 case "$configType" in
  470.                         email)
  471.                             revokationReason=affiliationChanged
  472.                             ;;
  473.                         tls-server|tls-server-external|tls-client|tls-client-external)
  474.                             revokationReason=affiliationChanged
  475.                             ;;
  476.                         code-signing)
  477.                             revokationReason=affiliationChanged
  478.                             ;;
  479.                 esac
  480.                
  481.                 check_prompt 1 "certificate $fileName.$configType.crt exists as \n\t$lastSrl\n\t$lastFnr\n"
  482.                
  483.                 echo "Please set the revokation reason, default CRL reason for type $configType is $revokationReason."
  484.                 echo '[1] unspecified'
  485.                 echo '[2] keyCompromise'
  486.                 echo '[3] CACompromise'
  487.                 echo '[4] affiliationChanged'
  488.                 echo '[5] superseded'
  489.                 echo '[6] cessationOfOperation'
  490.                 echo '[7] certificateHold'
  491.                 echo '[8] removeFromCRL'
  492.                 echo '[n] set no reason'
  493.                 read -p 'Please set the revokation reason [1-8]: ' answer
  494.                
  495.                 case "$answer" in
  496.                         1)
  497.                             revokationReason=unspecified
  498.                             ;;
  499.                         2)
  500.                             revokationReason=keyCompromise
  501.                             ;;
  502.                         3)
  503.                             revokationReason=CACompromise
  504.                             ;;
  505.                         4)
  506.                             revokationReason=affiliationChanged
  507.                             ;;
  508.                         5)
  509.                             revokationReason=superseded
  510.                             ;;
  511.                         6)
  512.                             revokationReason=cessationOfOperation
  513.                             ;;
  514.                         7)
  515.                             revokationReason=certificateHold
  516.                             ;;
  517.                         8)
  518.                             revokationReason=removeFromCRL
  519.                             ;;
  520.                         'n'|'N')
  521.                             revokationReason=no
  522.                             ;;
  523.                         *)
  524.                             warn_result 1 "Nothing selected. Continue with default and set $revokationReason"
  525.                 esac
  526.                
  527.                 if [ $revokationReason == 'no' ]; then
  528.                     openssl ca \
  529.                         -config ${FILES[caCnf]} \
  530.                         -revoke ${FILES[crt]} \
  531.                         -passin file:${FILES[caPwd]} \
  532.                              > /dev/null 2>&1
  533.                 else
  534.                     openssl ca \
  535.                         -config ${FILES[caCnf]} \
  536.                         -revoke ${FILES[crt]} \
  537.                         -passin file:${FILES[caPwd]} \
  538.                         -crl_reason $revokationReason \
  539.                              > /dev/null 2>&1
  540.                 fi
  541.                
  542.                 openssl ca -gencrl \
  543.                     -config ${FILES[caCnf]} \
  544.                     -out ${FILES[caCrl]} \
  545.                     -passin file:${FILES[caPwd]} \
  546.                         > /dev/null 2>&1
  547.                    
  548.                 openssl crl \
  549.                     -in ${FILES[caCrl]} \
  550.                     -out ${FILES[pubCaCrl]} \
  551.                     -outform der \
  552.                         > /dev/null 2>&1
  553.             fi
  554.             ;;
  555.     esac
  556. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement