From 22e55d0b4fb2d51d09bb845622f12c74e2968e63 Mon Sep 17 00:00:00 2001
From: Rodrigo Goncalves <rodrigo.g@ufsc.br>
Date: Mon, 5 Aug 2024 13:37:24 +0000
Subject: [PATCH 1/7] Dockerfile config to include the necessary files for
 certificate management

---
 Dockerfile | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Dockerfile b/Dockerfile
index 95748f3..e3b575d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -45,3 +45,10 @@ ADD docker/web/index.html 	/var/www/html/
 
 #smartdata/Config.php
 #RUN mkdir /usr/local/tmp/ && touch /usr/local/tmp/log && chmod 777 /usr/local/tmp/log
+
+# Certificate management
+RUN mkdir /certmanager
+ADD docker/certmanager/config /certmanager/
+ADD docker/certmanager/genclient.sh /certmanager/
+ADD docker/certmanager/create-ca.sh /certmanager/
+
-- 
GitLab


From 3fdba10aa2f64f0644c50912eaa9c1e57ab3cf34 Mon Sep 17 00:00:00 2001
From: Rodrigo Goncalves <rodrigo.g@ufsc.br>
Date: Mon, 5 Aug 2024 13:38:00 +0000
Subject: [PATCH 2/7] Config in docker-compose to map certificates directories
 to local folder, for persistence

---
 docker-compose.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docker-compose.yml b/docker-compose.yml
index 8351ac6..4a33759 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -12,6 +12,7 @@ services:
           #TODO Fix this in the code
           - ./tmp:/var/www/html/tmp
           - ./tmp:/smartdata/tmp
+          - ./docker/certmanager/certificates:/certmanager/certificates
           #TODO Custom certificates
           #- ./crt:/etc/apache2/ssl/server.crt
           #- ./key:/etc/apache2/ssl/server.key
-- 
GitLab


From 1cf51c538e7e5a857ce5077633b78c244ed120b5 Mon Sep 17 00:00:00 2001
From: Rodrigo Goncalves <rodrigo.g@ufsc.br>
Date: Mon, 5 Aug 2024 13:41:02 +0000
Subject: [PATCH 3/7] Correcting .gitignore

---
 .gitignore | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index da9bbec..1ce60fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,7 @@ bin/workflow/tutorial/
 cassandra
 certmanager
 log
-.*
+/.*
 bin/workflow
 new/
 prometheus/
-- 
GitLab


From c8cec2320c629c0c2c8fe0b2b8dbfb34dad455fd Mon Sep 17 00:00:00 2001
From: Rodrigo Goncalves <rodrigo.g@ufsc.br>
Date: Mon, 5 Aug 2024 13:42:36 +0000
Subject: [PATCH 4/7] Scripts and config for client certificate management

---
 docker/certmanager/.gitignore   |  1 +
 docker/certmanager/config       | 12 +++++++
 docker/certmanager/create-ca.sh |  7 ++++
 docker/certmanager/genclient.sh | 59 +++++++++++++++++++++++++++++++++
 4 files changed, 79 insertions(+)
 create mode 100644 docker/certmanager/.gitignore
 create mode 100644 docker/certmanager/config
 create mode 100755 docker/certmanager/create-ca.sh
 create mode 100755 docker/certmanager/genclient.sh

diff --git a/docker/certmanager/.gitignore b/docker/certmanager/.gitignore
new file mode 100644
index 0000000..195e616
--- /dev/null
+++ b/docker/certmanager/.gitignore
@@ -0,0 +1 @@
+/certificates/
\ No newline at end of file
diff --git a/docker/certmanager/config b/docker/certmanager/config
new file mode 100644
index 0000000..d265935
--- /dev/null
+++ b/docker/certmanager/config
@@ -0,0 +1,12 @@
+export CERTNAME=rootCA
+export KEYSIZE=2048
+export CLIENTEXP=1491
+export ROOTEXP=2992
+
+export NUMCLIENTS=1
+
+export STATE="SC"
+export CITY="Florianopolis"
+export ORG="UFSC"
+export UNIT="Lisha"
+export HOST="localhost"
diff --git a/docker/certmanager/create-ca.sh b/docker/certmanager/create-ca.sh
new file mode 100755
index 0000000..91fe315
--- /dev/null
+++ b/docker/certmanager/create-ca.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+cd /certmanager
+
+. config
+openssl genpkey -algorithm RSA -out certificates/rootCA.key -pkeyopt rsa_keygen_bits:2048
+openssl req -x509 -new -nodes -key certificates/rootCA.key -sha256 -days 3650 -out certificates/rootCA.pem -subj "/C=BR/ST=$STATE/L=$CITY/O=$ORG/OU=$UNIT/CN=$HOST" -set_serial "0x$(openssl rand -hex 8)"
\ No newline at end of file
diff --git a/docker/certmanager/genclient.sh b/docker/certmanager/genclient.sh
new file mode 100755
index 0000000..6c5dccb
--- /dev/null
+++ b/docker/certmanager/genclient.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+# Caciano Machado/Juliano Zatta - 16/10/2017
+
+cd /certmanager
+
+. config
+
+cd certificates
+
+# Initilize if not available the certificate list
+NUMPREVCERT=`tail -n 1 certificate_list | cut -d " " -f 1`
+ISNUM='^[0-9]+$'
+
+# Update - 30-10-2020 - Roberto M. Scheffel - Added receiver and purpose description, for documentation
+
+receiver=$1
+descr=$2
+if [ -z "$receiver" ]
+then
+   echo 'Usage: ' $0 '<receiver name>' '<purpose short description>.'
+   exit
+fi
+if [ -z "$descr" ]
+then
+   echo 'Usage: ' $0 '<receiver name>' '<purpose short description>.'
+   exit
+fi
+
+if [[ -a certificate_list ]]; then
+    if ! [[ $NUMPREVCERT =~ $ISNUM ]]; then
+        echo "ERROR: File certificate_list corrupted. This file stores the list of generated certificates and respective serial numbers."
+        exit -1
+    fi
+    CURRCLIENT=$((NUMPREVCERT + 1))
+    LASTCLIENT=$((NUMCLIENTS + NUMPREVCERT))
+else
+    CURRCLIENT=1
+    LASTCLIENT=$NUMCLIENTS
+fi
+
+for i in `seq $CURRCLIENT $LASTCLIENT`; do    
+    # Generate RSA key
+
+    echo "openssl genrsa -out client-$i.key $KEYSIZE"
+    openssl genrsa -out client-$i.key $KEYSIZE
+
+    # Generate certificate request
+    echo "openssl req -subj \"/C=BR/ST=$STATE/L=$CITY/O=$ORG/OU=$UNIT/CN=$HOST\" -new -key client-$i.key -out client-$i.req"
+    openssl req -subj "/C=BR/ST=$STATE/L=$CITY/O=$ORG/OU=$UNIT/CN=$HOST" -new -key client-$i.key -out client-$i.req
+    # Generate certificate
+    echo "openssl x509 -req -in client-$i.req -CA ${CERTNAME}.pem -CAkey ${CERTNAME}.key -CAcreateserial -out client-$i.pem -days $CLIENTEXP -sha256"
+    openssl x509 -req -in client-$i.req -CA ${CERTNAME}.pem -CAkey ${CERTNAME}.key -CAcreateserial -out client-$i.pem -days $CLIENTEXP -sha256
+    serial=`openssl x509 -in client-$i.pem -serial -noout | cut -d "=" -f 2`
+    echo $i $serial
+    echo $i $serial `date "+%F-%T"` `whoami` ' | ' $receiver ' | ' $descr >> certificate_list
+    mv client-$i.key client-$i-$serial.key
+    mv client-$i.pem client-$i-$serial.pem
+    rm -f client-$i.req
+done
\ No newline at end of file
-- 
GitLab


