クライアントユーザーがインポートするOpenVPNプロファイルを生成する


40

インポートするOpenVPNクライアントのプロファイルを生成およびホストする方法を説明するドキュメントまたはリソースはありますか?理想的には、ユーザーが.ovpn +証明書の.zipファイルを個別に取得したり、適切なディレクトリに抽出したり、.ovpnを微調整したりする必要がないようにしたいです。

回答:


40

OpenVPN 2.1以降、インライン構成がサポートされているようです。単一の構成ファイルで証明書とキーをすべて見つけることができます。ただし、この構成ファイルの作成方法に関するドキュメントは、2.3の最近のリリースまで追加されませんでした。

詳細についてINLINE FILE SUPPORT、OpenVPN manページのセクションを参照してください。

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つのダッシュ( "-")が付いていますが、このプレフィックスはオプションが構成ファイルに配置されるときに削除できます。


Windows Connectクライアント(openvpn.net/?option=com_content&id=357)で動作させることができなかったため、何かに文句を言うCould not read file C:\\...\[inline]ので、クライアントは(まだ)インライン証明書を知らないようです。
パトリックオスシティ

それが役立つかどうかはわかりませんが、ca、cert、key、およびtls-authの構成値を省略しただけで機能します。
イッケ

2
[inline]で行を削除する必要があります。tls-auth [inline] 1の代わりに、tls-direction 1を使用する必要があります
-plaisthos

2
申し訳ありませんが、これはキー方向1です。manページへの私のパッチはすでに統合されています。インラインファイル:community.openvpn.net/openvpn/wiki/Openvpn23ManPageの2.3のマニュアルページを参照してください。それを独自の回答にコピーして、読みやすくアクセスしやすくしました。
-plaisthos

1
@Strubbl:このリンクのステップ10および11を参照してくださいdigitalocean.com/community/tutorials / ...
サイラマチャンドラン

8

OpenVPN 2.3のmanページから(2.1rc-something以降でサポートされています):

OpenVPNでは、--ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secretおよび--tls-authオプションのメイン構成にファイルを含めることができます。

各インラインファイルは、行<option>で始まり、行で終わり</option>ます。

インラインファイルの使用例を次に示します

<cert>
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
</cert>

インラインファイルでインラインファイル機能を使用する場合、--pkcs12base64でエンコードする必要があります。.p12ファイルのbase64へのエンコードは、たとえばOpenSSLを実行して実行できます。openssl base64 -in input.p12

key-directionオプションにも注意してください。

--key-direction
--tls-auth および --secretオプションの オプションの方向パラメーターを指定する代替方法 。インラインファイルを使用する場合に便利です(インラインファイルのセクションを参照)。


3

これは、Win7クライアントを備えたOpenVPN 2.3.4 Debian 8.9サーバーでテストされています。

ステップ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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.