Как динамически генерировать ключ клиента openvpn с помощью php и передавать переменные команде shell?

Я хочу создать ключ для клиентов с PHP. Когда клиентский ключ сгенерировал его, он должен указать дату истечения срока действия ключа.

root @ zohaib-VirtualBox: / etc / openvpn / easy-rsa # ./build-key client1

Создание секретного ключа RSA на 2048 бит ……………………………………. ……………… +++ ………………………. + ++

написание нового закрытого ключа на «client1.key». Вам будет предложено ввести информацию, которая будет включена в ваш запрос сертификата. То, что вы собираетесь ввести, – это то, что называется Distinguished Name или DN. Есть довольно много полей, но вы можете оставить некоторые пустые. Для некоторых полей будет значение по умолчанию,

Если вы введете «.», Поле останется пустым. Название страны (2-буквенный код) [GB]:

Название штата или провинции (полное название) [Лондон]:

Название местности (например, город) [Лондон]:

Название организации (например, компания) [Org]:

Название организационной единицы (например, раздел) []:

Общее имя (например, ваше имя или имя хоста вашего сервера) [client1]:

Имя [OrgServer]:

Адрес электронной почты [admin@org.com]:

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

Пароль с запросом []:

Дополнительное название компании []:

Использование конфигурации из /etc/openvpn/easy-rsa/openssl-1.0.0.cnf

Убедитесь, что запрос соответствует подписи подписи ok. Отличительное имя субъекта выглядит следующим образом

countryName: PRINTABLE: 'GB'

stateOrProvinceName: PRINTABLE: «Лондон»

localityName: PRINTABLE: 'London'

organizationName: PRINTABLE: 'Org'

commonName: PRINTABLE: 'client1'

name: PRINTABLE: 'OrgServer'

emailAddress: IA5STRING:'admin@gamban.com '

Сертификат должен быть сертифицирован до 21 апреля 15:43:47 2026 GMT (3650 дней) Подписать сертификат? [Г / л]: у

1 из 1 сертификатов проверен, зафиксирован? [Г / л] у

Выписать базу данных с помощью 1 новой записи

Обновлена ​​база данных

корень @ Zohaib-VirtualBox: / и т.д. / OpenVPN / простой # RSA

Вы можете использовать shell_exec и получить результат для использования, например, с регулярным выражением, чтобы соответствовать истечению даты ключа и т. Д., То есть:

$ovpnKey = shell_exec("your command here"); 

Результат команды будет $ovpnKey на 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 "#############################################################" и #! /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>"); 

Источники:

https://gist.github.com/hcooper/814247