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

时间:2016-04-23 15:23:52

标签: php bash shell key openvpn

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

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

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

将新私钥写入' client1.key' 您将被要求输入将包含在您的证书申请中的信息。您要输入的是所谓的专有名称或DN。有很多字段但你可以留空一些字段对于某些字段会有一个默认值,

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

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

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

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

组织单位名称(例如,部分)[]:

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

名称[OrgServer]:

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

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

挑战密码[]:

可选公司名称[]:

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

检查请求是否符合签名签名确定主题的专有名称如下

countryName:PRINTABLE:' GB'

stateOrProvinceName:PRINTABLE:' London'

localityName:PRINTABLE:' London'

organizationName:PRINTABLE:' Org'

commonName:PRINTABLE:' client1'

name:PRINTABLE:' OrgServer'

emailAddress:IA5STRING:' admin@gamban.com'

证书必须经过认证,直到格林威治标准时间4月21日15:43:47 2026(3650天)签署证书? [Y / N]:Y

1个证书请求中有1个已通过认证,提交? [Y / N - ] Y

使用1个新条目写出数据库

数据库已更新

根@ zohaib-VirtualBox的:在/ etc / openvpn的/易-RSA#

1 个答案:

答案 0 :(得分:2)

您可以使用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>");

来源:

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