You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

338 lines
6.7 KiB

  1. #!/usr/bin/env sh
  2. # Script to create certificate to Aliyun CDN
  3. #
  4. # This deployment required following variables
  5. # export ALI_CDN_KEY="LTqIA87hOKdjevsf5"
  6. # export ALI_CDN_SECRET="0p5EYueFNq501xnCPzKNbx6K51qPH2"
  7. # export Ali_CDN_DOMAIN="cdn.example.com"
  8. # If you have more than one domain, just
  9. # export Ali_CDN_DOMAIN="cdn1.example.com,cdn2.example.com"
  10. #
  11. # If ALI_CDN_KEY and ALI_CDN_SECRET are not set,
  12. # Ali_key and Ali_Secret will be used. (see dns/dns_ali.sh)
  13. #
  14. # AliYun Authentication must have "AliyunCDNFullAccess" permission,
  15. # May also need to "AliyunYundunCertFullAccess" permissions.
  16. #
  17. # Thanks:
  18. # This script references dns/dns_ali.sh and pull request #2772
  19. ######## Public functions #####################
  20. Ali_CDN_API="https://cdn.aliyuncs.com/"
  21. alicdn_deploy() {
  22. _cdomain="$1"
  23. _ckey="$2"
  24. _ccert="$3"
  25. _cca="$4"
  26. _cfullchain="$5"
  27. _debug _cdomain "$_cdomain"
  28. _debug _ckey "$_ckey"
  29. _debug _ccert "$_ccert"
  30. _debug _cca "$_cca"
  31. _debug _cfullchain "$_cfullchain"
  32. _info "$(__green "===Starting alicdn deploy===")"
  33. _getdeployconf ALI_CDN_KEY
  34. _getdeployconf ALI_CDN_SECRET
  35. _getdeployconf Ali_CDN_DOMAIN
  36. if [ -z "${ALI_CDN_KEY}" ] || [ -z "${ALI_CDN_SECRET}" ]; then
  37. _info "Not set variables ALI_CDN_KEY and ALI_CDN_SECRET"
  38. _info "Will use Ali_Key and Ali_Secret"
  39. ALI_CDN_KEY="$(_readaccountconf_mutable Ali_Key)"
  40. ALI_CDN_SECRET="$(_readaccountconf_mutable Ali_Secret)"
  41. if [ -z "${ALI_CDN_KEY}" ] || [ -z "${ALI_CDN_SECRET}" ]; then
  42. _err "You don't specify aliyun api key and secret yet."
  43. return 1
  44. fi
  45. else
  46. #save ALI_CDN_KEY and ALI_CDN_SECRET.
  47. _savedeployconf ALI_CDN_KEY "$ALI_CDN_KEY"
  48. _savedeployconf ALI_CDN_SECRET "$ALI_CDN_SECRET"
  49. fi
  50. if [ -z "${Ali_CDN_DOMAIN}" ]; then
  51. Ali_CDN_DOMAIN=""
  52. _err "You don't specify Ali_CDN_DOMAIN yet."
  53. return 1
  54. fi
  55. #save Ali_CDN_DOMAIN.
  56. _savedeployconf Ali_CDN_DOMAIN "$Ali_CDN_DOMAIN"
  57. _debug ALI_CDN_KEY "${ALI_CDN_KEY}"
  58. _debug ALI_CDN_SECRET "$ALI_CDN_SECRET"
  59. _debug Ali_CDN_DOMAIN "$Ali_CDN_DOMAIN"
  60. ## upload certificate
  61. _Ali_SSLPub=$(grep -Ev '^$' "$_cfullchain" | _ali_url_encode)
  62. _Ali_SSLPri=$(_ali_url_encode <"$_ckey")
  63. query=''
  64. query=$query'AccessKeyId='${ALI_CDN_KEY}
  65. query=$query'&Action=BatchSetCdnDomainServerCertificate'
  66. query=$query'&CertName='$(_ali_urlencode "$_cdomain")
  67. query=$query'&CertType=upload'
  68. query=$query'&DomainName='$(_ali_urlencode "$Ali_CDN_DOMAIN")
  69. query=$query'&ForceSet=1'
  70. query=$query'&Format=json'
  71. query=$query'&SSLPri='${_Ali_SSLPri}
  72. query=$query'&SSLProtocol=on'
  73. query=$query'&SSLPub='${_Ali_SSLPub}
  74. query=$query'&SignatureMethod=HMAC-SHA1'
  75. query=$query'&SignatureNonce='$(_ali_nonce)
  76. query=$query'&SignatureVersion=1.0'
  77. query=$query'&Timestamp='$(_timestamp)
  78. query=$query'&Version=2018-05-10'
  79. _debug2 signature_source "$(printf "%s" "GET&%2F&$(_ali_urlencode "$query")")"
  80. signature=$(printf "%s" "GET&%2F&$(_ali_urlencode "$query")" | _hmac "sha1" "$(printf "%s" "$ALI_CDN_SECRET&" | _hex_dump | tr -d " ")" | _base64)
  81. signature=$(_ali_urlencode "$signature")
  82. url="$Ali_CDN_API?$query&Signature=$signature"
  83. if ! response="$(_get "$url")"; then
  84. _err "Error <$1>"
  85. return 1
  86. fi
  87. _debug response "$response"
  88. message="$(echo "$response" | _egrep_o "\"Message\":\"[^\"]*\"" | cut -d : -f 2- | tr -d \")"
  89. if [ "$message" ]; then
  90. _err "$message"
  91. return 1
  92. fi
  93. _info "Domain $_cdomain certificate has been deployed successfully"
  94. _info "$(__green "===End alicdn deploy===")"
  95. return 0
  96. }
  97. #################### Private functions below ##################################
  98. _ali_url_encode() {
  99. _hex_str=$(_hex_dump)
  100. _debug3 "_url_encode"
  101. _debug3 "_hex_str" "$_hex_str"
  102. for _hex_code in $_hex_str; do
  103. #upper case
  104. case "${_hex_code}" in
  105. "41")
  106. printf "%s" "A"
  107. ;;
  108. "42")
  109. printf "%s" "B"
  110. ;;
  111. "43")
  112. printf "%s" "C"
  113. ;;
  114. "44")
  115. printf "%s" "D"
  116. ;;
  117. "45")
  118. printf "%s" "E"
  119. ;;
  120. "46")
  121. printf "%s" "F"
  122. ;;
  123. "47")
  124. printf "%s" "G"
  125. ;;
  126. "48")
  127. printf "%s" "H"
  128. ;;
  129. "49")
  130. printf "%s" "I"
  131. ;;
  132. "4a")
  133. printf "%s" "J"
  134. ;;
  135. "4b")
  136. printf "%s" "K"
  137. ;;
  138. "4c")
  139. printf "%s" "L"
  140. ;;
  141. "4d")
  142. printf "%s" "M"
  143. ;;
  144. "4e")
  145. printf "%s" "N"
  146. ;;
  147. "4f")
  148. printf "%s" "O"
  149. ;;
  150. "50")
  151. printf "%s" "P"
  152. ;;
  153. "51")
  154. printf "%s" "Q"
  155. ;;
  156. "52")
  157. printf "%s" "R"
  158. ;;
  159. "53")
  160. printf "%s" "S"
  161. ;;
  162. "54")
  163. printf "%s" "T"
  164. ;;
  165. "55")
  166. printf "%s" "U"
  167. ;;
  168. "56")
  169. printf "%s" "V"
  170. ;;
  171. "57")
  172. printf "%s" "W"
  173. ;;
  174. "58")
  175. printf "%s" "X"
  176. ;;
  177. "59")
  178. printf "%s" "Y"
  179. ;;
  180. "5a")
  181. printf "%s" "Z"
  182. ;;
  183. #lower case
  184. "61")
  185. printf "%s" "a"
  186. ;;
  187. "62")
  188. printf "%s" "b"
  189. ;;
  190. "63")
  191. printf "%s" "c"
  192. ;;
  193. "64")
  194. printf "%s" "d"
  195. ;;
  196. "65")
  197. printf "%s" "e"
  198. ;;
  199. "66")
  200. printf "%s" "f"
  201. ;;
  202. "67")
  203. printf "%s" "g"
  204. ;;
  205. "68")
  206. printf "%s" "h"
  207. ;;
  208. "69")
  209. printf "%s" "i"
  210. ;;
  211. "6a")
  212. printf "%s" "j"
  213. ;;
  214. "6b")
  215. printf "%s" "k"
  216. ;;
  217. "6c")
  218. printf "%s" "l"
  219. ;;
  220. "6d")
  221. printf "%s" "m"
  222. ;;
  223. "6e")
  224. printf "%s" "n"
  225. ;;
  226. "6f")
  227. printf "%s" "o"
  228. ;;
  229. "70")
  230. printf "%s" "p"
  231. ;;
  232. "71")
  233. printf "%s" "q"
  234. ;;
  235. "72")
  236. printf "%s" "r"
  237. ;;
  238. "73")
  239. printf "%s" "s"
  240. ;;
  241. "74")
  242. printf "%s" "t"
  243. ;;
  244. "75")
  245. printf "%s" "u"
  246. ;;
  247. "76")
  248. printf "%s" "v"
  249. ;;
  250. "77")
  251. printf "%s" "w"
  252. ;;
  253. "78")
  254. printf "%s" "x"
  255. ;;
  256. "79")
  257. printf "%s" "y"
  258. ;;
  259. "7a")
  260. printf "%s" "z"
  261. ;;
  262. #numbers
  263. "30")
  264. printf "%s" "0"
  265. ;;
  266. "31")
  267. printf "%s" "1"
  268. ;;
  269. "32")
  270. printf "%s" "2"
  271. ;;
  272. "33")
  273. printf "%s" "3"
  274. ;;
  275. "34")
  276. printf "%s" "4"
  277. ;;
  278. "35")
  279. printf "%s" "5"
  280. ;;
  281. "36")
  282. printf "%s" "6"
  283. ;;
  284. "37")
  285. printf "%s" "7"
  286. ;;
  287. "38")
  288. printf "%s" "8"
  289. ;;
  290. "39")
  291. printf "%s" "9"
  292. ;;
  293. "2d")
  294. printf "%s" "-"
  295. ;;
  296. "5f")
  297. printf "%s" "_"
  298. ;;
  299. "2e")
  300. printf "%s" "."
  301. ;;
  302. "7e")
  303. printf "%s" "~"
  304. ;;
  305. #other hex
  306. *)
  307. printf '%%%s' "$_hex_code" | tr '[:lower:]' '[:upper:]'
  308. ;;
  309. esac
  310. done
  311. }
  312. _ali_urlencode() {
  313. _str=$(printf "%s" "$1" | _ali_url_encode)
  314. printf "%s" "$_str"
  315. }
  316. _ali_nonce() {
  317. date +"%s%N"
  318. }
  319. _timestamp() {
  320. date -u +"%Y-%m-%dT%H%%3A%M%%3A%SZ"
  321. }