Мар 222014
 

Никогда, никогда не делайте revoke сертификату главного админа, даже, если на 100% уверены в том, что новый везде прописан и всё сделано правильно. 😮  Сначала надо немного поработать с новым и проверить, а всё ли в порядке…

Ну, это так, для затравки. Мне надоело вспоминать и набирать ручками команды для замены “протухающих” сертификатов. Посему, скриптик:

#!/bin/bash
#

# --
if [ "$#" -lt 3 ] ; then
echo "Usage: $0 isRecover <host_name>"
echo "isRecover - 'y' or 'n'"
exit 1
fi

wDir=${HOME}/work/p12/pem
sOU=$2
hName=$3
uName="sa_${sOU}_${hName}"

cd ${HOME}

if [ $1 == "y" ] ; then
echo "Recovering key = YES"
./ejbca/bin/ejbca.sh ra keyrecovernewest ${uName}
else
echo "Recovering key = No"
./ejbca/bin/ejbca.sh ra setendentitystatus ${uName} 10
fi

./ejbca/bin/ejbca.sh ra setclearpwd ${uName} <пароль>
./ejbca/bin/ejbca.sh batch ${uName}
./bin/prepare.apache ${sOU} ${hName}

exit 0
  •  Первый параметр – нужно ли восстанавливать сохранённые ключи шифрования или сгенерировать новые. Для entity должна быть выставлена соответствующая опция.
  • Второй – имя OU. Я, для “сервисов”, использую отдельную ветку дерева в ldap.  Мне так удобнее.
  • Последний – хост. Два последних параметра в сумме дают имя пользователя в ejbca.

Теперь скрипт prepare.apache.  Он готовит token и выставляет права доступа.

  • Каталог ${HOME}/work/p12/pem/${OU} должен быть уже создан.
  • Копирую “по месту” ручками.
  • Для apache в настройках использую -token.pem файл.
  • Поскольку у меня используется setuid для каждого виртуального хоста, то менять владельца для token файла не надо. Он читается при старте, когда разбирается конфиг (от root).
#!/bin/bash
#

# --
if [ "$#" -lt 2 ] ; then
echo "Usage: $0 <host_name>"
exit 1
fi

wDir=${HOME}/work/p12/pem
sOU=$1
hName=$2

cd ${wDir}

if test ! -d $sOU; then
echo "OU=$sOU - Directory $wDir/$sOU not found. Check certificate."
exit 1
fi

echo -n "OU=$sOU, "

rm -f $sOU/${hName}-token.pem $sOU/${hName}-Key.pem.raw $sOU/${hName}.pem $sOU/${hName}-Key.pem

cp ${hName}-Key.pem ${hName}.pem $sOU
cd $sOU

/usr/bin/openssl rsa -in ${hName}-Key.pem -out ${hName}-Key.pem.raw >/dev/null

cat ${hName}.pem >${hName}-token.pem
echo >>${hName}-token.pem
cat ${hName}-Key.pem.raw >>${hName}-token.pem

chmod 400 ${hName}-Key.pem ${hName}-Key.pem.raw ${hName}-token.pem
chmod 444 ${hName}.pem

echo

exit 0

Надо бы ещё, конечно, в первый скрипт вставить проверку на возможность key recovery. Чтоб само брало из базы. Но, лень. Потом.