Advertisement
Guest User

Simple private CA

a guest
Nov 30th, 2014
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 9.46 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # license : WTFPL
  4. ################################################################################
  5. #DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE                                   #
  6. #                   Version 2, December 2004                                   #
  7. #                                                                              #
  8. #Copyright (C) 2014 Fenrir <don't want spam>                                   #
  9. #                                                                              #
  10. #Everyone is permitted to copy and distribute verbatim or modified             #
  11. #copies of this license document, and changing it is allowed as long           #
  12. #as the name is changed.                                                       #
  13. #                                                                              #
  14. #           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE                        #
  15. #  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION             #
  16. #                                                                              #
  17. # 0. You just DO WHAT THE FUCK YOU WANT TO.                                    #
  18. ################################################################################
  19.  
  20. # Directory where you want to install the stuff
  21. baseDir="/volume1/CA"
  22.  
  23. # External domain name (from Internet)
  24. extDomain='publicdomain.name'
  25. # Internal domain name (from lan)
  26. intDomain='privatedomaine.name'
  27.  
  28. # Server name
  29. srvName=`hostname -s`
  30. # External IP (from Internet)
  31. extIP='0.0.0.0'
  32. # Internal IP (from lan)
  33. intIP=`hostname -i`
  34.  
  35. # Public server name
  36. dns1=$srvName.$extDomain
  37. # Private server name
  38. dns2=$srvName.$intDomain
  39. # Short server name
  40. dns3=$srvName
  41. # Public IP Address
  42. ip1=$extIP
  43. # Public IP Address
  44. ip2=$intIP
  45.  
  46. # Country Name (2 letter code)
  47. countryName_default='FR'
  48. # State or Province Name (full name)
  49. stateOrProvinceName_default='IDF'
  50. # Locality Name (eg, city)
  51. localityName_default='My City'
  52. # Organization Name (eg, company)
  53. organizationName_default='My Home'
  54. # Organizational Unit Name (eg, section)
  55. organizationalUnitName_default='IT'
  56. # Email Address
  57. emailAddress_default='my@email.address'
  58.  
  59. ###################################################################
  60. cd $baseDir
  61. mkdir $baseDir/ca
  62. mkdir $baseDir/ca/newcerts
  63. mkdir $baseDir/crt
  64. mkdir $baseDir/csr
  65. mkdir $baseDir/key
  66. mkdir $baseDir/rev
  67.  
  68. cat <<EOT > $baseDir/openssl.cnf
  69. dir                             = $baseDir
  70. HOME                            = $baseDir
  71. RANDFILE                        = $baseDir/ca/.rnd
  72.  
  73. [ ca ]
  74. default_ca                      = CA_default
  75.  
  76. [ CA_default ]
  77. certs                           = $baseDir/ca/certs
  78. new_certs_dir                   = $baseDir/ca/newcerts
  79. database                        = $baseDir/ca/index.txt
  80. certificate                     = $baseDir/ca/ca.crt
  81. serial                          = $baseDir/ca/serial
  82. private_key                     = $baseDir/ca/ca.key
  83. default_days                    = 3650
  84. default_md                      = sha256
  85. preserve                        = no
  86. policy                          = policy_match
  87.  
  88. [ policy_match ]
  89. countryName                     = optional
  90. stateOrProvinceName             = optional
  91. organizationName                = optional
  92. organizationalUnitName          = optional
  93. commonName                      = supplied
  94. emailAddress                    = optional
  95.  
  96. [ req ]
  97. default_md                      = sha256
  98. default_bits                    = 2048
  99. default_keyfile                 = privkey.pem
  100. distinguished_name              = req_distinguished_name
  101. attributes                      = req_attributes
  102. req_extensions                  = v3_req
  103. string_mask = nombstr
  104.  
  105. [ req_distinguished_name ]
  106. countryName                     = Country Name (2 letter code)
  107. countryName_default             = ###countryName_default###
  108. countryName_min                 = 2
  109. countryName_max                 = 2
  110. stateOrProvinceName             = State or Province Name (full name)
  111. stateOrProvinceName_default     = ###stateOrProvinceName_default###
  112. localityName                    = Locality Name (eg, city)
  113. localityName_default            = ###localityName_default###
  114. 0.organizationName              = Organization Name (eg, company)
  115. 0.organizationName_default      = ###organizationName_default###
  116. organizationalUnitName          = Organizational Unit Name (eg, section)
  117. organizationalUnitName_default  = ###organizationalUnitName_default###
  118. commonName                      = Common Name (eg, YOUR name)
  119. commonName_max                  = 64
  120. emailAddress                    = Email Address
  121. emailAddress_default            = ###emailAddress_default###
  122. emailAddress_max                = 64
  123.  
  124. [ req_attributes ]
  125. challengePassword               = A challenge password
  126. challengePassword_min           = 4
  127. challengePassword_max           = 20
  128. unstructuredName                = An optional company name
  129.  
  130. [ usr_cert ]
  131. basicConstraints                = CA:FALSE
  132. nsComment                       = "OpenSSL Private Certificat"
  133. subjectKeyIdentifier            = hash
  134. authorityKeyIdentifier          = keyid,issuer
  135. #nsCaRevocationUrl              = http://...
  136. #nsRevocationUrl                = http://...
  137.  
  138. [ v3_req ]
  139. basicConstraints                = CA:FALSE
  140. keyUsage                        = nonRepudiation, digitalSignature, keyEncipherment
  141. subjectAltName                  = @alt_names
  142.  
  143. [CA]
  144. nsComment                       = "OpenSSL Private Certificat"
  145. subjectKeyIdentifier            = hash
  146. authorityKeyIdentifier          = keyid,issuer:always
  147. basicConstraints                = critical,CA:TRUE,pathlen:0
  148. keyUsage                        = keyCertSign, cRLSign
  149. default_md                      = sha256
  150.  
  151. [SERVER]
  152. nsComment                       = "OpenSSL Private Certificat"
  153. subjectKeyIdentifier            = hash
  154. authorityKeyIdentifier          = keyid,issuer:always
  155. issuerAltName                   = issuer:copy
  156. basicConstraints                = critical,CA:FALSE
  157. keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
  158. nsCertType                      = server
  159. extendedKeyUsage                = serverAuth
  160. #crlDistributionPoints          = URI:http://...
  161. subjectAltName                  = @alt_names
  162.  
  163. [alt_names]
  164. DNS.1                           = ###dns1###
  165. DNS.2                           = ###dns2###
  166. DNS.3                           = ###dns3###
  167. IP.1                            = ###ip1###
  168. IP.2                            = ###ip2###
  169.  
  170. [ v3_ca ]
  171. subjectKeyIdentifier            = hash
  172. authorityKeyIdentifier          = keyid:always,issuer:always
  173. basicConstraints                = CA:true
  174.  
  175. [ crl_ext ]
  176. authorityKeyIdentifier          = keyid:always,issuer:always
  177.  
  178. [ proxy_cert_ext ]
  179. basicConstraints                = CA:FALSE
  180. nsComment                       = "OpenSSL Private Certificat"
  181. subjectKeyIdentifier            = hash
  182. authorityKeyIdentifier          = keyid,issuer:always
  183. proxyCertInfo                   = critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
  184. EOT
  185.  
  186. sed -i "s/###countryName_default###/${countryName_default}/g" $baseDir/openssl.cnf
  187. sed -i "s/###stateOrProvinceName_default###/${stateOrProvinceName_default}/g" $baseDir/openssl.cnf
  188. sed -i "s/###localityName_default###/${localityName_default}/g" $baseDir/openssl.cnf
  189. sed -i "s/###organizationName_default###/${organizationName_default}/g" $baseDir/openssl.cnf
  190. sed -i "s/###organizationalUnitName_default###/${organizationalUnitName_default}/g" $baseDir/openssl.cnf
  191. sed -i "s/###emailAddress_default###/${emailAddress_default}/g" $baseDir/openssl.cnf
  192. sed -i "s/###dns1###/${dns1}/g" $baseDir/openssl.cnf
  193. sed -i "s/###dns2###/${dns2}/g" $baseDir/openssl.cnf
  194. sed -i "s/###dns3###/${dns3}/g" $baseDir/openssl.cnf
  195. sed -i "s/###ip1###/${ip1}/g" $baseDir/openssl.cnf
  196. sed -i "s/###ip2###/${ip2}/g" $baseDir/openssl.cnf
  197.  
  198. touch $baseDir/ca/index.txt
  199. echo 0001 > $baseDir/ca/serial
  200.  
  201. openssl_bin=`which openssl`
  202.  
  203. # Create Certificate Authority
  204. echo "################################################################################"
  205. echo "#                                                                              #"
  206. echo "#                        Create Certificate Authority                          #"
  207. echo "#                                                                              #"
  208. echo "################################################################################"
  209. $openssl_bin req -new -x509 -config ./openssl.cnf -sha256 -newkey rsa:2048 -nodes -days 3650 -keyout ca/ca.key -out ca/ca.crt
  210.  
  211. # Create certificat request
  212. echo "################################################################################"
  213. echo "#                                                                              #"
  214. echo "#          Create certificat request : take care about Common name             #"
  215. echo "#                                                                              #"
  216. echo "################################################################################"
  217. $openssl_bin req -new -config ./openssl.cnf -newkey rsa:2048 -nodes -sha256 -keyout key/$srvName.key -out csr/$srvName.csr
  218.  
  219. # Signing the certificate
  220. echo "################################################################################"
  221. echo "#                                                                              #"
  222. echo "#                           Signing the certificate                            #"
  223. echo "#                                                                              #"
  224. echo "################################################################################"
  225. $openssl_bin ca -config ./openssl.cnf -extensions SERVER -in csr/$srvName.csr -notext -out crt/$srvName.crt
  226.  
  227. echo "################################################################################"
  228. echo "#                                                                              #"
  229. echo "#                             !!! PRIVATE !!! key                              #"
  230. echo "#                                                                              #"
  231. echo "################################################################################"
  232. cat key/$srvName.key
  233.  
  234. echo "################################################################################"
  235. echo "#                                                                              #"
  236. echo "#                                 Certificate                                  #"
  237. echo "#                                                                              #"
  238. echo "################################################################################"
  239. cat crt/$srvName.crt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement