O LetsEncrypt mudou o mundo dos certificados SSL quando sua oferta de certificados SSL gratuitos e de curta duração permitiu que um grande número de pessoas e empresas protegessem seus aplicativos da web sem nenhum custo.. Com este serviço, a infraestrutura necessária deve existir e, para esse fim, surgiu um grande número de aplicativos que atendem às necessidades de emissão de SSL.
Um dos utilitários mais comuns é o de CertBot
, isso pode funcionar bem, mas outro aplicativo de código aberto habilitado é acme.sh
. Este é um cliente ACME (o protocolo usado por LetsEncrypt para emitir certificados SSL) absolutamente baseado em shell. Com uma série de recursos avançados integrados, este cliente permite configurações complexas.
A maneira mais fácil de instalar [acme.sh](<http://acme.sh>)
é o seguinte, que baixa e executa o script a partir daqui, https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh
.
curl <https://get.acme.sh> | sh
A fonte desse site está localizada aqui, se você quiser verificar o que o script real está fazendo
A instalação irá baixar e mover os arquivos para ~/.acme.sh
e instale um alias em seu ~/.bashrc
procedimentos. Ao mesmo tempo, um cron job será instalado se habilitado.
Primeiros passos
Muito de como você o usa [acme.sh](<http://acme.sh>)
depende do método e da aplicação para a qual você solicita o certificado. Acme.sh oferece muitos métodos diferentes para solicitar um certificado, O que:
Neste post, Vou demonstrar duas maneiras diferentes de solicitar um certificado. Incluo configurações de servidor web para NGINX e Apache, que usa o método Webroot. O método do modo DNS usa um arquivo de configuração para criar registros CNAME que são usados para verificar o domínio, em vez de criar um arquivo no sistema de arquivos.
Configuração do servidor web
Configurando NGINX LetsEncrypt
O NGINX facilita a criação de uma configuração compartilhada para usar ao usar o webroot
método de solicitar um certificado.
letsencrypt.conf
Recomenda-se criar uma configuração separada que pode ser incluída conforme necessário nas configurações de vhost, Então: include /etc/nginx/letsencrypt.conf
# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel
# other regex checks, because in our other config files have regex rule that denies access to files with dotted names.
location ^~ /.well-known/acme-challenge/ {
# Set correct content type. According to this:
# <https://community.letsencrypt.org/t/using-the-webroot-domain-verification-method/1445/29>
# Current specification requires "text/plain" or no content header at all.
# It seems that "text/plain" is a safe option.
default_type "text/plain";
}
# Direct access returns a 404
location = /.well-known/acme-challenge/ {
return 404;
}
apache
Da mesma forma que NGINX, Apache pode criar um arquivo de configuração separado. Abaixo está um exemplo desta configuração.
/etc/apache2/conf-available/letsencrypt.conf
Para este caso, A configuração do Apache é específica do host virtual devido à necessidade de incluir a localização do disco. O próximo é um local comum, mas pode ser diferente com base na sua configuração específica.
Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
<Directory "/var/www/html/">
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
Configuração DNS
Neste post, Estou demonstrando o modo DNS usando Cloudflare, uma vez que oferece mudanças de DNS extremamente rápidas e funciona excepcionalmente bem com este método.
Acme.sh usa duas variáveis ambientais para o dns_cf
método: CF_Key
e CF_Email
. Para incluir isso em seu ambiente na inicialização, você pode incluir esta configuração em seu .bashrc
procedimentos.
Pode não ser óbvio, mas há um espaço antes de cada comando de exportação, o que geralmente garante que eles não serão lidos na história, se por acaso.
export CF_Key="#########..."
export CF_Email="[email protected]"
Emitir certificado através do método Webroot
Ao emitir o seguinte comando, dois domínios são definidos em um único certificado. Isso é para garantir que, quando qualquer um dos nomes de host for solicitado (e muitas vezes é redirecionado para canônico), a solicitação permanecerá protegida por uma conexão segura.
acme.sh --issue -d example.com -d www.example.com -w /var/www/html
Os certificados emitidos estão em /.acme.sh/acme.sh/{domain_name}
Emitir certificado por meio do método DNS
Ao usar o método de transmissão DNS, uma txt
O registro é criado por meio da API Cloudflare e LetsEncrypt verifica o domínio usando esse registro temporário. Este é um método mais limpo, desde não webroot
configuração necessária.
# Multiple Domains
acme.sh --issue --dns dns_cf -d example.com -d www.example.com
Os certificados emitidos estão em /.acme.sh/acme.sh/{domain_name}
Certificado renovável
Por padrão, Acme.sh, irá criar um cronjob
como a próxima entrada:
48 0 * * * "/home/user/.acme.sh/acme.sh" --cron --home "/home/user/.acme.sh" > /dev/null
Para forçar uma renovação, você pode emitir o seguinte comando, que usará o mesmo método de emissão usado originalmente:
acme.sh --renew -d example.com -d www.example.com
Apagar certificados
Se você não quiser mais renovar um certificado, é muito fácil de remover. Apesar disto, isso não remove o certificado do disco. Fazer isso, você deve navegar para ~/.acme.sh/
e exclua o diretório que contém os certificados.
acme.sh --remove -d example.com -d www.example.com
Isso torna possível limpar os certificados que estão configurados para renovação, que você pode verificar listando os certificados da seguinte forma:
acme.sh --list
conclusão
LetsEncrypt oferece um serviço excelente e fácil de usar para provisionar certificados SSL para uso em sites.. Criar um portal da web seguro é mais fácil do que nunca e usando o acme.sh cliente significa que você tem controle total sobre como isso acontece no seu servidor web.
Com alguns métodos diferentes para obter um certificado, incluindo métodos muito seguros, como um domínio delegado, possibilitar a recuperação correta dos certificados necessários.