diff --git a/.gitignore b/.gitignore index 1ce60fa1d119752d3ed00908a8dd346922f01629..d16ccdfe0618962c923825abaa5436fc5ad3dbe0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,8 @@ bin/smartdata/Config.php tmp/* bin/smartdata/importers/ bin/workflow/tutorial/ -cassandra -certmanager +/cassandra +/certmanager log /.* bin/workflow @@ -14,4 +14,4 @@ new/ prometheus/ wavs/ zips/ - +/dev-certificates diff --git a/Dockerfile b/Dockerfile index 95748f3f83d620ff1dee5f467bd27206e9ad934d..40e390b4f8f518eccf56c612bf228291b30ac9ae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,9 +3,13 @@ FROM php:7.1-apache # Came from https://downloads.datastax.com/cpp-driver/ubuntu/18.04/ COPY ./docker/web/*.deb /debs/ +RUN mkdir /certmanager +RUN mkdir /certmanager/certificates + #Default SSLs ADD docker/web/apache-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf ADD docker/web/ca.crt /etc/apache2/ssl/ +ADD docker/web/ca.key /etc/apache2/ssl/ ADD docker/web/server.crt /etc/apache2/ssl/ ADD docker/web/server.key /etc/apache2/ssl/ ADD docker/command.sh /usr/local/bin/ @@ -43,5 +47,8 @@ ADD bin /var/www/html/bin/ ADD lib /var/www/html/lib/ ADD docker/web/index.html /var/www/html/ +ADD docker/certmanager/config /certmanager/ +ADD docker/certmanager/genclient.sh /certmanager/ + #smartdata/Config.php #RUN mkdir /usr/local/tmp/ && touch /usr/local/tmp/log && chmod 777 /usr/local/tmp/log diff --git a/bin/smartdata/Config.php.template b/bin/smartdata/Config.php.template index af36fb69920389b70c25268d786fa97f3033ab26..62aad978e79ee903e4f0c6f4143fd8b32f839b2c 100644 --- a/bin/smartdata/Config.php.template +++ b/bin/smartdata/Config.php.template @@ -8,8 +8,9 @@ namespace SmartData\Config class Config_Common { + + const MYSQL_SEVERNAME = 'mariadb'; const SMARTDATACONTEXT_API = 'http://smartdata-context-api'; - const MYSQL_SEVERNAME = 'db'; const MYSQL_PORT = 3306; const MYSQL_USERNAME = 'smartdata'; const MYSQL_PASSWORD = 'smartdata'; diff --git a/docker-compose.yml b/docker-compose.yml index 83b223d4429949495c2ae5b91f621f40d0ba68e9..3c3b63a9c4bcd9356bb56a619e1d7ee57d66f378 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,7 @@ services: #- ./crt:/etc/apache2/ssl/server.crt #- ./key:/etc/apache2/ssl/server.key #- ./ca:/etc/apache2/ssl/ca.crt + - certificates:/certmanager/certificates depends_on: - cassandra - mariadb @@ -68,6 +69,8 @@ services: env_file: - docker/variables.env volumes: + certificates: mariadb: cassandra: mongo: + diff --git a/docker/certmanager/config b/docker/certmanager/config new file mode 100644 index 0000000000000000000000000000000000000000..6faac61c139e6725b82136daca9450c612b5b7a2 --- /dev/null +++ b/docker/certmanager/config @@ -0,0 +1,12 @@ +export CERTNAME=/etc/apache2/ssl/ca +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/genclient.sh b/docker/certmanager/genclient.sh new file mode 100755 index 0000000000000000000000000000000000000000..4ea10772865ffb58b7220ede948eefa4022589dd --- /dev/null +++ b/docker/certmanager/genclient.sh @@ -0,0 +1,66 @@ +#!/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 + +if [ ! -f /certmanager/certificates/rootCA.srl ]; then + echo `openssl rand -hex 8` > /certmanager/certificates/rootCA.srl + ln -s /certmanager/certificates/rootCA.srl /certmanager/rootCA.srl +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}.crt -CAkey ${CERTNAME}.key -CAcreateserial -out client-$i.pem -days $CLIENTEXP -sha256" + openssl x509 -req -in client-$i.req -CA ${CERTNAME}.crt -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 + echo "$serial client-$i-$serial.pem client-$i-$serial.key" +done \ No newline at end of file diff --git a/docker/db/02-smartdata_v1.sql b/docker/db/02-smartdata_v1.sql index f4b3f0adea3396e79550a6e55a53d194481973ff..c511df44533d9808ed2a64ab88a363fb6cd1ef85 100644 --- a/docker/db/02-smartdata_v1.sql +++ b/docker/db/02-smartdata_v1.sql @@ -34,6 +34,11 @@ CREATE TABLE `series` ( `workflow` int unsigned NOT NULL DEFAULT '0', `domain` varchar(48) NOT NULL DEFAULT 'public', `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `type` char(3) DEFAULT 'OLD', + `period` bigint(20) DEFAULT 0, + `event` varchar(300) DEFAULT NULL, + `count` int(11) DEFAULT NULL, + `uncertainty` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_series` (`version`,`unit`,`x`,`y`,`z`,`r`,`dev`,`t0`,`t1`,`workflow`,`domain`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; @@ -77,6 +82,10 @@ CREATE TABLE `trackers` ( `domain` varchar(48) NOT NULL DEFAULT 'public', `row_id` bigint unsigned NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `type` char(3) DEFAULT 'OLD', + `period` bigint(20) DEFAULT 0, + `event` varchar(300) DEFAULT NULL, + `uncertainty` int(11) DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_trackers` (`version`,`unit`,`signature`,`t0`,`t1`,`dev`,`workflow`,`domain`,`row_id`) diff --git a/gen-dev-certificate.sh b/gen-dev-certificate.sh new file mode 100755 index 0000000000000000000000000000000000000000..d07b77e03e4f9b2e0232f60747329deab3a93358 --- /dev/null +++ b/gen-dev-certificate.sh @@ -0,0 +1,10 @@ +#!/bin/bash +mkdir dev-certificates +CERT_DATA=`docker compose exec -it web /certmanager/genclient.sh "$@" | tail -n 1` +echo "Received $CERT_DATA" +CERT_ID=`echo $CERT_DATA | cut -f 1 -d \ ` +CERT_FILE=`echo $CERT_DATA | cut -f 2 -d \ ` +CERT_KEY=`echo $CERT_DATA | cut -f 3 -d \ ` +docker compose cp web:/certmanager/certificates/$CERT_FILE ./dev-certificates/ +docker compose cp web:/certmanager/certificates/$CERT_KEY ./dev-certificates/ +echo "Certificate at ./dev-certificates/$CERT_FILE with key ./dev-certificates/$CERT_KEY and id $CERT_ID" \ No newline at end of file