是否有任何文档或资源描述如何生成和托管要导入的 OpenVPN 客户端配置文件?理想情况下,我希望我的用户不必单独获取 .ovpn + 证书的 .zip 文件,将其提取到正确的目录中,调整他们的 .ovpn 等。
答案1
显然,自 OpenVPN 2.1 以来,内联配置已得到支持。允许您在单个配置文件中找到您的证书和密钥。但直到最近发布的 2.3 版才添加有关如何创建此配置文件的文档。
INLINE FILE SUPPORT
请参阅OpenVPN 手册页了解更多信息。
client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
# insert base64 blob from ca.crt
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
# insert base64 blob from client1.crt
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
# insert base64 blob from client1.key
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
# insert ta.key
-----END OpenVPN Static key V1-----
</tls-auth>
配置文件的文档与命令行选项的文档相同:
OpenVPN 允许将任何选项放在命令行或配置文件中。尽管所有命令行选项前面都有双前导破折号(“--”),但当选项放在配置文件中时,可以删除此前缀。
答案2
来自 OpenVPN 2.3手册页(自 2.1rc 版本开始支持):
OpenVPN 允许在主配置中包含
--ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secret
和--tls-auth
选项的文件。每个内联文件以 行 开始
<option>
,以 行 结束</option>
。以下是内联文件使用的示例
<cert> -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- </cert>
使用内联文件功能时,
--pkcs12
内联文件必须采用 base64 编码。例如,可以使用 OpenSSL 将 .p12 文件编码为 base64,方法是运行openssl base64 -in input.p12
另请注意key-direction
选项:
--key-direction
--tls-auth
为和 选项 指定可选方向参数的另一种方法--secret
。使用内联文件时很有用(请参阅内联文件部分)。
答案3
这已经通过带有 Win7 客户端的 OpenVPN 2.3.4 Debian 8.9 Server 进行了测试。
步骤 1. 创建一个包含默认设置的文件(我称之为 inline_client.conf),所有设置必须与 server.conf 值匹配
client
dev tun
proto udp
remote yourserver.xyz 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3
;mute 20
ca [inline]
cert [inline]
key [inline]
tls-auth [inline] 1
步骤2. 创建以下脚本,根据需要调整路径,然后
chmod ug+x MakeInline.sh
#!/bin/bash
# Default Variable Declarations
DEFAULT="inline_client.conf"
FILEEXT=".ovpn"
CRT=".crt"
KEY=".key"
CA="ca.crt"
TA="ta.key"
kPath="./keys/"
#Ask for a Client name
echo "Please enter an existing Client Name:"
read NAME
echo "Please enter an Name for the output file"
read ovpnName
#1st Verify that client's Public Key Exists
if [ ! -f $kPath$NAME$CRT ]; then
echo "[ERROR]: Client Public Key Certificate not found: $kPath$NAME$CRT"
exit
fi
echo "Client's cert found: $kPath$NAME$CRT"
#Then, verify that there is a private key for that client
if [ ! -f $kPath$NAME$KEY ]; then
echo "[ERROR]: Client 3des Private Key not found: $kPath$NAME$KEY"
exit
fi
echo "Client's Private Key found: $kPath$NAME$KEY"
#Confirm the CA public key exists
if [ ! -f $kPath$CA ]; then
echo "[ERROR]: CA Public Key not found: $kPath$CA"
exit
fi
echo "CA public Key found: $kPath$CA"
#Confirm the tls-auth ta key file exists
if [ ! -f $kPath$TA ]; then
echo "[ERROR]: tls-auth Key not found: $kPath$TA"
exit
fi
echo "tls-auth Private Key found: $kPath$TA"
#Ready to make a new .opvn file - Start by populating with the
cat $DEFAULT > $ovpnName$FILEEXT
#Now, append the CA Public Cert
echo "<ca>" >> $ovpnName$FILEEXT
cat $kPath$CA | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $ovpnName$FILEEXT
echo "</ca>" >> $ovpnName$FILEEXT
#Next append the client Public Cert
echo "<cert>" >> $ovpnName$FILEEXT
cat $kPath$NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $ovpnName$FILEEXT
echo "</cert>" >> $ovpnName$FILEEXT
#Then, append the client Private Key
echo "<key>" >> $ovpnName$FILEEXT
cat $kPath$NAME$KEY >> $ovpnName$FILEEXT
echo "</key>" >> $ovpnName$FILEEXT
#Finally, append the TA Private Key
echo "<tls-auth>" >> $ovpnName$FILEEXT
cat $kPath$TA >> $ovpnName$FILEEXT
echo "</tls-auth>" >> $ovpnName$FILEEXT
echo "Done! $ovpnName$FILEEXT Successfully Created."
#Script written by Eric Jodoin
#Update by Eric Maasdorp 2017-12-16
步骤 3. 执行MakeInline.sh
它将要求输入您需要已创建的客户端的名称build-key or build-key-pass
。它将要求输入 ovpn 文件的名称。我的标准是 ServerToConnectTo.ClientName,它将生成
ServerToConnectTo.ClientName.ovpn
注意:如果您使用build-key
而不是build-key-pass
,那么任何获得的人*.ovpn
都可以无需密码访问您的服务器!
答案4
此 Python 脚本可以在服务器上运行,以生成客户端密钥和配置文件。我会将其内联,但它不是我创作的,而且很长,可能会定期更新,并且它有分支,因此未来的网络旅行者很可能会在网上搜索到它。如果链接不起作用,请尝试搜索“openvpn_gen.py”。