В целом менее надёжный и удобный вариант чем использование экспортированного ключа, но иногда бывает так что сделать это затруднительно.
Для полноценной работы необходимо добавить три хука
{toc}
h1. Установка крипто-про
[Инструкция по установке на сайте altlinux|http://www.altlinux.org/КриптоПро]
На самом деле там много полезной информации помимо установки.
Часть её будет продублирована здесь:
Архив с программным обеспечением (КриптоПро CSP 3.6 R3) можно [загрузить|http://www.cryptopro.ru/downloads] после [предварительной регистрации|http://www.cryptopro.ru/products/csp/overview]:
Скачиваем linux-amd64.zip (9,1 МБ, для x86_64), далее, уже на сервере:
{code}
yum -y install unzip lsb pcsc-lite pcsc-lite-devel pcsc-lite-libs
unzip linux-amd64.zip
yum -y install lsb-cprocsp*
{code}
h1. Хуки
h2. Выгрузка
rkn_download.sh
{code}
#!/bin/bash
prepare_request() {
PIN=ВАШ_ПИНКОД
KEY=СТРОКА_ПОИСКА_КЛЮЧА # например email
REQUEST=$SSLDIR/php/request.xml
SIGN=$REQUEST.sign
chroot $CHROOTDIR /bin/gen_request.sh || return 1
/opt/cprocsp/bin/amd64/cryptcp -sign -dn $KEY -der -pin $PIN -nochain $REQUEST $SIGN || return 2
}
{code}
h2. Диагностика
diagnostic.sh
{code}
#!/bin/bash
# проверка актуальности сертификата
check_cert_date() {
date_human="$(/opt/cprocsp/bin/amd64/certmgr -list | grep 'Not valid after' | sed -e 's/.*: //')"
read ddmmyyyy time mod <<< "$date_human"
IFS=/ read dd mm yyyy <<< "$ddmmyyyy"
date_finish_utc="$(date +%s --date "$yyyy-$mm-$dd $time $mod")"
days_before_finish=$(( ($date_finish_utc - $(date +%s))/ 86400 ))
echo -n " $days_before_finish дней"
[ "$days_before_finish" -gt '14' ]
}
# заглушки, т.к. файла ключа нет
check_cert() {
return 0
}
check_key_in_cert() {
return 0
}
{code}
h2. Получение информации о сертификате
show_stat.sh
{code}
cert_date() {
date_human="$(/opt/cprocsp/bin/amd64/certmgr -list | grep 'Not valid after' | sed -e 's/.*: //')"
read ddmmyyyy time mod <<< "$date_human"
IFS=/ read dd mm yyyy <<< "$ddmmyyyy"
date_finish_utc="$(date +%s --date "$yyyy-$mm-$dd $time $mod")"
days_before_finish=$(( ($date_finish_utc - $(date +%s))/ 86400 ))
echo "$days_before_finish"
}
{code}
Для полноценной работы необходимо добавить три хука
{toc}
h1. Установка крипто-про
[Инструкция по установке на сайте altlinux|http://www.altlinux.org/КриптоПро]
На самом деле там много полезной информации помимо установки.
Часть её будет продублирована здесь:
Архив с программным обеспечением (КриптоПро CSP 3.6 R3) можно [загрузить|http://www.cryptopro.ru/downloads] после [предварительной регистрации|http://www.cryptopro.ru/products/csp/overview]:
Скачиваем linux-amd64.zip (9,1 МБ, для x86_64), далее, уже на сервере:
{code}
yum -y install unzip lsb pcsc-lite pcsc-lite-devel pcsc-lite-libs
unzip linux-amd64.zip
yum -y install lsb-cprocsp*
{code}
h1. Хуки
h2. Выгрузка
rkn_download.sh
{code}
#!/bin/bash
prepare_request() {
PIN=ВАШ_ПИНКОД
KEY=СТРОКА_ПОИСКА_КЛЮЧА # например email
REQUEST=$SSLDIR/php/request.xml
SIGN=$REQUEST.sign
chroot $CHROOTDIR /bin/gen_request.sh || return 1
/opt/cprocsp/bin/amd64/cryptcp -sign -dn $KEY -der -pin $PIN -nochain $REQUEST $SIGN || return 2
}
{code}
h2. Диагностика
diagnostic.sh
{code}
#!/bin/bash
# проверка актуальности сертификата
check_cert_date() {
date_human="$(/opt/cprocsp/bin/amd64/certmgr -list | grep 'Not valid after' | sed -e 's/.*: //')"
read ddmmyyyy time mod <<< "$date_human"
IFS=/ read dd mm yyyy <<< "$ddmmyyyy"
date_finish_utc="$(date +%s --date "$yyyy-$mm-$dd $time $mod")"
days_before_finish=$(( ($date_finish_utc - $(date +%s))/ 86400 ))
echo -n " $days_before_finish дней"
[ "$days_before_finish" -gt '14' ]
}
# заглушки, т.к. файла ключа нет
check_cert() {
return 0
}
check_key_in_cert() {
return 0
}
{code}
h2. Получение информации о сертификате
show_stat.sh
{code}
cert_date() {
date_human="$(/opt/cprocsp/bin/amd64/certmgr -list | grep 'Not valid after' | sed -e 's/.*: //')"
read ddmmyyyy time mod <<< "$date_human"
IFS=/ read dd mm yyyy <<< "$ddmmyyyy"
date_finish_utc="$(date +%s --date "$yyyy-$mm-$dd $time $mod")"
days_before_finish=$(( ($date_finish_utc - $(date +%s))/ 86400 ))
echo "$days_before_finish"
}
{code}