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.