生成供客户端用户导入的OpenVPN配置文件


40

是否有任何文档或资源描述如何为OpenVPN客户端生成和托管配置文件以进行导入?理想情况下,希望我的用户不必分别获取.ovpn +证书的.zip文件,将其解压缩到正确的目录,调整他们的.ovpn等。

Answers:


40

显然,自Ope​​nVPN 2.1开始,已支持串联配置。允许您找到证书,并将密钥全部放在一个配置文件中。但是直到最新版本2.3才添加有关如何创建此配置文件的文档。

有关更多信息,请参见OpenVPN手册页INLINE FILE SUPPORT部分。

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允许将任何选项放置在命令行或配置文件中。尽管所有命令行选项都以双引号(“-”)开头,但是当在配置文件中放置选项时,可以删除此前缀。


无法使其与Windows Connect客户端一起使用(openvpn.net/?option=com_content&id=357),它抱怨类似的内容,Could not read file C:\\...\[inline]因此客户端似乎还不知道内联证书(尚未)。
Patrick Oscity 2013年

不知道它是否有帮助,但是我只是省略了ca,cert,key和tls-auth配置值,它仍然有效。
Ikke 2013年

2
您应该使用[inline]删除行。而不是tls-auth [inline] 1,您应该使用tls-direction 1
plaisthos

2
抱歉,这是按键方向1。搞混了。我的手册页补丁已经集成。请参见“内联文件”下的2.3手册页:community.openvpn.net/openvpn/wiki/Openvpn23ManPage。我将其复制到自己的答案中,以使其易于阅读和访问。
plaisthos 2013年

1
@Strubbl:见步骤10和该链接的11 digitalocean.com/community/tutorials/...
西德兰

8

从OpenVPN 2.3 手册页(自2.1rc-something开始受支持):

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选项指定可选的direction参数的另一种方式 。使用内联文件时很有用(请参阅内联文件部分)。


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将无需密码即可访问您的服务器!


1

该Python脚本可以在服务器上运行以生成客户端密钥和配置文件。我会内联它,但它不是我的创作,并且很长,可能会定期更新,并且有很多分支,因此很可能会在网上搜索以供将来的网络旅行者使用。如果链接不起作用,请尝试搜索“ openvpn_gen.py”。

https://gist.github.com/Justasic/908ef5f4fa162f15b3b8

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.