From c2b3d382a8b42a37dbd6cef94d9ef4bc429839f6 Mon Sep 17 00:00:00 2001
From: Rodrigo Goncalves <rodrigo.g@ufsc.br>
Date: Mon, 5 Aug 2024 13:45:02 +0000
Subject: [PATCH 5/7] Included usage documentation

---
 README.md | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/README.md b/README.md
index 8346e75..d0ad945 100644
--- a/README.md
+++ b/README.md
@@ -4,3 +4,15 @@ cp bin/smartdata/Config.php.template bin/smartdata/Config.php
 
 ```
 * Edit `bin/smartdata/Config.php` to customize your environment.
+
+# Initial setup
+Execute the following command to create the CA certificate  in the environment:
+```
+docker compose exec -it web /certmanager/create-ca.sh
+```
+
+# Create client certificates
+Execute the following command to create client certificates:
+```
+docker compose exec -it web /certmanager/genclient.sh clientId clientDescription
+```
-- 
GitLab


From 3c2980eebc90cfec91b902c968a6158ea1766916 Mon Sep 17 00:00:00 2001
From: Rodrigo Goncalves <rodrigo.g@ufsc.br>
Date: Mon, 5 Aug 2024 14:21:26 +0000
Subject: [PATCH 6/7] Fix for correct certificate serial size creation

---
 docker/certmanager/create-ca.sh | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/docker/certmanager/create-ca.sh b/docker/certmanager/create-ca.sh
index 91fe315..929a585 100755
--- a/docker/certmanager/create-ca.sh
+++ b/docker/certmanager/create-ca.sh
@@ -1,7 +1,18 @@
 #!/bin/bash
+# Caciano Machado/Juliano Zatta - 16/10/2017
 
 cd /certmanager
 
 . config
-openssl genpkey -algorithm RSA -out certificates/rootCA.key -pkeyopt rsa_keygen_bits:2048
-openssl req -x509 -new -nodes -key certificates/rootCA.key -sha256 -days 3650 -out certificates/rootCA.pem -subj "/C=BR/ST=$STATE/L=$CITY/O=$ORG/OU=$UNIT/CN=$HOST" -set_serial "0x$(openssl rand -hex 8)"
\ No newline at end of file
+
+cd certificates
+
+if [ -a ${CERTNAME}.pem ]; then
+    echo "WARNING: Certificate with name $CERTNAME already exists."
+    echo "WARNING: If you really want to delete it then do it manually."
+else
+    ROOTCA_SERIAL=`openssl rand -hex 8`
+    openssl genrsa -out ${CERTNAME}.key $KEYSIZE
+    openssl req  -subj "/C=BR/ST=$STATE/L=$CITY/O=$ORG/OU=$UNIT/CN=Root\ Certificate" -x509 -new -nodes -key ${CERTNAME}.key -sha256 -days $ROOTEXP -out ${CERTNAME}.pem -set_serial "0x$ROOTCA_SERIAL"
+    echo $ROOTCA_SERIAL > rootCA.srl
+fi
\ No newline at end of file
-- 
GitLab


From 56299dfa3ce0b4ce01d56eac9c3564e16c883479 Mon Sep 17 00:00:00 2001
From: Rodrigo Goncalves <rodrigo.g@ufsc.br>
Date: Mon, 5 Aug 2024 14:25:11 +0000
Subject: [PATCH 7/7] Fix root .gitignore to allow certmanager

---
 .gitignore | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 1ce60fa..6244ba5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,7 @@ tmp/*
 bin/smartdata/importers/
 bin/workflow/tutorial/
 cassandra
-certmanager
+/certmanager
 log
 /.*
 bin/workflow
-- 
GitLab