Skip to content

Commit fdb03b1

Browse files
committed
Generate SSL certificates for DB during testing
gencerts.sh - https://gitlab.com/damp-stack/mysql-ssl-docker/
1 parent 58c453a commit fdb03b1

File tree

4 files changed

+136
-0
lines changed

4 files changed

+136
-0
lines changed

.github/workflows/ssl-db.yml

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: database-connection-via-ssl
2+
3+
on:
4+
push:
5+
branches: master
6+
pull_request:
7+
8+
jobs:
9+
mariadb:
10+
runs-on: ubuntu-latest
11+
strategy:
12+
matrix:
13+
python-version: [3.8]
14+
15+
steps:
16+
- uses: actions/checkout@v3
17+
- name: Set up Python ${{ matrix.python-version }}
18+
uses: actions/setup-python@v4
19+
with:
20+
python-version: ${{ matrix.python-version }}
21+
22+
- name: Generate DB certificates
23+
run: |
24+
# docker run -v $(pwd)/tests/db-certs/:/Kiwi/db-certs/:Z --rm -i kiwitcms/kiwi \
25+
# /usr/bin/sscg \
26+
# -v -f \
27+
# --country BG --locality Sofia \
28+
# --organization "Kiwi TCMS" \
29+
# --organizational-unit "DevOps" \
30+
# --ca-file /Kiwi/db-certs/ca.crt \
31+
# --ca-key-file /Kiwi/db-certs/ca.key \
32+
# --cert-file /Kiwi/db-certs/server.crt \
33+
# --cert-key-file /Kiwi/db-certs/server.key
34+
# re-enable & add client cert when https://github.com/sgallagher/sscg/issues/3 is fixed
35+
pushd ./tests/ && ./gen-db-certs.sh && popd
36+
37+
- name: Create database
38+
run: |
39+
docker-compose -f docker-compose.mariadb-ssl pull db
40+
docker-compose -f docker-compose.mariadb-ssl run -d -p 3306:3306 --name kiwi_db db
41+
sleep 20 # wait to initialize
42+
43+
set -e
44+
docker exec -i kiwi_db mariadb -u root -pkiwi-1s-aw3s0m3 \
45+
--ssl-ca=/etc/certs/ca.pem \
46+
--ssl-cert=/etc/certs/client-cert.pem \
47+
--ssl-key=/etc/certs/client-key.pem -e 'status' | grep "Cipher in use is"
48+
49+
- name: Initialize DB tables & records
50+
run: |
51+
sudo apt-get update
52+
sudo apt-get install gettext
53+
54+
sudo mkdir /Kiwi
55+
sudo chmod a+w /Kiwi
56+
57+
pip install -r requirements/devel.txt
58+
pip install -r requirements/mariadb.txt
59+
pushd tcms/ && npm install && popd
60+
61+
export LANG=bg-bg
62+
set -e
63+
coverage run --source='.' ./manage.py migrate -v2 --noinput --settings tcms.settings.test.mariadb
64+
65+
- name: Send coverage to codecov.io
66+
run: |
67+
coverage report -m
68+
bash <(curl -s https://codecov.io/bash)

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ docs/target/
1616
.vscode/
1717
.cache/
1818
tcms/node_modules/
19+
tests/db-certs/*.pem
1920
package-lock.json

docker-compose.mariadb-ssl

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
version: '2'
2+
3+
services:
4+
db:
5+
container_name: kiwi_db
6+
image: mariadb:latest
7+
command: [ "--character-set-server=utf8mb4",
8+
"--collation-server=utf8mb4_unicode_ci",
9+
"--require-secure-transport",
10+
"--ssl-ca=/etc/certs/ca.pem",
11+
"--ssl-cert=/etc/certs/server-cert.pem",
12+
"--ssl-key=/etc/certs/server-key.pem" ]
13+
volumes:
14+
- db_data:/var/lib/mysql
15+
- ./tests/db-certs/:/etc/certs/
16+
restart: always
17+
environment:
18+
MYSQL_ROOT_PASSWORD: kiwi-1s-aw3s0m3
19+
MYSQL_DATABASE: kiwi
20+
MYSQL_USER: kiwi
21+
MYSQL_PASSWORD: kiwi
22+
23+
volumes:
24+
db_data:

tests/gen-db-certs.sh

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/bash
2+
3+
OPENSSL_SUBJ="/C=BG/ST=Sofia/L=Sofia"
4+
OPENSSL_CA="${OPENSSL_SUBJ}/CN=fake-CA"
5+
OPENSSL_SERVER="${OPENSSL_SUBJ}/CN=fake-server"
6+
OPENSSL_CLIENT="${OPENSSL_SUBJ}/CN=fake-client"
7+
8+
mkdir -p db-certs/
9+
pushd db-certs/
10+
11+
# Generate new CA certificate ca.pem file.
12+
openssl genrsa 2048 > ca-key.pem
13+
14+
# TODO This has interaction that must be automated
15+
openssl req -new -x509 -nodes -days 3600 \
16+
-subj "${OPENSSL_CA}" \
17+
-key ca-key.pem -out ca.pem
18+
19+
20+
# Create the server-side certificates
21+
# This has more interaction that must be automated
22+
23+
openssl req -newkey rsa:2048 -days 3600 -nodes \
24+
-subj "${OPENSSL_SERVER}" \
25+
-keyout server-key.pem -out server-req.pem
26+
openssl rsa -in server-key.pem -out server-key.pem
27+
openssl x509 -req -in server-req.pem -days 3600 \
28+
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
29+
30+
# Create the client-side certificates
31+
openssl req -newkey rsa:2048 -days 3600 -nodes \
32+
-subj "${OPENSSL_CLIENT}" \
33+
-keyout client-key.pem -out client-req.pem
34+
openssl rsa -in client-key.pem -out client-key.pem
35+
openssl x509 -req -in client-req.pem -days 3600 \
36+
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
37+
38+
# Verify the certificates are correct
39+
openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
40+
41+
# make the keys readable b/c we're having issues with uid/gid inside the containers
42+
chmod 644 client-key.pem server-key.pem ca-key.pem
43+
popd

0 commit comments

Comments
 (0)