Приложение 4. Работа с сертификатами

В приложении приведен скрипт, иллюстрирующий возможности работы сетевых средств с сертификатами и ключами.

В скрипте демонстрируется выполнение следующих функций:

  1. удаление старых файлов и каталогов;

  2. создание структуры каталогов УЦ (Удостоверяющего Центра, (Certification authority, CA));

  3. создание самоподписного сертификата и ключа корневого УЦ:

    • создание запроса сертификата и ключа без пароля;

    • подписание своего сертификата своим ключом;

    • копирование сертификата с выкидыванием текстовой информации.

    где:

    RootCACert.pem – корневой сертификат.

    ./demoCA/private/./cakey.pem – ключ.

  4. создание промежуточного УЦ:

    • создание запроса сертификата и ключа;

    • подписание сертификата промежуточного УЦ корневым УЦ;

    • копирование с выкидыванием текстовой информации;

    • добавление в сертификат промежуточного УЦ сертификата корневого УЦ;

    • переименование структуры каталогов корневого УЦ в demoCARoot;

    • создание структуры каталогов промежуточного УЦ;

    • копирование сертификата и ключа в нужные каталоги дерева.

    где:

    cacert.pem – сертификат промежуточного УЦ.

    IntermCA.key – ключ промежуточного УЦ.

  5. создание сертификатов 1 клиента:

    • создание ключа и запроса на сертификат;

    • создание самоподписного сертификата;

    • подписание сертификата УЦ;

    • удаление из сертификата текста.

    где:

    client1.key – ключ.

    client1SS.crt – самоподписной сертификат.

    client1.crt – сертификат, подписанный промежуточным УЦ.

  6. создание сертификатов 2 клиента:

    • аналогично первому, но с цифрой 2.

    где:

    client2.key – ключ.

    client2SS.crt – самоподписной сертификат.

    client2.crt – сертификат, подписанный промежуточным УЦ.

  7. создание сертификатов сервера.

    где:

    server.key – ключ.

    serverSS.crt – самоподписной сертификат.

    server.crt – сертификат, подписанный промежуточным УЦ.

  8. создание сертификатов 2 сервера.

    где:

    server1.key – ключ.

    server1SS.crt – самоподписной сертификат.

    server1.crt – сертификат, подписанный промежуточным УЦ.

  9. создание каталогов сетевого клиента и сетевого сервера.

    Предполагается что один из каталогов является каталогом валидного клиента или сервера, а второй – нарушителя.

    Создание nodetab для работы незащищенного соединения, защищенного SSL23 и TLS с именами MYOPEN MYSSL и MYTLS соответственно в каталогах клиентов.

    где:

    dbs_tcp – каталог сервера.

    dbs_tcp1 – каталог нарушителя сервера.

    dbc_tcp1 – каталог клиента.

    dbc_tcp2 – каталог нарушителя.

  10. создание каталога БД и собственно БД. Предварительно убиваются существующие ядра СУБД ЛИНТЕР и сетевые драйвера.

  11. проверка простого зашифрованного соединения:

    • запуск сетевых драйверов в соответствующих пустых каталогах;

    • проверка удачного соединения по всем 3 протоколам;

    • останов драйверов.

    Все соединения успешны, поскольку нет работы с сертификатами и контроля клиента и сервера соответственно.

  12. проверка отсечения работы по незащищенному каналу:

    • запуск сетевых драйверов dbs_tcp с опцией запрещения работы по незащищенному соединению;

    • попытка соединения по 3 протоколам;

    • останов драйверов.

    Соединение по незащищенному каналу неуспешно.

  13. копирование самоподписных сертификатов и ключей в соответствующие каталоги запуска.

    Сертификаты используются для идентификации клиента и сервера. Также сертификаты определяют протокол соединения. Например, ГОСТ-сертификаты предполагают ГОСТ-алгоритм. Чтобы работало везде используется DSA-сертификаты. В каталоге сервера ключи и сертификаты должны иметь имена dbs_tcp.key и dbs_tcp.crt, в каталоге клиента – dbc_tcp.key и dbc_tcp.crt соответственно.

  14. запуск dbc и dbs:

    • dbs запускается с дополнительным ключом аутентификации клиента;

    • незащищенное соединение неуспешно;

    • защищенные соединения успешны;

    • повторные защищенные соединения также успешны;

    • при повторном соединении производится сверка сертификатов.

  15. попытка подмены адреса клиента:

    • перезапуск клиента в другом каталоге. Поскольку ключи и сертификаты заменены – это эквивалентно попытке работы другого клиента с этого же адреса;

    • поскольку сравнение сертификатов прошло неуспешно, все 3 соединения неуспешны:

      • незащищенное – поскольку запрещено;

      • защищенные – из-за разницы в сертификатах.

  16. подмена адреса сервера:

    • останов всех сетевых серверов;

    • запуск dbc в правильном каталоге, а dbs в каталоге с другими сертификатами. Результат, как в предыдущем пункте, поскольку не совпадают сохраненные сертификаты клиентов;

    • останов сетевых драйверов.

  17. запрет работы без сертификатов:

    • удаление всех сохраненных сертификатов;

    • запуск dbs с соответствующей дополнительной опцией;

    • несмотря на присутствие своих правильных сертификатов, соединения неуспешны из-за отсутствия сертификатов;

    • копирование нужного сертификата в каталог dbs_tcp восстанавливает возможность соединения.

  18. удаление всех старых сертификатов, как самоподписных, так и сохраненных:

    • копирование сертификатов, подписанных УЦ, в соответствующие каталоги;

    • повторение проверок п.п. 14, 15, 16 для сертификатов УЦ.

  19. проверка отсутствия соединения с сертификатами, не подписанными УЦ.

    Эта проверка включается при наличии сертификата(ов) УЦ в текущем каталоге. Они должны называться dbc_tcp.CA и dbs_tcp.CA соответственно для клиента и сервера. В то же время для соединения используются самоподписные сертификаты. В случае неподписанных сертификатов и активации проверки подписи УЦ SSL соединение проходит успешно, а TLS нет, поскольку сертификат подписан не тем УЦ, которому доверяют клиент и сервер.

    Сохранение и сверка сертификатов продолжает работать (для SSL).

  20. проверка, соединения с сертификатами, подписанными УЦ.

    Восстановление подписанных УЦ сертификатов в соответствующих каталогах. И SSL и TLS соединение успешно.

    Сверка сертификатов продолжает работать верно – подмена адреса не проходит.

  21. проверка списка отозванных сертификатов (CRL):

    • отзываем сертификат у клиента;

    • формируем список отозванных сертификатов;

    • копируем его в каталог сервера с именем dbs_tcp.CRL;

    • после этого попытка соединения по TLS протоколу неуспешна, потому что сертификат клиента недействителен (присутствует в списке CRL).

  22. выдача клиенту нового сертификата и ключа, чтобы они были валидными. Замена ключей на валидные.

  23. проверка восстановления ключей клиента. Соединения проходят успешно.

  24. отзыв сертификата сервера. Список отозванных сертификатов копируется клиенту.

  25. после отозвания сертификата сервера установка соединения с ним по 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