Приложение 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\ inc/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\
inc/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\
inc/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\
inc/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\
inc/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\
inc/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\
inc/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