Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.61 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. USER=`id -u -n`
  4. GROUP=`id -g -n`
  5.  
  6. GENERATE_ROOT_CA_FILE="YES"
  7. GENERATE_CA_DER_FILE="YES"
  8. GENERATE_IM_CA_FILE="YES"
  9. GENERATE_IM_DER_FILE="NO"
  10. GENERATE_DH_FILE="NO"
  11.  
  12. USE_SUDO="NO"
  13.  
  14. CA_PRIVATE_KEY="/etc/ssl/private/rootCA.pem"
  15. CA_PUBLIC_CERT="/etc/ssl/certs/rootCA.crt"
  16. CA_PUBLIC_DER="/etc/ssl/certs/rootCA.der"
  17. IM_CA_PRIVATE_KEY="/etc/ssl/private/squidCA.pem"
  18. IM_CA_CSR="/tmp/squidCA.csr"
  19. IM_CA_PUBLIC_CERT="/etc/ssl/certs/squidCA.crt"
  20. IM_CA_PUBLIC_DER="/etc/ssl/certs/rootCA.der"
  21. DH_FILE="/etc/ssl/private/squidDHParam.pem"
  22.  
  23. CA_COUNTRY="HK"
  24. CA_STATE=""
  25. CA_LOCALITY="Hong Kong"
  26. CA_ORGANISATION="Parent Router Ltd"
  27. CA_COMMON_NAME="PARENTROUTER Root CA"
  28. CA_VALID_DAYS=365
  29. CA_ENCRYPTION_TYPE="rsa:4096"
  30.  
  31. IM_CA_COUNTRY="HK"
  32. IM_CA_STATE=""
  33. IM_CA_LOCALITY="Hong Kong"
  34. IM_CA_ORGANISATION="Parent Router Ltd"
  35. IM_CA_COMMON_NAME="myrouter.parentrouter"
  36. IM_CA_VALID_DAYS="365"
  37. IM_CA_ENCRYPTION_STRENGTH="4096"
  38.  
  39. IM_CA_SERIAL="01"
  40.  
  41. DH_STRENGTH="2048"
  42.  
  43. SSL_KEY_DIR=`dirname "$CA_PRIVATE_KEY"`
  44. SSL_PUB_DIR=`dirname "$CA_PUBLIC_CERT"`
  45.  
  46. SUDO="sudo"
  47. OPENSSL="openssl"
  48.  
  49. confirm () {
  50. # call with a prompt string or use a default
  51. read -r -p "${1:-Are you sure? [y/N]} " response
  52. case $response in
  53. [yY][eE][sS]|[yY])
  54. true
  55. ;;
  56. *)
  57. false
  58. ;;
  59. esac
  60. }
  61.  
  62. if [ "$USE_SUDO" != "YES" ]; then
  63. SUDO=""
  64. fi
  65.  
  66. if [ "$USER" != "root" ]; then
  67. echo "We need root access to write to $SSL_KEY_DIR directory"
  68. if [ "$USE_SUDO" == "YES" ]; then
  69. exec $SUDO -p "Password:" -- "$0" "$@"
  70. fi
  71. fi
  72.  
  73. if [ ! -d "$SSL_KEY_DIR" ]; then
  74. $SUDO mkdir -p "$SSL_KEY_DIR"
  75. fi
  76.  
  77. if [ ! -d "$SSL_PUB_DIR" ]; then
  78. $SUDO mkdir -p "$SSL_PUB_DIR"
  79. fi
  80.  
  81. ##### ROOT CA GENERATION ########
  82. if [ "$GENERATE_ROOT_CA_FILE" == "YES" ]; then
  83. if [ -f "$CA_PRIVATE_KEY" ] && confirm "Root Key Pair Already Exists! Regenerate? y/n:"; then
  84. # Generate Private / Public Key Pair
  85. echo "Generating Root SSL Key Pair..."
  86. $SUDO $OPENSSL \
  87. req \
  88. -new \
  89. -nodes \
  90. -newkey "$CA_ENCRYPTION_TYPE" \
  91. -sha256 \
  92. -days $CA_VALID_DAYS \
  93. -x509 \
  94. -keyout "$CA_PRIVATE_KEY" \
  95. -out "$CA_PUBLIC_CERT" \
  96. -subj "/C=${CA_COUNTRY}/ST=${CA_STATE}/L=${CA_LOCALITY}/O=${CA_ORGANISATION}/CN=${CA_COMMON_NAME}" \
  97. 2> /dev/null
  98.  
  99. if [ $? != 0 ]; then
  100. echo "ERROR: Failed to Generate Root SSL Key Pair!"
  101. exit $?
  102. else
  103. echo -e "\tSuccessfully Generated Root SSL Key Pair"
  104. fi
  105.  
  106. if [ "$GENERATE_CA_DER_FILE" == "YES" ] && [ -f "$CA_PUBLIC_CERT" ]; then
  107. echo "Generating CA SSL DER File..."
  108. # Output a DER file for import
  109. $SUDO $OPENSSL \
  110. x509 \
  111. -outform der \
  112. -in "$CA_PUBLIC_CERT" \
  113. -out "$CA_PUBLIC_DER" \
  114. 2> /dev/null
  115.  
  116. if [ $? != 0 ]; then
  117. echo "ERROR: Failed to Generate SSL DER file!"
  118. exit $?
  119. else
  120. echo -e "\tSuccessfully Generated SSL DER File!"
  121. fi
  122. fi
  123. fi
  124. fi
  125. ##### END ROOT CA GENERATION ########
  126.  
  127. ##### INTERMEDIATE CA GENERATION ########
  128. if [ ! -f "$CA_PRIVATE_KEY" ]; then
  129. echo "WARNING: Could not find root CA file. Will not generate generate intermediate ca keypair as we cannot sign it"
  130. fi
  131.  
  132. if [ "$GENERATE_IM_CA_FILE" == "YES" ] && [ -f "$CA_PRIVATE_KEY" ]; then
  133. if [ -f "$IM_CA_PRIVATE_KEY" ] && confirm "Intermediate Key Pair Already Exists! Regenerate? y/n:"; then
  134. rm "$IM_CA_PUBLIC_CERT"
  135.  
  136. # Generate Private / Public Key Pair
  137. echo "Generating Intermediate CA SSL Key Pair..."
  138. # Generate the Intermediate Key
  139. $SUDO $OPENSSL \
  140. genrsa \
  141. -out "$IM_CA_PRIVATE_KEY" \
  142. $IM_CA_ENCRYPTION_STRENGTH \
  143. 2> /dev/null
  144.  
  145. if [ $? != 0 ]; then
  146. echo "ERROR: Failed to Generate Intermediate CA SSL Key Pair!"
  147. exit $?
  148. else
  149. echo -e "\tSuccessfully Generated Intermediate CA SSL Key Pair"
  150. fi
  151. fi
  152.  
  153. if [ -f "$IM_CA_PUBLIC_CERT" ] && confirm "Intermediate Key Already Signed! Re-sign? y/n:"; then
  154. rm "$IM_CA_PUBLIC_CERT"
  155.  
  156. echo "Signing Intermediate CA SSL File..."
  157. # Generate a CSR for the Intermediate Key
  158. $SUDO $OPENSSL \
  159. req \
  160. -new \
  161. -sha256 \
  162. -key "$IM_CA_PRIVATE_KEY" \
  163. -out "$IM_CA_CSR" \
  164. -subj "/C=${IM_CA_COUNTRY}/ST=${IM_CA_STATE}/L=${IM_CA_LOCALITY}/O=${IM_CA_ORGANISATION}/CN=${IM_CA_COMMON_NAME}" \
  165. 2> /dev/null
  166.  
  167. if [ $? != 0 ]; then
  168. echo "ERROR: Failed to Sign Intermediate CA SSL Key!"
  169. exit $?
  170. else
  171. echo -e "\tSuccessfully Signed Intermediate CA SSL Key"
  172. fi
  173.  
  174. # Sign the Intermediate Cert
  175. $SUDO $OPENSSL \
  176. x509 \
  177. -req \
  178. -days $IM_CA_VALID_DAYS \
  179. -in "$IM_CA_CSR" \
  180. -CA "$CA_PUBLIC_CERT" \
  181. -CAkey "$CA_PRIVATE_KEY" \
  182. -set_serial "$IM_CA_SERIAL" \
  183. -out "$IM_CA_PUBLIC_CERT" \
  184. 2> /dev/null
  185.  
  186. if [ $? != 0 ]; then
  187. echo "ERROR: Failed to Sign Intermediate CA CSR!"
  188. exit $?
  189. else
  190. echo -e "\tSuccessfully Signed Intermediate CA CSR"
  191. fi
  192.  
  193. if [ -f "$IM_CA_CSR" ]; then
  194. # Remove the CSR
  195. $SUDO rm "$IM_CA_CSR"
  196. fi
  197. fi
  198.  
  199. if [ "$GENERATE_IM_DER_FILE" == "YES" ] && [ -f "$IM_CA_PUBLIC_CERT" ]; then
  200. echo "Generating Intermediate CA SSL DER File..."
  201. # Output a DER file for import
  202. $SUDO $OPENSSL \
  203. x509 \
  204. -outform der \
  205. -in "$IM_CA_PUBLIC_CERT" \
  206. -out "$IM_CA_PUBLIC_DER" \
  207. 2> /dev/null
  208.  
  209. if [ $? != 0 ]; then
  210. echo "ERROR: Failed to Generate Intermediate CA SSL DER file!"
  211. exit $?
  212. else
  213. echo -e "\tSuccessfully Generated Intermediate CA SSL DER File!"
  214. fi
  215. fi
  216. fi
  217.  
  218. if [ "$GENERATE_DH_FILE" == "YES" ]; then
  219. echo "Generating DH File... (this may take some time)"
  220. # Generate the DH file for encryption
  221. $SUDO $OPENSSL \
  222. dhparam \
  223. -outform PEM \
  224. -out "$DH_FILE" \
  225. $DH_STRENGTH \
  226. 2> /dev/null
  227.  
  228. if [ $? != 0 ]; then
  229. echo "ERROR: Failed to Generate DHParam file!"
  230. exit $?
  231. else
  232. echo -e "\tSuccessfully Generated DHParam file!"
  233. fi
  234. fi
  235. ##### END INTERMEDIATE CA GENERATION ########
  236.  
  237. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement