util.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #!/bin/bash
  2. function generate_JKS_chain() {
  3. dir=${SCRATCH_DIR:-_output}
  4. ADD_OID=$1
  5. NODE_NAME=$2
  6. CERT_NAMES=${3:-$NODE_NAME}
  7. ks_pass=${KS_PASS:-kspass}
  8. ts_pass=${TS_PASS:-tspass}
  9. rm -rf $NODE_NAME
  10. extension_names=""
  11. for name in ${CERT_NAMES//,/ }; do
  12. extension_names="${extension_names},dns:${name}"
  13. done
  14. if [ "$ADD_OID" = true ]; then
  15. extension_names="${extension_names},oid:1.2.3.4.5.5"
  16. fi
  17. echo Generating keystore and certificate for node $NODE_NAME
  18. "$keytool" -genkey \
  19. -alias $NODE_NAME \
  20. -keystore $dir/keystore.jks \
  21. -keypass $ks_pass \
  22. -storepass $ks_pass \
  23. -keyalg RSA \
  24. -keysize 2048 \
  25. -validity 712 \
  26. -dname "CN=$NODE_NAME, OU=OpenShift, O=Logging" \
  27. -ext san=dns:localhost,ip:127.0.0.1"${extension_names}"
  28. echo Generating certificate signing request for node $NODE_NAME
  29. "$keytool" -certreq \
  30. -alias $NODE_NAME \
  31. -keystore $dir/keystore.jks \
  32. -storepass $ks_pass \
  33. -file $dir/$NODE_NAME.csr \
  34. -keyalg rsa \
  35. -dname "CN=$NODE_NAME, OU=OpenShift, O=Logging" \
  36. -ext san=dns:localhost,ip:127.0.0.1"${extension_names}"
  37. echo Sign certificate request with CA
  38. openssl ca \
  39. -in $dir/$NODE_NAME.csr \
  40. -notext \
  41. -out $dir/$NODE_NAME.crt \
  42. -config $dir/signing.conf \
  43. -extensions v3_req \
  44. -batch \
  45. -extensions server_ext
  46. echo "Import back to keystore (including CA chain)"
  47. "$keytool" \
  48. -import \
  49. -file $dir/ca.crt \
  50. -keystore $dir/keystore.jks \
  51. -storepass $ks_pass \
  52. -noprompt -alias sig-ca
  53. "$keytool" \
  54. -import \
  55. -file $dir/$NODE_NAME.crt \
  56. -keystore $dir/keystore.jks \
  57. -storepass $ks_pass \
  58. -noprompt \
  59. -alias $NODE_NAME
  60. echo "Import CA to truststore for validating client certs"
  61. "$keytool" \
  62. -import \
  63. -file $dir/ca.crt \
  64. -keystore $dir/truststore.jks \
  65. -storepass $ts_pass \
  66. -noprompt -alias sig-ca
  67. echo All done for $NODE_NAME
  68. }
  69. function generate_PEM_cert() {
  70. NODE_NAME="$1"
  71. dir=${SCRATCH_DIR:-_output} # for writing files to bundle into secrets
  72. echo Generating keystore and certificate for node ${NODE_NAME}
  73. openssl req -out "$dir/$NODE_NAME.csr" -new -newkey rsa:2048 -keyout "$dir/$NODE_NAME.key" -subj "/CN=$NODE_NAME/OU=OpenShift/O=Logging" -days 712 -nodes
  74. echo Sign certificate request with CA
  75. openssl ca \
  76. -in "$dir/$NODE_NAME.csr" \
  77. -notext \
  78. -out "$dir/$NODE_NAME.crt" \
  79. -config $dir/signing.conf \
  80. -extensions v3_req \
  81. -batch \
  82. -extensions server_ext
  83. }
  84. function generate_JKS_client_cert() {
  85. NODE_NAME="$1"
  86. ks_pass=${KS_PASS:-kspass}
  87. ts_pass=${TS_PASS:-tspass}
  88. dir=${SCRATCH_DIR:-_output} # for writing files to bundle into secrets
  89. echo Generating keystore and certificate for node ${NODE_NAME}
  90. "$keytool" -genkey \
  91. -alias $NODE_NAME \
  92. -keystore $dir/$NODE_NAME.jks \
  93. -keyalg RSA \
  94. -keysize 2048 \
  95. -validity 712 \
  96. -keypass $ks_pass \
  97. -storepass $ks_pass \
  98. -dname "CN=$NODE_NAME, OU=OpenShift, O=Logging"
  99. echo Generating certificate signing request for node $NODE_NAME
  100. "$keytool" -certreq \
  101. -alias $NODE_NAME \
  102. -keystore $dir/$NODE_NAME.jks \
  103. -file $dir/$NODE_NAME.csr \
  104. -keyalg rsa \
  105. -keypass $ks_pass \
  106. -storepass $ks_pass \
  107. -dname "CN=$NODE_NAME, OU=OpenShift, O=Logging"
  108. echo Sign certificate request with CA
  109. openssl ca \
  110. -in "$dir/$NODE_NAME.csr" \
  111. -notext \
  112. -out "$dir/$NODE_NAME.crt" \
  113. -config $dir/signing.conf \
  114. -extensions v3_req \
  115. -batch \
  116. -extensions server_ext
  117. echo "Import back to keystore (including CA chain)"
  118. "$keytool" \
  119. -import \
  120. -file $dir/ca.crt \
  121. -keystore $dir/$NODE_NAME.jks \
  122. -storepass $ks_pass \
  123. -noprompt -alias sig-ca
  124. "$keytool" \
  125. -import \
  126. -file $dir/$NODE_NAME.crt \
  127. -keystore $dir/$NODE_NAME.jks \
  128. -storepass $ks_pass \
  129. -noprompt \
  130. -alias $NODE_NAME
  131. echo All done for $NODE_NAME
  132. }
  133. function join { local IFS="$1"; shift; echo "$*"; }
  134. function get_es_dcs() {
  135. oc get dc --selector logging-infra=elasticsearch -o name
  136. }
  137. function get_curator_dcs() {
  138. oc get dc --selector logging-infra=curator -o name
  139. }
  140. function extract_nodeselector() {
  141. local inputstring="${1//\"/}" # remove any errant double quotes in the inputs
  142. local selectors=()
  143. for keyvalstr in ${inputstring//\,/ }; do
  144. keyval=( ${keyvalstr//=/ } )
  145. if [[ -n "${keyval[0]}" && -n "${keyval[1]}" ]]; then
  146. selectors+=( "\"${keyval[0]}\": \"${keyval[1]}\"")
  147. else
  148. echo "Could not make a node selector label from '${keyval[*]}'"
  149. exit 255
  150. fi
  151. done
  152. if [[ "${#selectors[*]}" -gt 0 ]]; then
  153. echo nodeSelector: "{" $(join , "${selectors[@]}") "}"
  154. fi
  155. }