Я хочу сгенерировать ключ клиента с помощью PHP. Когда ключ клиента сгенерирован, он должен дать мне дату истечения срока действия ключа.
root @ zohaib-VirtualBox: / etc / openvpn / easy-rsa # ./build-key client1
Создание 2048-битного закрытого ключа RSA ……………………………………. ……………… +++ ………………………. + ++
запись нового закрытого ключа в «client1.key»
Вам будет предложено ввести информацию, которая будет включена в ваш запрос на сертификат. То, что вы собираетесь ввести, это то, что называется отличительным именем или DN. Есть довольно много полей, но вы можете оставить некоторые пустыми. Для некоторых полей будет значение по умолчанию,
Если вы введете «.», Поле останется пустым.
Название страны (двухбуквенный код) [ГБ]:
Название штата или провинции (полное имя) [Лондон]:
Название населенного пункта (например, город) [Лондон]:
Название организации (например, компания) [Org]:
Название организационной единицы (например, раздел) []:
Общее имя (например, ваше имя или имя хоста вашего сервера) [client1]:
Имя [OrgServer]:
Адрес электронной почты [[email protected]]:
Пожалуйста, введите следующие «дополнительные» атрибуты, которые будут отправлены с вашим запросом сертификата
Пароль для вызова []:
Необязательное название компании []:
Использование конфигурации из /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Убедитесь, что запрос соответствует подписи Подпись ok Отличительное имя субъекта выглядит следующим образом
countryName: ПЕЧАТЬ: ‘ГБ’
stateOrProvinceName: ПЕЧАТЬ: ‘Лондон’
localityName: ПЕЧАТНАЯ: «Лондон»
имя_организации: ПЕЧАТНАЯ: «Орг»
commonName: ПЕЧАТЬ: ‘client1’
имя: ПЕЧАТЬ: ‘OrgServer’
адрес электронной почты: IA5STRING:’[email protected] ‘
Сертификат подлежит сертификации до 21 апреля 15:43:47 2026 по Гринвичу (3650 дней). Подписать сертификат? [Г / л]: у
1 из 1 запросов на сертификат сертифицирован, зафиксировать? [Г / л] у
Выписать базу данных с 1 новыми записями
База данных обновлена
корень @ Zohaib-VirtualBox: / и т.д. / OpenVPN / простой # RSA
Ты можешь использовать shell_exec и получить результат для использования, например, с регулярным выражением, совпадающим с датой истечения срока действия ключа и т. д., т.е.
$ovpnKey = shell_exec("your command here");
Результат команды будет храниться на VAR $ovpnKey
,
Обновить:
Автоматизировать создание новых OpenVPN клиентские сертификаты, используйте следующий скрипт. Убедитесь, что вы редактируете, по крайней мере, следующие переменные OPENVPN_RSA_DIR
OPENVPN_KEYS
KEY_DOWNLOAD_PATH
#! /bin/bash
# Script to automate creating new OpenVPN clients
# The client cert and key, along with the CA cert is
# zipped up and placed somewhere to download securely
#
# H Cooper - 05/02/11
#
# Usage: new-openvpn-client.sh <common-name>
# Set where we're working from
OPENVPN_RSA_DIR=/etc/openvpn/easy-rsa/2.0
OPENVPN_KEYS=$OPENVPN_RSA_DIR/keys
KEY_DOWNLOAD_PATH=/var/www/secure
# Either read the CN from $1 or prompt for it
if [ -z "$1" ]
then echo -n "Enter new client common name (CN): "read -e CN
else
CN=$1
fi
# Ensure CN isn't blank
if [ -z "$CN" ]
then echo "You must provide a CN."exit
fi
# Check the CN doesn't already exist
if [ -f $OPENVPN_KEYS/$CN.crt ]
then echo "Error: certificate with the CN $CN alread exists!"echo " $OPENVPN_KEYS/$CN.crt"exit
fi
# Enter the easy-rsa directory and establish the default variables
cd $OPENVPN_RSA_DIR
source ./vars > /dev/null
# Copied from build-key script (to ensure it works!)
export EASY_RSA="${EASY_RSA:-.}""$EASY_RSA/pkitool" --batch $CN
# Take the new cert and place it somewhere it can be downloaded securely
zip -q $KEY_DOWNLOAD_PATH/$CN-`date +%d%m%y`.zip keys/$CN.crt keys/$CN.key keys/ca.crt
# Celebrate!
echo ""echo "#############################################################"echo "COMPLETE! Download the new certificate here:"echo "https://domain.com/secure/$CN-`date +%d%m%y`.zip"echo "#############################################################"
Сохраните приведенный выше скрипт bash как new-openvpn-client.sh
и дать ему разрешение на выполнение.
Тогда используйте php shell_exec
для генерации ключей:
$ovpnKey = shell_exec("sh /full/path/to/new-openvpn-client.sh <common-name>");
Источники:
Других решений пока нет …