Gere um perfil OpenVPN para o usuário cliente importar

40

Existe alguma documentação ou recurso descrevendo como gerar e hospedar um perfil para importação de um cliente OpenVPN? Idealmente, eu gostaria que meus usuários não tivessem que buscar separadamente um arquivo .zip dos arquivos .ovpn +, extraí-lo para o diretório apropriado, ajustar seus .ovpn, etc.

Yang
fonte

Respostas:

40

Aparentemente, desde o OpenVPN 2.1, uma configuração em linha é suportada. Permitindo que você localize seus certificados e tudo em um único arquivo de configuração. Mas a documentação sobre como criar esse arquivo de configuração não foi adicionada até o lançamento recente da 2.3.

Veja a INLINE FILE SUPPORTseção da página de manual do OpenVPN para mais informações.

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>

Os documentos para o arquivo de configuração são os mesmos para as opções de linha de comando:

O OpenVPN permite que qualquer opção seja colocada na linha de comandos ou em um arquivo de configuração. Embora todas as opções de linha de comando sejam precedidas por um traço duplo à esquerda ("-"), esse prefixo pode ser removido quando uma opção é colocada em um arquivo de configuração.

Zoredache
fonte
Não foi possível fazê-lo funcionar com o Windows Connect Client ( openvpn.net/?option=com_content&id=357 ), ele reclama de algo parecido, Could not read file C:\\...\[inline]pelo que parece que o cliente ainda não sabe sobre certificados embutidos.
Patrick Oscity
Não sei se ajuda, mas acabei de deixar os valores de ca, cert, key e tls-auth config e funciona.
Ikke 26/09
2
Você deve remover as linhas com [inline]. Em vez de TLS-auth [linha] 1 você deve usar TLS-direção 1
plaisthos
2
Desculpe, é a direção-chave 1. Entendi tudo. Meu patch para a página do manual já foi integrado. Consulte a página do manual 2.3 em ARQUIVOS EM LINHA: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . Copiei para sua própria resposta para torná-lo legível e acessível.
plaisthos
11
@Strubbl: consulte as etapas 10 e 11 deste link digitalocean.com/community/tutorials/…
Sai Ramachandran
8

Na página do manual do OpenVPN 2.3 (é suportada desde 2.1rc-something):

O OpenVPN permite incluir arquivos na configuração principal para as opções --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secrete --tls-auth.

Cada arquivo embutido iniciado pela linha <option>e finalizado pela linha </option>.

Aqui está um exemplo de uso de arquivo embutido

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

Ao usar o recurso de arquivo embutido, o arquivo --pkcs12embutido deve ser codificado em base64. A codificação de um arquivo .p12 na base64 pode ser feita, por exemplo, com o OpenSSL executandoopenssl base64 -in input.p12

Observe também a key-directionopção:

--key-direction
Maneira alternativa de especificar o parâmetro de direção opcional para as opções --tls-auth e --secret. Útil ao usar arquivos embutidos (consulte a seção sobre arquivos embutidos).

plaisthos
fonte
3

Isso foi testado com o OpenVPN 2.3.4 Debian 8.9 Server com clientes Win7.

Etapa 1. Crie um arquivo contendo seus padrões (eu chamo de inline_client.conf). Todas as configurações devem corresponder aos seus valores 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

Etapa 2. Crie o script a seguir, ajuste os caminhos conforme necessário e 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

Etapa 3. Execute, MakeInline.shele solicitará o nome de um cliente com o qual você precisa já ter criado build-key or build-key-pass. Ele solicitará um nome para o arquivo ovpn. Meu padrão é ServerToConnectTo.ClientName, que produzirá ServerToConnectTo.ClientName.ovpn

Nota: se você usou em build-keyvez de build-key-pass, qualquer pessoa que se apossar dele *.ovpnterá acesso ao seu servidor sem uma senha!

Eric Maasdorp
fonte
1

Esse script Python pode ser executado no servidor para gerar as chaves do cliente e um perfil. Eu o incluiria, mas não é minha criação, é longo e pode ser atualizado periodicamente, e há garfos de tal forma que é provável que ele seja pesquisável na Web para futuros viajantes da Web. Se o link não funcionar, tente pesquisar "openvpn_gen.py".

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

dragon788
fonte