Um certificado auto-assinado é um certificado digital NÃO assinado por uma autoridade certificadora (CA) pública ou privada reconhecida. Em vez disso, ele é assinado pela mesma entidade que usa o certificado, também conhecida como você mesmo! =]. Certificados auto-assinado são comumente usados para testes ou para proteger a comunicação dentro de uma rede privada.
Criar um certificado auto-assinado é uma tarefa relativamente simples e pode ser feito usando o OpenSSL, uma ferramenta/biblioteca criptográfica de código aberto amplamente utilizada.
Aqui vai um guia simples sobre como criar um certificado auto-assinado. Vamos seguir os seguinte passos:
- Instalar as ferramentas necessárias
- Criando sua própria CA
- Criar uma chave privada para gerar o CSR
- Criar um certificado com o CSR, CA e a chave privada
- Usando o certificado autoassinado
Estou usando o Ubuntu Linux 20.04 para gerar um certificado, mas os comandos devem ser parecidos para outras distribuições do Linux.
Se você não tiver o OpenSSL instalado, use o apt, yum, rpm, código fonte ou o que for para instalá-lo.
No Ubuntu e sistemas similares ao Debian, você instala com o seguinte comando:
sudo apt install openssl -y
Agora, crie um diretório para colocar seus arquivos que vamos gerar com o comando:
mkdir mycertificate && cd mycertificate
Antes de gerar um certificado, você precisará da sua própria CA (Autoridade Certificadora) para assiná-lo, como dito anteriormente. Use este comando para gerar a CA:
openssl req -x509 \
-sha256 -days 3560 \
-nodes \
-newkey rsa:2048 \
-subj "/CN=my.domain.com/C=BR/ST=Bahia/L=Salvador" \
-keyout CA.key -out CA.crt
Este comando gera um certificado CA e sua chave privada válidos por 10 anos. Você deve alterar o comando para atender às suas necessidades. Aqui estão os significados: CN (nome comum), C (nome do país), ST (nome do estado ou província) e L (localidade).
O próximo passo é gerar uma chave privada usando o seguinte comando:
openssl genrsa -out server.key 2048
Agora, criamos um CSR (Solicitação de Assinatura de Certificado). Mas para criar um CSR, precisamos escrever um arquivo de configuração:
cat > csr.conf <<EOF
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C = BR
ST = Bahia
L = Salvador
O = MyOrganization
OU = MyOrganization Unit
CN = my.domain.com
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = my.domain.com
DNS.2 = www.my.domain.com
IP.1 = 192.168.0.254
IP.2 = 192.168.0.253
EOF
Agora execute este comando para gerar o CSR:
openssl req -new \
-key server.key \
-config csr.conf \
-out server.csr
Isso criará um novo arquivo CSR chamado server.csr no diretório atual. Se você omitir a opção -config csr.conf, será solicitado que você insira algumas informações sobre o certificado, como o país, estado e nome da organização.
Você deve ter esses arquivos em seu diretório: CA.key, CA.crt, csr.conf, server.csr e server.key.
Agora vamos criar outro arquivo de configuração para o certificado final:
cat > cert.conf <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = my.domain.com
EOF
Para gerar o certificado, execute este comando:
openssl x509 -req \
-in server.csr \
-CA CA.crt -CAkey CA.key \
-CAcreateserial -out server.crt \
-days 3650 \
-sha256 -extfile cert.conf
O comando vai gerar um arquivo chamado server.crt que deve ser usado com a chave gerada anteriormente. A opção -days especifica o número de dias em que o certificado será válido.
Exemplo de uso com nginx:
server {
listen 443 ssl;
server_name my.domain.com www.my.domain.com;
ssl_certificate /path/to/mycertificate/server.crt;
ssl_certificate_key /path/to/mycertificate/server.key;
location / {
root /var/www/html/my.domain.com/;
index index.html;
}
}
Após gerar o certificado auto-assinado, você pode usá-lo para proteger a comunicação entre duas entidades. No entanto, vale a pena notar que navegadores da web ou sistemas operacionais não confiam em certificados auto-assinados por padrão. Isso significa que se você usar um certificado auto-assinado em um site público, os visitantes verão uma mensagem de aviso de segurança no navegador.
Se você quiser usar este certificado em um grupo de computadores da LAN, pode adicionar a CA à lista de confiança do sistema operacional.
No Ubuntu, você pode executar esses comandos:
cp CA.crt /usr/local/share/ca-certificates/my.ca.entity/CA.pem
sudo update-ca-certificates
Isso copiará a CA para /usr/local/share/ca-certificates/CA_FOLDER_NAME e criará links para a pasta CA de confiança com update-ca-certificates. Assim, na próxima vez que você navegar no site de exemplo, o chrome não vai reclamar de um certificado “não confiável”
Até mais!
