如何使用php动态生成openvpn客户端密钥并将变量传递给shell命令?

如何使用php动态生成openvpn客户端密钥并将变量传递给shell命令?,php,bash,shell,key,openvpn,Php,Bash,Shell,Key,Openvpn,我想用PHP生成客户端密钥。当客户端密钥生成时,它应该给我密钥的到期日期 root@zohaib-VirtualBox:/etc/openvpn/easy rsa#/构建密钥客户端1 生成2048位RSA私钥++++++ 正在将新私钥写入“client1.key” 您将被要求输入将纳入证书申请的信息。您将要输入的内容称为可分辨名称或DN。有相当多的字段,但您可以为某些字段保留一些空白,因为会有一个默认值 如果输入“.”,该字段将留空。 国家名称(两个字母代码)[GB]: 州或省名称(全称)[伦敦

我想用PHP生成客户端密钥。当客户端密钥生成时,它应该给我密钥的到期日期

root@zohaib-VirtualBox:/etc/openvpn/easy rsa#/构建密钥客户端1

生成2048位RSA私钥++++++

正在将新私钥写入“client1.key” 您将被要求输入将纳入证书申请的信息。您将要输入的内容称为可分辨名称或DN。有相当多的字段,但您可以为某些字段保留一些空白,因为会有一个默认值

如果输入“.”,该字段将留空。 国家名称(两个字母代码)[GB]:

州或省名称(全称)[伦敦]:

地点名称(如城市)[伦敦]:

组织名称(如公司)[组织]:

组织单位名称(如部门)[]:

通用名称(例如,您的姓名或服务器的主机名)[client1]:

名称[组织服务器]:

电子邮件地址[admin@org.com]:

请输入要与证书请求一起发送的以下“额外”属性

质询密码[]:

可选的公司名称[]:

使用/etc/openvpn/easy rsa/openssl-1.0.0.cnf中的配置

检查请求是否与签名匹配确定受试者的可分辨名称如下

国家名称:可打印:'GB'

州或省名称:可打印:'London'

LocationName:可打印:'London'

组织名称:可打印:'Org'

commonName:可打印:'client1'

名称:可打印:'OrgServer'

电子邮件地址:IA5STRING:'admin@gamban.com"

证书将被认证至4月21日15:43:47 2026 GMT(3650天)签署证书?[是/否]:是

1/1证书请求已认证,是否提交?[y/n]y

写出包含1个新条目的数据库

数据库更新

root@zohaib-VirtualBox:/etc/openvpn/easy rsa 35;

您可以使用并获得要使用的结果,例如,使用正则表达式来匹配密钥的到期日期等,即:

$ovpnKey = shell_exec("your command here");
命令的结果将保留在var
$ovpnKey


更新:

要自动创建新的OpenVPN客户端证书,请使用以下脚本。确保您至少编辑了以下变量
OPENVPN\u RSA\u DIR
OPENVPN\u密钥
密钥下载路径

#! /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 "#############################################################"
资料来源:


目前我只是在命令行中手动创建密钥,但现在我希望它在php中执行,并返回密钥到期日期等结果。您能发布一个由该命令生成的输出示例吗?请查看上面的脚本,我已经更新了我的答案。希望有帮助!但它也提出了许多问题,如何用php填充这些值?看看上面的代码。适用于我的CentOS 7。甚至可以从web URL调用,同时向相应的文件和目录添加一些读和/或写权限。
$ovpnKey = shell_exec("sh /full/path/to/new-openvpn-client.sh <common-name>");