Será usado dois servidores para esse laboratório:
- Server01: Com ip 192.168.0.40 e será nossa AC(Autoridade Certificadora)
- Server02: Com ip 192.168.0.41 e será o servidor que solicitará um certificado para a AC
Essas Etapas Serão Realizadas no Server01 que será nossa AC
easy-rsa é uma ferramenta de linha de comando(CLI) usado para gerenciar PKI CA(Infraestrutura de chave pública de Autoridade Certificadora ou, em inglês, Public Key Infrastructure Certificate Aduthority).
Clique aqui para saber o que é uma Autoridade Certificadora ou CA.
Em outros termos, falando de forma leiga, easy-rsa é uma ferramenta que possibilita a criação de uma AC Raiz(Autoridade Certificadora Raiz). Criada a AC podemos usá-la para emitir(criar) e revogar(anular) certificados.
Observação Importante
é recomendado que o Servidor que será nosso AC(Autoridade Certificadora) seja um servidor dedicado somente para isso e que quando não estiver em uso ele seja desligado. Do contrário, se um hacker tomar controle do nosso servidor AC ele terá controle sobre todos os certificados emitidos e poderá emitir novos.
Baixando Easy-rsa
O easy-rsa não é instalado. Apenas é necessário baixarmos ele e para usá-lo basta executarmos os scripts dentro da pasta.
- No terminal ou usando uma interface gráfica qualquer, crie uma pasta onde ficará nossa AC. Irei criar usando terminal em /autoridadeCertificadora
elder@server01:~$ sudo mkdir /autoridadeCertificadora
- Acesse o link: https://github.com/OpenVPN/easy-rsa
- Com a página aberta, clique no botão verde escrito Code, clique com o direito com mouse em “Download ZIP” e escolhe “Copiar Endereço do Link”.
- acesse a pasta criada acima e use wget para baixar o arquivo. Use sudo para obter autorização de execução do comando.
elder@server01:~$ cd /autoridadeCertificadora
elder@server01:/autoridadeCertificadora$ sudo wget https://github.com/OpenVPN/easy-rsa/archive/refs/heads/master.zip
- O arquivo será baixado com o nome master.zip. Vamos extraí-lo executando “unzip master.zip”. Será extraída a pasta easy-rsa-master.
elder@server01:/autoridadeCertificadora$ sudo unzip master.zip
elder@server01:/autoridadeCertificadora$ ls easy-rsa-master master.zip
- Acesse a pasta usando “cd cd easy-rsa-master“.
elder@server01:/autoridadeCertificadora$ cd easy-rsa-master
A partir desse momento iremos executar os comandos sempre estando dentro dessa pasta.
Liste o conteúdo da pasta easy-rsa-master. Dentro da pasta easyrsa3 Abaixo está o script(easyrsa) que usaremos.
elder@server01:/autoridadeCertificadora/easy-rsa-master$ ls -m build, ChangeLog, COPYING.md, distro, doc, easyrsa3, KNOWN_ISSUES, Licensing, op_test.orig, op_test.sh, README.md, README.quickstart.md, release-keys, wop_test.bat, wop_test.sh
Veja o conteúdo da pasta easyrsa:
elder@server01:/autoridadeCertificadora/easy-rsa-master$ ls -1 easyrsa3/ easyrsa openssl-easyrsa.cnf vars.example x509-types
Alterando As Informações do Arquivo vars
O Arquivo vars tem valores como cidade, estado, organização.. que serão colocados automaticamente em nossos certificados que emitiremos.
Nesse momento não temos o arquivo vars, mas temos o arquivo de exemplo: vars.example dentro de easyrsa3. Vamos copiá-lo usando “cp ./easyrsa3/vars.example ./easyrsa3/vars”.
Obs.: Abaixo sempre constumo usar “./” que significa a pasta atual(/autoridadeCertificadora/easy-rsa-master). Poderia não usar e daria na mesma. Porém usar o “./” evita erros que estão fora do escopo desse artigo.
elder@server01:/autoridadeCertificadora/easy-rsa-master$ sudo cp ./easyrsa3/vars.example ./easyrsa3/vars
Com seu editor de texto predileto altere o conteúdo das variáveis do arquivo vars. Usei o editor vim.
elder@server01:/autoridadeCertificadora/easy-rsa-master$ sudo vim ./easyrsa3/vars
Role para baixo a página até encontrar as variáveis abaixo. Retire o comentário delas removendo o # no início de cada linha.
Estava assim:
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit"
Ficou assim:
set_var EASYRSA_REQ_COUNTRY "BR" set_var EASYRSA_REQ_PROVINCE "Sao Paulo" set_var EASYRSA_REQ_CITY "Sao Paulo" set_var EASYRSA_REQ_ORG "Lab Local AC" set_var EASYRSA_REQ_EMAIL "elder@lab.local" set_var EASYRSA_REQ_OU "empresa100 Lab Local"
Iniciando Nossa PKI(Infraestrutura de Chave Pública)
Lembre sempre de usar sudo para obter autorização de execução dos comandos. Temos um artigo sobre o sudo. Clique aqui.
Acesse a pasta easersa3 com “cd easyrsa3”
elder@server01:/autoridadeCertificadora/easy-rsa-master$ cd ./easyrsa3
Execute o comando “easyrsa init-pki”
elder@server01:/autoridadeCertificadora/easy-rsa-master/easyrsa3$ sudo ./easyrsa init-pki
elder@server01:/autoridadeCertificadora/easy-rsa-master/easyrsa3$ sudo ./easyrsa init-pki Note: using Easy-RSA configuration from: /autoridadeCertificadora/easy-rsa-master/easyrsa3/vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki
Na primeira linha alaranjada vimos que foi usado o arquivo vars.
Na segunda linha azul nos é avisado que podemos criar nossa AC ou requisições.
Na terceira linha esverdeada podemos ver que foi criada a pasta /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki
Criando Nossa AC
Acima criamos nossa infraestrutura. Agora estamos prontos para criar nossa AC. Em inglês AC é CA; são a mesma coisa.
Execute o comando “easyrsa build-ca”. Build significa construir ou criar.
elder@server01:/autoridadeCertificadora/easy-rsa-master/easyrsa3$ sudo ./easyrsa build-ca Note: using Easy-RSA configuration from: /autoridadeCertificadora/easy-rsa-master/easyrsa3/vars Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: Generating RSA private key, 2048 bit long modulus (2 primes) ......+++++ .................+++++ e is 65537 (0x010001) 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) [Easy-RSA CA]:server01 CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/ca.crt
Há algumas perguntas acima. Alaranjei elas. Criamos uma senha e digitei o nome do meu computador. No caso server01 mas poderia ser qualquer nome.
A senha foi digitada para criação da nossa chave. Essa chave deve permanecer bem escondida e fora do alcance de qualquer pessoa não autorizada. Inclusive o servidor AC deve dicar desligado para proteger essa chave. A chave fica em:
autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/private/ca.key
Foi criado o certificado(ca.crt) dentro da pasta pki criada logo acima
/autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/ca.crt
Esse certificado(ca.crt) não precisa estar escondido, pode ser mostrado ou publicado à vontade. Na verdade ele será usado por todos os usuários que tiverem um certificado emitido por nossa AC. Os certificados emitidos para nossos usuários estará vinculado à esse certificado.
Pronto, estamos preparados para recebermos solicitações de nossos clientes pedindo a emissão de certificado para eles. Para isso, em seus computadores, nossos clientes criam uma chave privada(arquivo.key) e certificado de solicitação(arquivo.req).
Essas Etapas Serão Realizadas no Server02 que será o Cliente Solicitando um Certificado
Poderíamos fazer todas essas etapas no próprio server01, mas vamos iniciar da forma correta e usar o server02.
Aqui estamos acessados no server02. Iremos gerar uma chave(arquivo.key) e uma solicitação de assinatura de certificado(arquivo.req). A solicitação de assinatura de certificado é conhecido como CSR(Certificate Signing Request).
A chave(arquivo.key) é secreto e nem mesmo para AC ele deve ser enviado. Enviamos para a AC somente o arquivo de requisição de certificado(arquivo.req).
Para gerar a chave e a requisição poderíamos usar o openssl, mas iremos aproveitar o momento e usar o easyrsa mesmo.
Seguindo os passos acima, baixe o easyrsa dentro de uma pasta com um nome apropriado.
Serei rápido já que são os mesmos passos que fizemos acima.
elder@server02:~$ sudo mkdir /minhasChaves
elder@server02:~$ cd /minhasChaves/
elder@server02:/minhasChaves$ sudo wget https://github.com/OpenVPN/easy-rsa/archive/refs/heads/master.zip
elder@server02:/minhasChaves$ sudo unzip master.zip
elder@server02:/minhasChaves$ cd ./easy-rsa-master/easyrsa3/
Execute o script “./easyrsa init-pki”
elder@server02:/minhasChaves/easy-rsa-master/easyrsa3$ sudo ./easyrsa init-pki init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /minhasChaves/easy-rsa-master/easyrsa3/pki
Agora iremos criar nossa chave. Usei a opção nopass para não precisar definir uma senha nesse tutorial. Abaixo em laranja estão a chave(server02.key) e o arquivo(server02.req) para solicitarmos ou requerermos um certificado à nossa AC.
elder@server02:/minhasChaves/easy-rsa-master/easyrsa3$ sudo ./easyrsa gen-req server02 nopass Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 Generating a RSA private key ...........+++++ .................................+++++ writing new private key to '/minhasChaves/easy-rsa-master/easyrsa3/pki/easy-rsa-862.RcYM7y/tmp.2D9qVi' ----- 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) [server02]: Keypair and certificate request completed. Your files are: req: /minhasChaves/easy-rsa-master/easyrsa3/pki/reqs/server02.req key: /minhasChaves/easy-rsa-master/easyrsa3/pki/private/server02.key
Leve o arquivo minhasChaves/easy-rsa-master/easyrsa3/pki/reqs/server02.req para o server01, nossa AC. Escolha seu modo preferido para levar esse arquivo até lá. Pode ser usando pen drive ou via rede segura.
O ip do meu server01 é 192.168.0.40 e o nome do meu usuário lá é elder. Irei usar scp para transferência. Irei transferir para pasta /tmp, pois nela temos permissão de escrita.
Vamos transferir usando o comando “scp ./pki/reqs/server02.req elder@192.168.0.40:/tmp/
“
elder@server02:/minhasChaves/easy-rsa-master/easyrsa3$ sudo scp ./pki/reqs/server02.req elder@192.168.0.40:/tmp/
Essas Etapas Serão Realizadas no Server01 Onde Emitiremos o Certificado
Novamente acessado o server01, nossa AC, vamos importar o arquivo de requisição de certificado.
Antes, acesse nossa pasta onde está o script easyrsa
elder@server01:~$ cd /autoridadeCertificadora/easy-rsa-master/easyrsa3/
Importe a requisição/solicitação que está dentro de /tmp usando “easyrsa import-req arquivo.req nome_comum”. nome_comum pode ser qualquer nome, daremos o nome de server02
Após executar o comando abaixo será criado um arquivo com o nome de server02.req dentro de /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/reqs/server02.req
elder@server01:/autoridadeCertificadora/easy-rsa-master/easyrsa3$ sudo ./easyrsa import-req /tmp/server02.req server02 Note: using Easy-RSA configuration from: /autoridadeCertificadora/easy-rsa-master/easyrsa3/vars Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 The request has been successfully imported with a short name of: server02 You may now use this name to perform signing operations on this request.
Importamos a requisição. Agora iremos assinar. Usaremos o comando “easyrsa sing-req tipo_requisicao nome_comum”. Onde sign significa assinar, tipo_requisicao pode ser server ou client e nome_comum pode ser qualquer nome que acharmos apropriado, nesse caso chamaremos de server02.
elder@server01:/autoridadeCertificadora/easy-rsa-master/easyrsa3$ sudo ./easyrsa sign-req server server02 Note: using Easy-RSA configuration from: /autoridadeCertificadora/easy-rsa-master/easyrsa3/vars Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 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 server certificate for 825 days: subject= commonName = server02 Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/easy-rsa-1961.NTngON/tmp.kPf3xL Enter pass phrase for /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server02' Certificate is to be certified until Nov 27 17:33:15 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated Certificate created at: /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/issued/server02.crt
Acima,
- digitei yes para confirmar os detalhes, que o nome comum(commonName) é server02.
- Também criei uma senha na segunda linha alaranjada.
- E nosso certificado assindo está dentro de /autoridadeCertificadora/easy-rsa-master/easyrsa3/pki/issued/server02.crt
Da sua maneira preferida, leve o certificado para o server02. Pode usar pen drive ou outro meio. Lembrando que esse certificado não é algo sensível ou secreto, então não exige tanto cuidado no transporte. Usarei o velho scp.
O ip do meu server02 é 192.168.0.41, com usuário elder. Colocarei dentro de /tmp em server02 jé que se trata de uma pasta onde todos os usuários possuem permissão de acesso.
elder@server01:/autoridadeCertificadora/easy-rsa-master/easyrsa3$ sudo scp ./pki/issued/server02.crt elder@192.168.0.41:/tmp/
O certificado da autoridade certificadora também é para ser levado para nosso server02. Vamos fazer da mesma forma acima.
elder@server01:/autoridadeCertificadora/easy-rsa-master/easyrsa3$ sudo scp ./pki/ca.crt elder@192.168.0.41:/tmp/
Essas Etapas Serão Realizadas no Server02
No server02 os arquivos estão dentro de /tmp. Transfira eles para dentro de uma pasta qualquer apropriada.
elder@server02:/minhasChaves/easy-rsa-master/easyrsa3$ ls /tmp/ ca.crt server02.crt
Conclusão
Criamos nossa AC(Autoridade Certificadora) e assinamos um certificado do tipo server para nosso servidor que se chama server02. Podemos usar esse certificado para diversos propósitos, desde um uso em vpn, para conexão segura https em nosso site ou para assinar documentos. Obviamente que se trata de um certificado autoassinado e isso quer dizer que não tem valor jurídico por não ser assinado por uma AC reconhecida nacional ou internacionalmente. Mas a segurança é a mesma, poiis dados podem ser criptografados.
Veja esses links para mais referências:
Fonte: github
One Comment to “Instalando e Usando EasyRSA para Criar Autoridade Certificadora(AC) e Emitir Certificados Autoassinados”