Idioma
Categoria
Pesquisar

Configuração do OpenVPN Cliente e Easy-RSA 3 no Slackware

Criando certificado no cliente e conectando a VPN do servidor.

Em Open Source Por Rudi Drusian Lange
Publicado em
Última atualização

Serão demonstrados dois métodos neste tutorial para criação e assinatura do certificado. O primeiro gerando o certificado no cliente e transferindo para o servidor assiná-lo e o outro gerando o certificado e assinando-o diretamente no servidor. O primeiro processo é mais trabalhoso porém mais seguro pois não será necessário transferir o arquivo .key e correr o risco deste ser interceptado.

Método 1

1 - Gerando o certificado no cliente e transferindo para o servidor assiná-lo

Comece fazendo o download dos scripts Easy-rsa e configurando as variáveis:

# Shell

cd /etc/openvpn/
git clone git://github.com/OpenVPN/easy-rsa
cd easy-rsa/easyrsa3 # /etc/openvpn/easy-rsa/easyrsa3
cp vars.example vars
vi vars

/etc/openvpn/easy-rsa/easyrsa3/vars

set_var EASYRSA_REQ_COUNTRY "BR" # Pais
set_var EASYRSA_REQ_PROVINCE    "Sao Paulo" # Estado
set_var EASYRSA_REQ_CITY    "Sao Paulo" # Cidade
set_var EASYRSA_REQ_ORG "Minha empresa LTDA" # Empresa
set_var EASYRSA_REQ_EMAIL   "emaildesuporte@minhaempresa.com.br" # E-mail
set_var EASYRSA_REQ_OU      "Matriz" # Unidade

Cuidado! O comando abaixo "./easyrsa init-pki" remove todos os certificados criados anteriormente. Só utilize quando estiver começando uma nova configuração ou se quiser reconfigurar todo o sistema.

# Shell

./easyrsa init-pki

Altere o nome do certificado client1 para um nome de sua escolha. Será solicitada a criação de uma palavra-chave, esta é a mesma que será utilizada para iniciar o serviço. Mas a diante será demonstrado como ler esta chave a partir de um arquivo texto.

# Shell

./easyrsa gen-req client1

Generating a RSA private key
..................+++++
...............................+++++
writing new private key to '/etc/openvpn/easy-rsa/easyrsa3/pki/private/client1.key.XXXX10N19L'
Enter PEM pass phrase: # Digite uma palavra-chave e memorize
Verifying - Enter PEM pass phrase: # Repita a palavra-chave
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client1]: # confirme o nome pressionando enter

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/client1.req
key: /etc/openvpn/easy-rsa/easyrsa3/pki/private/client1.key

Copie o arquivo /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/client1.req do cliente para a pasta /etc/openvpn/ do servidor. Caso o servidor ainda não esteja configurado você pode seguir este tutorial.

Assinando a requisição no servidor:

# Shell

cd /etc/openvpn/easy-rsa/easyrsa3/
./easyrsa import-req /etc/openvpn/client1.req client1

Note: using Easy-RSA configuration from: ./vars
The request has been successfully imported with a short name of: client1
You may now use this name to perform signing operations on this request.

./easyrsa sign-req client client1

Note: using Easy-RSA configuration from: ./vars
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a client certificate for 36500 days:
subject=
commonName = client1
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes # Digite yes
Using configuration from /etc/openvpn/easy-rsa/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key: # digite a palavra-chave criada no servidor durante a execução do comando ./easyrsa build-ca
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'homer'
Certificate is to be certified until Sep 19 19:35:39 2116 GMT (36500 days)
Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/easyrsa3/pki/issued/client1.crt

Método 2

2 - Processo realizado no servidor, transferindo o certificado assinado para o cliente

Execute os comandos diretamente no servidor. Quando perguntado digite yes e a palavra-chave utilizada no servidor durante a execução do comando ./easyrsa build-ca.

# Shell

cd /etc/openvpn/easy-rsa/easyrsa3
./easyrsa gen-req client1
./easyrsa sign-req client client1 # Igual ao exemplo acima "Assinando a requisição no servidor"

Configurando o cliente

Os seguintes arquivos gerados devem ser copiados para o cliente nas pastas indicadas abaixo:

  • /etc/openvpn/certs/ca.crt do servidor para /etc/openvpn/certs/ no cliente
  • /etc/openvpn/easy-rsa/easyrsa3/pki/issued/client1.crt do servidor para /etc/openvpn/certs/ no cliente
  • /etc/openvpn/easy-rsa/easyrsa3/pki/issued/client1.key do servidor ou do cliente, dependendo do método escolhido(1 ou 2) para gerar e assinar a requisição, copie para /etc/openvpn/keys/ no cliente
  • /etc/openvpn/keys/ta.key do servidor para /etc/openvpn/keys/ no cliente

Este tutorial mostra como configurar o servidor. A localização dos arquivos pode variar caso você tenha utilizado outro tutorial para configurar o servidor.

Abaixo a configuração do arquivo client.conf que deve ser criado na pasta /etc/openvpn/ do cliente. Edite as informações conforme necessidade.

/etc/openvpn/client.conf

#######################################################
# Exemplo de configuração OpenVPN 2.0 para o cliente  #
#######################################################
client # Define que é a configuração do cliente
dev tun # Mesma configuração do servidor
proto tcp # Mesma configuração do servidor
remote x.x.x.x 6000 # IP e porta do seridor

# Continua indefinidamente tentando resolver o hostname do servidor, util em computadores que não estão constantemente conectadas a internet
resolv-retry infinite

# A maioria dos clientes não precisa se ligar a uma porta local
nobind

# Reduz os privilegios do daemon do openvpn depois da inicialização
user nobody
group nobody

# As opções persist irão tentar evitar acessar certos recursos no restart que podem não estar acessíveis devido a redução de privilégios
persist-key
persist-tun

remote-cert-tls server

# Caminho das chaves e certificados
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/homer.crt
key /etc/openvpn/keys/homer.key
tls-auth /etc/openvpn/keys/ta.key 1

# Define a criptografia e a autenticação, deve ser a mesma configuração do servidor
cipher          AES-256-CBC
auth            sha1

# Habilita compressão no link vpn
comp-lzo

# nível de detalhes do log
verb 3

Testando a VPN no cliente

# Shell

/usr/sbin/openvpn /etc/openvpn/client.conf

Digite a palavra-chave criada durante a execução do comando ./easyrsa gen-req client1 para iniciar a VPN. Se tudo estiver certo a VPN já estará conectada, faça o teste pingando o IP do servidor. Se ocorrer algum erro não será solicitada a palavra-chave e as mensagens serão exibidas na tela e o comando encerrado.

Para que não seja solicitada a palavra-chave todas as vezes que iniciar a VPN, você pode digitá-la em um arquivo. Por exemplo, crie o arquivo /root/password.ovpn e digite a palavra-chave dentro dele. Restrinja o acesso por segurança com o comando:

# Shell

chmod 600 /root/password.ovpn

Edite o arquivo /etc/openvpn/client.conf adicionando as linhas abaixo para que ele use este arquivo criado:

/etc/openvpn/client.conf

askpass /root/password.ovpn
auth-nocache

Ao iniciar novamente a VPN não será solicitada a palavra-chave.