Skip to content

Commit f1aa497

Browse files
authored
Add TLS Support for database connectivity (#334)
1 parent c407187 commit f1aa497

File tree

4 files changed

+66
-0
lines changed

4 files changed

+66
-0
lines changed

core/files/entrypoint.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ export MYSQL_USER=${MYSQL_USER:-misp}
1313
export MYSQL_PASSWORD=${MYSQL_PASSWORD:-example}
1414
export MYSQL_DATABASE=${MYSQL_DATABASE:-misp}
1515
export MYSQL_CMD="mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -P $MYSQL_PORT -h $MYSQL_HOST -r -N $MYSQL_DATABASE"
16+
export MYSQL_TLS=${MYSQL_TLS:-false}
17+
export MYSQL_TLS_CA=${MYSQL_TLS_CA}
18+
export MYSQL_TLS_CERT=${MYSQL_TLS_CERT}
19+
export MYSQL_TLS_KEY=${MYSQL_TLS_KEY}
1620
export REDIS_HOST=${REDIS_HOST:-redis}
1721
export REDIS_PORT=${REDIS_PORT:-6379}
1822
export ENABLE_REDIS_EMPTY_PASSWORD=${ENABLE_REDIS_EMPTY_PASSWORD:-false}

core/files/entrypoint_nginx.sh

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,50 @@ term_proc() {
88

99
trap term_proc SIGTERM
1010

11+
update_database_tls_config() {
12+
local key="$1"
13+
local value="$2"
14+
local config_file="$3"
15+
local enable="$4"
16+
17+
[[ -z "$key" || -z "$config_file" ]] && { echo "key/config_file required"; return 1; }
18+
[[ ! -f "$config_file" ]] && { echo "Config file not found: $config_file"; return 1; }
19+
20+
if [[ "$enable" == true && -z "$value" ]]; then
21+
#echo "Not setting $key as value is empty..."
22+
return 0
23+
fi
24+
25+
if [[ "$enable" == true && "$key" =~ ^(ssl_ca|ssl_cert|ssl_key)$ ]]; then
26+
if [[ ! -f "$value" ]]; then
27+
echo "Cannot configure TLS key $key: file $value does not exist..."
28+
return 1
29+
fi
30+
fi
31+
32+
local tmp
33+
tmp="$(mktemp)"
34+
35+
if [[ "$enable" == true ]]; then
36+
if grep -qE "^[[:space:]]*'${key}'[[:space:]]*=>" "$config_file"; then
37+
sed -E "s@^([[:space:]]*'${key}'[[:space:]]*=>)[^,]*,@\1 '${value}',@g" \
38+
"$config_file" > "$tmp"
39+
else
40+
sed -E "/public[[:space:]]+\\\$default[[:space:]]*=[[:space:]]*\\[/a\\
41+
'${key}' => '${value}'," \
42+
"$config_file" > "$tmp"
43+
fi
44+
else
45+
sed -E "/^[[:space:]]*'${key}'[[:space:]]*=>/d" \
46+
"$config_file" > "$tmp"
47+
fi
48+
49+
if [[ -s "$tmp" ]]; then
50+
cat "$tmp" > "$config_file"
51+
fi
52+
rm -f "$tmp"
53+
}
54+
1155
init_mysql(){
1256
# Test when MySQL is ready....
1357
# wait for Database come ready
@@ -121,6 +165,13 @@ EOT
121165
sed "s/db\s*password/$MYSQL_PASSWORD/" $MISP_APP_CONFIG_PATH/database.php > tmp; cat tmp > $MISP_APP_CONFIG_PATH/database.php; rm tmp
122166
sed "s/'database' => 'misp'/'database' => '$MYSQL_DATABASE'/" $MISP_APP_CONFIG_PATH/database.php > tmp; cat tmp > $MISP_APP_CONFIG_PATH/database.php; rm tmp
123167

168+
# Enable MySQL TLS immediately, as TLS requiring hosts like AWS RDS may banlist non-TLS connecting hosts
169+
# Conversely, this is also a good spot to disable it if required
170+
171+
update_database_tls_config ssl_ca "$MYSQL_TLS_CA" "$MISP_APP_CONFIG_PATH/database.php" "$MYSQL_TLS"
172+
update_database_tls_config ssl_cert "$MYSQL_TLS_CERT" "$MISP_APP_CONFIG_PATH/database.php" "$MYSQL_TLS"
173+
update_database_tls_config ssl_key "$MYSQL_TLS_KEY" "$MISP_APP_CONFIG_PATH/database.php" "$MYSQL_TLS"
174+
124175
echo "... initialize email.php settings"
125176
chmod +w $MISP_APP_CONFIG_PATH/email.php
126177
tee $MISP_APP_CONFIG_PATH/email.php > /dev/null <<EOT

docker-compose.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,11 @@ services:
255255
- "MYSQL_USER=${MYSQL_USER:-misp}"
256256
- "MYSQL_PASSWORD=${MYSQL_PASSWORD:-example}"
257257
- "MYSQL_DATABASE=${MYSQL_DATABASE:-misp}"
258+
# mysql TLS settings
259+
- "MYSQL_TLS=${MYSQL_TLS:-false}"
260+
- "MYSQL_TLS_CA=${MYSQL_TLS_CA}"
261+
- "MYSQL_TLS_CERT=${MYSQL_TLS_CERT}"
262+
- "MYSQL_TLS_KEY=${MYSQL_TLS_KEY}"
258263
# redis settings
259264
- "REDIS_HOST=${REDIS_HOST:-redis}"
260265
- "REDIS_PORT=${REDIS_PORT:-6379}"

template.env

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ SYNCSERVERS_1_PULL_RULES=
121121
# MYSQL_ROOT_PASSWORD=
122122
# MYSQL_DATABASE=
123123

124+
# optional and used to set mysql db TLS configuration
125+
# MYSQL_TLS=true
126+
# MYSQL_TLS_CA=/custom/files/tls/misp_ca.pem
127+
# MYSQL_TLS_CERT=/custom/files/tls/misp_cert.cert
128+
# MYSQL_TLS_KEY=/custom/files/tls/misp_key.key
129+
124130
# optional and used to set redis
125131
# REDIS_HOST=
126132
# REDIS_PORT=

0 commit comments

Comments
 (0)