Como solicitar um certificado LetsEncrypt usando Acme

Conteúdo

Vamos criptografar

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.she instale um alias em seu ~/.bashrc procedimentos. Ao mesmo tempo, um cron job será instalado se habilitado.

Instalando Acme.shc

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.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.