Приложение 4. Работа с сертификатами
В приложении приведен скрипт, иллюстрирующий возможности работы сетевых средств с сертификатами и ключами.
В скрипте демонстрируется выполнение следующих функций:
-
удаление старых файлов и каталогов;
-
создание структуры каталогов УЦ (Удостоверяющего Центра, (Certification authority, CA));
-
создание самоподписного сертификата и ключа корневого УЦ:
-
создание запроса сертификата и ключа без пароля;
-
подписание своего сертификата своим ключом;
-
копирование сертификата с выкидыванием текстовой информации.
где:
RootCACert.pem – корневой сертификат.
./demoCA/private/./cakey.pem – ключ.
-
-
создание промежуточного УЦ:
-
создание запроса сертификата и ключа;
-
подписание сертификата промежуточного УЦ корневым УЦ;
-
копирование с выкидыванием текстовой информации;
-
добавление в сертификат промежуточного УЦ сертификата корневого УЦ;
-
переименование структуры каталогов корневого УЦ в demoCARoot;
-
создание структуры каталогов промежуточного УЦ;
-
копирование сертификата и ключа в нужные каталоги дерева.
где:
cacert.pem – сертификат промежуточного УЦ.
IntermCA.key – ключ промежуточного УЦ.
-
-
создание сертификатов 1 клиента:
-
создание ключа и запроса на сертификат;
-
создание самоподписного сертификата;
-
подписание сертификата УЦ;
-
удаление из сертификата текста.
где:
client1.key – ключ.
client1SS.crt – самоподписной сертификат.
client1.crt – сертификат, подписанный промежуточным УЦ.
-
-
создание сертификатов 2 клиента:
-
аналогично первому, но с цифрой 2.
где:
client2.key – ключ.
client2SS.crt – самоподписной сертификат.
client2.crt – сертификат, подписанный промежуточным УЦ.
-
-
создание сертификатов сервера.
где:
server.key – ключ.
serverSS.crt – самоподписной сертификат.
server.crt – сертификат, подписанный промежуточным УЦ.
-
создание сертификатов 2 сервера.
где:
server1.key – ключ.
server1SS.crt – самоподписной сертификат.
server1.crt – сертификат, подписанный промежуточным УЦ.
-
создание каталогов сетевого клиента и сетевого сервера.
Предполагается что один из каталогов является каталогом валидного клиента или сервера, а второй – нарушителя.
Создание
nodetab
для работы незащищенного соединения, защищенного SSL23 и TLS с именами MYOPEN MYSSL и MYTLS соответственно в каталогах клиентов.где:
dbs_tcp – каталог сервера.
dbs_tcp1 – каталог нарушителя сервера.
dbc_tcp1 – каталог клиента.
dbc_tcp2 – каталог нарушителя.
-
создание каталога БД и собственно БД. Предварительно убиваются существующие ядра СУБД ЛИНТЕР и сетевые драйвера.
-
проверка простого зашифрованного соединения:
-
запуск сетевых драйверов в соответствующих пустых каталогах;
-
проверка удачного соединения по всем 3 протоколам;
-
останов драйверов.
Все соединения успешны, поскольку нет работы с сертификатами и контроля клиента и сервера соответственно.
-
-
проверка отсечения работы по незащищенному каналу:
-
запуск сетевых драйверов dbs_tcp с опцией запрещения работы по незащищенному соединению;
-
попытка соединения по 3 протоколам;
-
останов драйверов.
Соединение по незащищенному каналу неуспешно.
-
-
копирование самоподписных сертификатов и ключей в соответствующие каталоги запуска.
Сертификаты используются для идентификации клиента и сервера. Также сертификаты определяют протокол соединения. Например, ГОСТ-сертификаты предполагают ГОСТ-алгоритм. Чтобы работало везде используется DSA-сертификаты. В каталоге сервера ключи и сертификаты должны иметь имена dbs_tcp.key и dbs_tcp.crt, в каталоге клиента – dbc_tcp.key и dbc_tcp.crt соответственно.
-
запуск dbc и dbs:
-
dbs запускается с дополнительным ключом аутентификации клиента;
-
незащищенное соединение неуспешно;
-
защищенные соединения успешны;
-
повторные защищенные соединения также успешны;
-
при повторном соединении производится сверка сертификатов.
-
-
попытка подмены адреса клиента:
-
перезапуск клиента в другом каталоге. Поскольку ключи и сертификаты заменены – это эквивалентно попытке работы другого клиента с этого же адреса;
-
поскольку сравнение сертификатов прошло неуспешно, все 3 соединения неуспешны:
-
незащищенное – поскольку запрещено;
-
защищенные – из-за разницы в сертификатах.
-
-
-
подмена адреса сервера:
-
останов всех сетевых серверов;
-
запуск dbc в правильном каталоге, а dbs в каталоге с другими сертификатами. Результат, как в предыдущем пункте, поскольку не совпадают сохраненные сертификаты клиентов;
-
останов сетевых драйверов.
-
-
запрет работы без сертификатов:
-
удаление всех сохраненных сертификатов;
-
запуск dbs с соответствующей дополнительной опцией;
-
несмотря на присутствие своих правильных сертификатов, соединения неуспешны из-за отсутствия сертификатов;
-
копирование нужного сертификата в каталог dbs_tcp восстанавливает возможность соединения.
-
-
удаление всех старых сертификатов, как самоподписных, так и сохраненных:
-
копирование сертификатов, подписанных УЦ, в соответствующие каталоги;
-
повторение проверок п.п. 14, 15, 16 для сертификатов УЦ.
-
-
проверка отсутствия соединения с сертификатами, не подписанными УЦ.
Эта проверка включается при наличии сертификата(ов) УЦ в текущем каталоге. Они должны называться dbc_tcp.CA и dbs_tcp.CA соответственно для клиента и сервера. В то же время для соединения используются самоподписные сертификаты. В случае неподписанных сертификатов и активации проверки подписи УЦ SSL соединение проходит успешно, а TLS нет, поскольку сертификат подписан не тем УЦ, которому доверяют клиент и сервер.
Сохранение и сверка сертификатов продолжает работать (для SSL).
-
проверка, соединения с сертификатами, подписанными УЦ.
Восстановление подписанных УЦ сертификатов в соответствующих каталогах. И SSL и TLS соединение успешно.
Сверка сертификатов продолжает работать верно – подмена адреса не проходит.
-
проверка списка отозванных сертификатов (CRL):
-
отзываем сертификат у клиента;
-
формируем список отозванных сертификатов;
-
копируем его в каталог сервера с именем dbs_tcp.CRL;
-
после этого попытка соединения по TLS протоколу неуспешна, потому что сертификат клиента недействителен (присутствует в списке CRL).
-
-
выдача клиенту нового сертификата и ключа, чтобы они были валидными. Замена ключей на валидные.
-
проверка восстановления ключей клиента. Соединения проходят успешно.
-
отзыв сертификата сервера. Список отозванных сертификатов копируется клиенту.
-
после отозвания сертификата сервера установка соединения с ним по TLS протоколу неуспешна. SSL продолжает работать как было.
Скрипт может быть вызван без аргументов для работы с промежуточным УЦ.
Аргумент no_interm используется для работы без промежуточного УЦ.
Аргумент clean используется для очистки результатов работы.
#!/bin/sh KEY_LEN=512 arg=$1 #clean no_interm if [ "$arg" = "-h" -o "$arg" = "--help" -o "$arg" = "?" ]; then echo "usage: keys.sh [clean] [no_interm] clean - remove all test files no_interm - use only one root CA whithout intermediate CA" fi #1 rm -rf ./demoCA rm -rf ./demoCARoot rm -rf ./dbc_tcp1 rm -rf ./dbc_tcp2 rm -rf ./dbs_tcp rm -rf ./dbs_tcp1 rm -rf db rm -f client1* rm -f client2* rm -f server* rm -f RootCACert* rm -f IntermCA* rm -f cacert.pem rm -f CRL.pem rm -f RootCRL.pem if [ "$arg" = "clean" ]; then exit fi #clean #2 mkdir -p ./demoCA mkdir -p ./demoCA/certs mkdir -p ./demoCA/crl mkdir -p ./demoCA/newcerts mkdir -p ./demoCA/private chmod og-rwx ./demoCA/private touch ./demoCA/index.txt #3 #creating self signed sertificate of root CA #creating key and request openssl req -new -keyout ./demoCA/private/./cakey.pem -newkey rsa:$KEY_LEN -nodes \ -days 100 -set_serial 100 -out ./demoCA/./careq.pem \ -subj /C=RU/ST=Voronezh\ region/L=Voronezh/O=Relex\ ltd/OU=System\ develop/CN=RootCA\/emailAddress=RootCA@relex.ru echo "00" > ./demoCA/serial #self sign the sertificate openssl ca -out ./demoCA/./cacert.pem -days 100 -batch -keyfile \ ./demoCA/private/./cakey.pem -selfsign -extensions v3_ca -infiles ./demoCA/./careq.pem #copy the certificate without text info openssl x509 -in ./demoCA/./cacert.pem -out ./RootCACert.pem #4 if [ "$arg" != "no_interm" ]; then #creating intermediate CA #creating request for the sertificate openssl req -keyout IntermCA.key -newkey rsa:$KEY_LEN -nodes -days 100 -set_serial 1000 \ -out IntermCA.req -subj /C=RU/ST=Voronezh\ region/L=Voronezh/O=Relex\ ltd/OU=System\ develop/CN=IntermCA\/emailAddress=IntermCA@relex.ru #sign the request by root CA openssl ca -batch -days 100 -policy policy_anything -extensions v3_ca -out IntermCA.crt -in IntermCA.req openssl x509 -in IntermCA.crt -out ./cacert.pem #add Root certificate to intermediate certificate cat RootCACert.pem > > cacert.pem rm -f IntermCA.req #rename root storage mv ./demoCA ./demoCARoot #create intermediate storage mkdir -p ./demoCA mkdir -p ./demoCA/certs mkdir -p ./demoCA/crl mkdir -p ./demoCA/newcerts mkdir -p ./demoCA/private chmod og-rwx ./demoCA/private touch ./demoCA/index.txt cp cacert.pem ./demoCA/./cacert.pem cp IntermCA.key ./demoCA/private/./cakey.pem else # no_intermediate mv RootCACert.pem cacert.pem fi #no_intermediate echo "10" > ./demoCA/serial #5 #creating client request client 1 openssl req -keyout client1.key -newkey rsa:$KEY_LEN -nodes -days 100 -set_serial 01 \ -out client1.req -subj /C=RU/ST=Voronezh\ region/L=Voronezh/O=Relex\ ltd/OU=System\ develop/CN=Client1\/emailAddress=c1@relex.ru #creating self signed sertificate for the client openssl x509 -req -days 365 -in client1.req -signkey client1.key -out client1SS.crt #sign the request of client 1 openssl ca -batch -days 100 -policy policy_anything -out client1_.crt -in client1.req openssl x509 -in client1_.crt -out client1.crt rm -f client1.req client1_.crt #6 #creating client request client 2 openssl req -keyout client2.key -newkey rsa:$KEY_LEN -nodes -days 100 -set_serial 02 \ -out client2.req -subj /C=RU/ST=Voronezh\ region/L=Voronezh/O=Relex\ ltd/OU=System\ develop/CN=Client2\/emailAddress=c2@relex.ru #creating self signed sertificate for the client openssl x509 -req -days 365 -in client2.req -signkey client2.key -out client2SS.crt #sign the request of client 2 openssl ca -batch -days 100 -policy policy_anything -out client2_.crt -in client2.req openssl x509 -in client2_.crt -out client2.crt rm -f client2_.crt client2.req #7 #creating server request openssl req -keyout server.key -newkey rsa:$KEY_LEN -nodes -days 100 -set_serial 20 \ -out server.req -subj /C=RU/ST=Voronezh\ region/L=Voronezh/O=Relex\ ltd/OU=System\ develop/CN=Server\/emailAddress=s@relex.ru #creating self signed sertificate for the server openssl x509 -req -days 365 -in server.req -signkey server.key -out serverSS.crt #sign the server request openssl ca -batch -days 100 -policy policy_anything -out server_.crt -in server.req openssl x509 -in server_.crt -out server.crt rm -f server.req server_.crt #8 #creating server request openssl req -keyout server1.key -newkey rsa:$KEY_LEN -nodes -days 100 -set_serial 21 \ -out server1.req -subj /C=RU/ST=Voronezh\ region/L=Voronezh/O=Relex\ ltd/OU=System\ develop/CN=Server\/emailAddress=s1@relex.ru #creating self signed sertificate for the server openssl x509 -req -days 365 -in server1.req -signkey server1.key -out server1SS.crt #sign the request of server openssl ca -batch -days 100 -policy policy_anything -out server1_.crt -in server1.req openssl x509 -in server1_.crt -out server1.crt rm -f server1_.crt server1.req #9 mkdir dbs_tcp mkdir dbs_tcp1 mkdir dbc_tcp1 mkdir dbc_tcp2 cd dbc_tcp1 echo "MYOPEN TCPIP localhost 1060 1 20 20 MYSSL TCPIPS localhost 1060 1 20 20 MYTLS TLS localhost 1060 1 20 20" > nodetab cp nodetab ../dbc_tcp2 cd .. #10 killall linter killall dbc_tcp killall dbs_tcp sleep 2 rm -rf db mkdir db export SY00=`pwd`/db echo "cre da;" | gendb linter sleep 3 pwd #11 #check simple connect cd dbs_tcp dbs_tcp -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN || { echo "failed to open" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "failed to ssl simple connect" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "failed to tls simple connect" exit } killall dbc_tcp killall dbs_tcp sleep 3 #12 #check ssl only flag cd dbs_tcp dbs_tcp -SSLONLY -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "failed to open success" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "failed to ssl sslonly" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "failed to tls sslonly" exit } killall dbc_tcp killall dbs_tcp sleep 3 #13 #coping the self signed sertificates to check work with its cp serverSS.crt dbs_tcp/dbs_tcp.crt cp server.key dbs_tcp/dbs_tcp.key cp server1SS.crt dbs_tcp1/dbs_tcp.crt cp server1.key dbs_tcp1/dbs_tcp.key cp client1SS.crt dbc_tcp1/dbc_tcp.crt cp client1.key dbc_tcp1/dbc_tcp.key cp client2SS.crt dbc_tcp2/dbc_tcp.crt cp client2.key dbc_tcp2/dbc_tcp.key #14 #checking sertificate compare #rm -f dbs_tcp/*.log dbc_tcp1/*.log cd dbs_tcp dbs_tcp -SSLONLY -SSLAUTH -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "failed to open success" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "failed to ssl certif" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "failed to tls certif" exit } killall dbc_tcp sleep 3 cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "failed to ssl certif" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "failed to tls certif" exit } #15 #try the client from the same address with other sertificate killall dbc_tcp sleep 3 cd dbc_tcp2 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "failed to open unprotected" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "failed to ssl alien sert" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "failed to tls alien sert" exit } #16 #try the server with other sertificate killall dbc_tcp killall dbs_tcp sleep 3 cd dbc_tcp1 #rm *.log dbc_tcp -debug=0xFFFFFFFF cd .. cd dbs_tcp1 dbs_tcp -debug=0xFFFFFFFF #no authentification. Can receive all connections !! cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "failed to ssl alien srv sert" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "failed to tls alien srv sert" exit } killall dbc_tcp killall dbs_tcp sleep 3 #17 #checking crtificate without creation rm -f dbs_tcp/127.0.0.1.crt rm -f dbc_tcp1/MYSSL.crt rm -f dbc_tcp1/MYTLS.crt cd dbc_tcp1 dbc_tcp -debug=0xFFFFFFFF cd .. cd dbs_tcp dbs_tcp -debug=0xFFFFFFFF -SSLAUTH -SSLNOCREAT cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "failed to tls no cert" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "failed to ssl no cert" exit } cp -f client1SS.crt dbs_tcp/127.0.0.1.crt echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "failed to ssl no cert ok" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "failed to tls no cert ok" exit } killall dbs_tcp killall dbc_tcp sleep 3 #18 #checking of all OLD (before 01.12) has done #checking the same with CA signed sertificates #coping the CA signed sertificates to check work with its rm -f dbs_tcp/*.crt #removing old self signed cert and saved cert rm -f dbc_tcp1/*.crt rm -f dbs_tcp1/*.crt rm -f dbc_tcp2/*.crt cp -f server.crt dbs_tcp/dbs_tcp.crt cp -f server1.crt dbs_tcp1/dbs_tcp.crt cp -f client1.crt dbc_tcp1/dbc_tcp.crt cp -f client2.crt dbc_tcp2/dbc_tcp.crt #checking sertificate compare #rm -f dbs_tcp/*.log dbc_tcp1/*.log cd dbs_tcp dbs_tcp -SSLONLY -SSLAUTH -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "CA failed to open success" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "CA failed to ssl certif" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "CA failed to tls certif" exit } killall dbc_tcp sleep 3 cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "CA failed to ssl certif rep" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "CA failed to tls certif rep" exit } #try the client from the same address with other sertificate killall dbc_tcp sleep 3 cd dbc_tcp2 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "CA failed to open unprotected" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "CA failed to ssl alien sert" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "CA failed to tls alien sert" exit } #try the server with other sertificate killall dbc_tcp killall dbs_tcp sleep 3 cd dbc_tcp1 #rm *.log dbc_tcp -debug=0xFFFFFFFF cd .. cd dbs_tcp1 dbs_tcp -debug=0xFFFFFFFF #no authentification. Can receive all connections !! cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "CA failed to ssl alien srv sert" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "CA failed to tls alien srv sert" exit } killall dbc_tcp killall dbs_tcp sleep 3 #19 #checking woiking TLS with CA #resore back the self signed sertificates rm -f dbs_tcp/*.crt #removing old self signed cert and saved cert rm -f dbc_tcp1/*.crt rm -f dbs_tcp1/*.crt rm -f dbc_tcp2/*.crt cp -f serverSS.crt dbs_tcp/dbs_tcp.crt cp -f server1SS.crt dbs_tcp1/dbs_tcp.crt cp -f client1SS.crt dbc_tcp1/dbc_tcp.crt cp -f client2SS.crt dbc_tcp2/dbc_tcp.crt #copyng the CA certificate cp cacert.pem dbs_tcp/dbs_tcp.CA cp cacert.pem dbs_tcp1/dbs_tcp.CA cp cacert.pem dbc_tcp1/dbc_tcp.CA cp cacert.pem dbc_tcp2/dbc_tcp.CA #rm -f dbs_tcp/*.log dbc_tcp1/*.log cd dbs_tcp dbs_tcp -SSLONLY -SSLAUTH -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "wCA failed to open success" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "wCA failed to ssl certif" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "wCA failed to tls certif" exit } #try the client from the same address with other sertificate killall dbc_tcp sleep 3 cd dbc_tcp2 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "wCA failed to open unprotected" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "wCA failed to ssl alien sert" exit } #must be failed because the sertificate is not signed by the CA echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "wCA failed to tls alien sert" exit } #try the server with other sertificate killall dbc_tcp killall dbs_tcp sleep 3 cd dbc_tcp1 #rm *.log dbc_tcp -debug=0xFFFFFFFF cd .. cd dbs_tcp1 dbs_tcp -debug=0xFFFFFFFF #no authentification. Can receive all connections !! cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "CA failed to ssl alien srv sert" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "CA failed to tls alien srv sert" exit } killall dbc_tcp killall dbs_tcp sleep 3 #20 #restore back the CA signed sertificates rm -f dbs_tcp/*.crt #removing old self signed cert and saved cert rm -f dbc_tcp1/*.crt rm -f dbs_tcp1/*.crt rm -f dbc_tcp2/*.crt cp -f server.crt dbs_tcp/dbs_tcp.crt cp -f server1.crt dbs_tcp1/dbs_tcp.crt cp -f client1.crt dbc_tcp1/dbc_tcp.crt cp -f client2.crt dbc_tcp2/dbc_tcp.crt rm -f dbs_tcp/*.log dbc_tcp1/*.log cd dbs_tcp dbs_tcp -SSLONLY -SSLAUTH -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "waCA failed to open success" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "waCA failed to ssl certif" exit } #the sertificate is signed so the connect should be success echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "waCA failed to tls certif" exit } #try the client from the same address with other sertificate killall dbc_tcp sleep 3 cd dbc_tcp2 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "waCA failed to open unprotected" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "waCA failed to ssl alien sert" exit } #must be failed because the sertificate is not signed by the CA echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "waCA failed to tls alien sert" exit } #try the server with other sertificate killall dbc_tcp killall dbs_tcp sleep 3 cd dbc_tcp1 #rm *.log dbc_tcp -debug=0xFFFFFFFF cd .. cd dbs_tcp1 dbs_tcp -debug=0xFFFFFFFF #no authentification. Can receive all connections !! cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL && { echo "waCA failed to ssl alien srv sert" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "waCA failed to tls alien srv sert" exit } killall dbc_tcp killall dbs_tcp sleep 3 #21 #creating CRL for the sertificate echo "10" >./demoCA/crlnumber openssl ca -revoke client1.crt openssl ca -gencrl -out CRL.pem if [ "$arg" != "no_interm" ]; then mv demoCA demoCAinter mv demoCARoot demoCA echo "00" >./demoCA/crlnumber openssl ca -gencrl -out RootCRL.pem cat RootCRL.pem > > CRL.pem #concatenate both CRL mv demoCA demoCARoot mv demoCAinter demoCA fi #no_interm cp CRL.pem dbs_tcp/dbs_tcp.CRL #rm -f dbs_tcp/*.log dbc_tcp1/*.log cd dbs_tcp dbs_tcp -SSLONLY -SSLAUTH -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYOPEN && { echo "cwaCA failed to open success" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "cwaCA failed to ssl certif" exit } #now it should failed because the client sertificate was revoked echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "cwaCA failed to tls certif" exit } killall dbc_tcp killall dbs_tcp sleep 3 #22 #creating new client request for client 1 rm -f client1.key client1.req client1.crt client1SS.crt openssl req -keyout client1.key -newkey rsa:$KEY_LEN -nodes -days 100 -set_serial 01 \ -out client1.req -subj /C=RU/ST=Voronezh\ region/L=Voronezh/O=Relex\ ltd/OU=System\ develop/CN=Client1_new\/emailAddress=c1@relex.ru #creating self signed sertificate for the client openssl x509 -req -days 365 -in client1.req -signkey client1.key -out client1SS.crt #sign the request of client 1 openssl ca -batch -days 100 -policy policy_anything -out client1_.crt -in client1.req openssl x509 -in client1_.crt -out client1.crt rm -f client1.req client1_.crt #replace client keys cp -f client1.key dbc_tcp1/dbc_tcp.key cp -f client1.crt dbc_tcp1/dbc_tcp.crt rm -f dbs_tcp/127.0.0.1.crt #cp -f client1.crt dbs_tcp/127.0.0.1.crt #23 rm -f dbs_tcp/*.log* dbc_tcp1/*.log* cd dbs_tcp dbs_tcp -SSLONLY -SSLAUTH -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "ssl after restoring crt" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS || { echo "tls after restoring crt" exit } killall dbc_tcp killall dbs_tcp sleep 3 #24 # revoke server sertificate rm -f CRL.pem openssl ca -revoke server.crt openssl ca -gencrl -out CRL.pem if [ "$arg" != "no_interm" ]; then mv demoCA demoCAinter mv demoCARoot demoCA openssl ca -gencrl -out RootCRL.pem cat RootCRL.pem > > CRL.pem #concatenate both CRL mv demoCA demoCARoot mv demoCAinter demoCA fi #no_interm cp CRL.pem dbc_tcp1/dbc_tcp.CRL #25 rm -f dbs_tcp/*.log* dbc_tcp1/*.log* cd dbs_tcp dbs_tcp -SSLONLY -SSLAUTH -debug 0xFFFFFFFF sleep 3 cd .. cd dbc_tcp1 dbc_tcp -debug 0xFFFFFFFF sleep 3 cd .. echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYSSL || { echo "ssl after revoke serv crt" exit } echo 'select count(*) from $$$USR;' | inl -u SYSTEM/MANAGER8 -n MYTLS && { echo "tls after revoke srv crt" exit } killall dbs_tcp killall dbc_tcp killall linter sleep 3 echo success