클라이언트 사용자가 가져올 OpenVPN 프로파일 생성


40

OpenVPN 클라이언트가 가져올 프로파일을 생성하고 호스팅하는 방법을 설명하는 문서 나 리소스가 있습니까? 이상적으로는 사용자가 .ovpn + 인증서의 .zip 파일을 별도로 가져 와서 적절한 디렉토리에 추출하고 .ovpn 등을 조정하지 않아도되도록하는 것이 이상적입니다.

답변:


40

분명히 OpenVPN 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 2016 년

그것이 도움이되는지 모르겠지만 ca, cert, key 및 tls-auth 구성 값을 그대로두면 작동합니다.
Ikke

2
[inline]으로 줄을 제거해야합니다. 대신 TLS-인증의 [인라인] (1) 당신은 TLS 방향 1 사용해야합니다
plaisthos

2
죄송합니다. 키 방향 1입니다. 매뉴얼 페이지에 대한 나의 패치는 이미 통합되었습니다. 인라인 파일 : community.openvpn.net/openvpn/wiki/Openvpn23ManPage 의 2.3 매뉴얼 페이지를 참조하십시오 . 읽기 쉽고 액세스 할 수 있도록 자체 답변에 복사했습니다.
plaisthos

1
@Strubbl :이 링크의 10 단계와 11 단계를 참조하십시오 digitalocean.com/community/tutorials/…
Sai Ramachandran

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옵션에 선택적 방향 매개 변수를 지정하는 대체 방법입니다 . 인라인 파일을 사용할 때 유용합니다 (인라인 파일 섹션 참조).


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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.