Instalando e Usando EasyRSA para Criar Autoridade Certificadora(AC) e Emitir Certificados Autoassinados

 

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.

Sempre usamos sudo para termos autorização na execução dos comandos. Temos um artigo falando a respeito, clique aqui.

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.

  1. 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
  2. Acesse o link: https://github.com/OpenVPN/easy-rsa
  3. 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”.
  4. 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
  5. 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
  6. 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 clientnome_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

 

 

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

One Comment to “Instalando e Usando EasyRSA para Criar Autoridade Certificadora(AC) e Emitir Certificados Autoassinados”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *