Como posso usar o Let's Encrypt (letsencrypt.org) como um provedor de certificado SSL gratuito?

5

Tenho alguns sites em execução com um certificado gratuito do StartSSL ( CJSHayward.com , JobhuntTracker.com ) e o Firefox rejeita o StartSSL e exibe uma página de erro informando que meu servidor não está configurado corretamente (IIRC) devido à cadeia de certificados. Pedi ajuda e confirmei que meu VirtualHost (disponível a pedido) era para a cadeia de certificados e eu tinha o certificado intermediário instalado corretamente. Os sites são exibidos sem erros que eu conheço no Chrome, Safari, Edge ou Opera.

Após algumas pesquisas, Vamos criptografar! parecia uma oferta atraente, e em pouco tempo eu tinha (AFAICT) uma chave privada e uma certificado para cada domínio em / etc / apache2 / sites-enabled, menos claro, quaisquer domínios que não são mais meus. Eu pensei em fazer uma avaliação e fazer uma conexão HTTPS com um site agora disponível apenas em HTTP: JSH.name . Eu mudei o "Vamos Criptografar!" certificado e chave privada para o meu diretório SSL e adicionado:

<VirtualHost *:443>
        ServerAdmin [email protected]
        DocumentRoot /home/jonathan/stornge
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/0000_csr-letsencrypt.pem
        SSLCertificateKeyFile /etc/apache2/ssl/0000_key-letsencrypt.pem
        ServerName jsh.name
        ServerAlias www.jsh.name
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
        CustomLog /home/jonathan/logs/stornge.com combined
        <Directory /home/jonathan/stornge/>
            Options ExecCGI Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
        </Directory>
</VirtualHost>

Depois, reiniciei para ver meu trabalho e todas as solicitações HTTP ou HTTPS que eu fiz simplesmente penduraram. Isso incluiu dois domínios em HTTPS com meu certificado StartSSL e o domínio que deveria estar disponível recentemente em HTTPS acessado via HTTP e HTTPS. Eu comentei o VirtualHost e devolvi o Apache, e toda a funcionalidade antiga estava de volta em funcionamento.

Eu usei Let's "Encrypt!" corretamente? Eu sou um pouco suspeito como configuração SSL existente tem chaves privadas com uma extensão de .key, uma extensão de certificado de .crt e um arquivo de cadeia de certificados com extensão .pem.

Eu tentei novamente após verificar o diretório SSL e descobrir que o 0000_csr.letsencrypt.pem era o modo 644; Eu mudei todos os arquivos desse diretório para o modo 600. Quando eu tentei um momento atrás, eu tive uma repetição do comportamento antigo: o site trava em todos os pedidos e, além disso, um apachectl restart recebe uma declaração (eu esqueço o exato texto) que o httpd não está em execução e o computador está tentando iniciá-lo.

Como posso obter certificações livres para "Let's Encrypt" ou alguma outra ferramenta que não tenha alienado o Firefox?

Um apachectl -v dá:

Server version: Apache/2.4.10 (Debian)
Server built:   Nov 28 2015 14:05:48

Um uname -a dá:

Linux www 4.4.0-x86_64-linode63 #2 SMP Tue Jan 19 12:43:53 EST 2016 x86_64 GNU/Linux

- ATUALIZAÇÃO -

Conteúdo excluído, 0000_key-letsencrypt.pem é limitado por:

-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----

Um achado na hierarquia de diretórios gera:

root@www:/etc/letsencrypt# find 'pwd' -print
/etc/letsencrypt
/etc/letsencrypt/keys
/etc/letsencrypt/keys/0000_key-letsencrypt.pem
/etc/letsencrypt/accounts
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/private_key.json
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/meta.json
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/regr.json
/etc/letsencrypt/renewal
/etc/letsencrypt/options-ssl-apache.conf
/etc/letsencrypt/csr
/etc/letsencrypt/csr/0000_csr-letsencrypt.pem

O diretório / home / jonathan / stornge e seu conteúdo são legíveis e executáveis em todo o mundo, onde isso faria a diferença.

- UPDATE--

Adicionando algo substantivo aqui:

O arquivo do Apache tem dois VirtualHosts, um para servir o link e um para redirecionar as solicitações de link para o link . O arquivo .conf que hospeda ambos os VirtualHosts é:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName orthodoxchurchfathers.com
    #ServerAlias www.orthodoxchurchfathers.com fathers.jonathanscorner.com

DocumentRoot /home/cjsh/fathers/document_root
&lt;Directory />
    Options FollowSymLinks
    AllowOverride None
&lt;/Directory>
&lt;Directory /home/cjsh/fathers>
    Options ExecCGI FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
&lt;/Directory>

DirectoryIndex index.cgi index.html

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
&lt;Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
&lt;/Directory>

< / VirtualHost >

&lt;VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.orthodoxchurchfathers.com
ServerAlias fathers.jonathanscorner.com
DocumentRoot /home/cjsh/oldmirror
RewriteEngine On
RewriteRule ^(.*)$ http://orthodoxchurchfathers.com$1 [R=301,L]
&lt;/VirtualHost></pre></code>

Quando tento executá-lo e solicito o orthodoxchurchfathers.com sozinho, recebo:

   ┌───────────────────────────────────────────────── ─────────────────────┐    │ Não foi possível encontrar um vhost com um ServerName ou Endereço de │    │ orthodoxchurchfathers.com. │    │ Qual host virtual você gostaria de escolher? │    │ (nota: arquivos conf com vários vhosts ainda não são suportados) │    │ ┌──────────────────────────────────────────────── ──────────────────┐ │    00 │1 008-stornge.conf | Nomes Múltiplos | │ │    │ │2 014-paraskeva.conf | paraskeva.jonathansco | │ │    0 │3 036-unixytalk.conf | unixtalk.jsh.name | │ │    0 │4 038-proxy.conf | Nomes Múltiplos | │ │    0 │5 027-anna.conf | Nomes Múltiplos | │ │    0 │6 044-jobhunt-tracker.creation.c | Nomes Múltiplos | │ │    0 │7 049-jsh.conf | Nomes Múltiplos | │ │    00 │8 001-steampunk.conf | | │ │    00 │9 006-blajeny.conf | Nomes Múltiplos | │ │    │ │10 032-videos.conf | Nomes Múltiplos | d│ │    │ └──── ↓ (+) ──────────────────────────────────────── ──────────30% ─────┘ │    ├───────────────────────────────────────────────── ─────────────────────┤    │ │    └───────────────────────────────────────────────── ─────────────────────┘

O comando que eu usei estava com ./letsencrypt-auto --debug certonly.

    
por Jonathan Hayward 21.03.2016 / 18:32

3 respostas

3

Eu escrevi um par de how-tos para executar o comando Let's Encrypt SSL certs no CentOS: configuração inicial & cronning .

E meu por domínio (eu uso a convenção de nomenclatura de arquivos de z-<[sub-]domain-tld>.conf ) Os arquivos de configuração do Apache são assim:

<VirtualHost *:80>
ServerName domain.tld
Redirect permanent / https://domain.tld/
</VirtualHost>

<VirtualHost *:443>
    SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/fullchain.pem
    DocumentRoot /var/www/domain
    ServerName domain.tld
    ErrorLog logs/domain-error_log
    CustomLog logs/domain-access_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    ServerAdmin [email protected]

    SSLEngine on

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

    <Directory "/var/www/domain">
         Options All +Indexes +FollowSymLinks
         AllowOverride All
         Order allow,deny
         Allow from all
    </Directory>

</VirtualHost>

E meu ssl.conf é assim:

#SSL options for all sites
Listen 443
SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
Mutex sysvsem default
SSLRandomSeed startup file:/dev/urandom  1024
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLCompression          off
SSLHonorCipherOrder     on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

Usando o recurso Vamos criptografar para obter certificados SSL (e colocar seu site em uma classificação "A" de SSL Labs ) é bastante direto - depois de passar algumas das arcana das configurações do Apache e argumentos da linha de comando do LE.

    
por 28.03.2016 / 21:48
1

Eu descobri que o cliente ACME funciona bem, é fácil de configurar e continuar, é atualizado regularmente e é fácil para atualizar, e funciona muito bem no Amazon Linux. Eu escrevi um tutorial sobre o qual você pode encontrar aqui .

Comece por baixar o ACME e configurá-lo

https://github.com/hlandau/acme.git
cp ./acmetool /usr/local/bin
/usr/local/bin/acmetool quickstart

Solicite um certificado

./acmetool want example.com www.example.com

É assim que eu configuro o diretório do desafio - é aqui que o Let's Encrypt se conecta ao seu servidor para validar

mkdir -p /var/www/acme-challenge/.well-known/acme-challenge
chmod -R user:www-data /var/www/acme-challenge/*
find /var/www/acme-challenge/ -type d -exec chmod 755 {} \;
vi /var/www/acme-challenge/.well-known/acme-challenge/text.html   (add "hello world!" or similar)

Há mais detalhes e comentários no site vinculado acima, e o autor e a comunidade são úteis.

    
por 10.09.2016 / 00:16
0

Eu tive sucesso usando o Certbot da EFF no modo raiz da Web (porque a ideia de um processo automatizado parando o servidor da Web, mesmo se apenas brevemente, durante a renovação do certificado me assusta).

Primeiro, instale o Certbot. Se você está no Debian Jessie (que é atual no momento da minha escrita), primeiro adicione o repositório jessie-backports , então

$ sudo apt-get install python-certbot-apache -t jessie-backports

Isso trará um punhado de pacotes além do próprio certbot.

Em seguida, para criar um certificado no modo webroot , execute algo como

$ sudo certbot certonly --webroot -w /srv/www/www.example.net/htdocs -d www.example.net

Opcionalmente, você pode adicionar --register-unsafely-without-email e --rsa-key-size X se quiser um tamanho de módulo diferente do padrão (que atualmente é 2048 bits). -d fqdn.example.com pode ser repetido um número arbitrário de vezes, assim como -w ; cada -w inicia um novo conjunto de domínios atendidos em um diretório, domínios nomeados por -d . Vamos criptografar não emite certificados curinga (isso é mencionado em seu FAQ) e, aparentemente, também não certificados para nomes de domínio Punycode.

O usuário que certbot é executado como necessidades, no mínimo e por padrão, grava o acesso a vários locais em /etc/letsencrypt . É provavelmente mais fácil apenas executá-lo como root. Ele criará um arquivo em .well-known/acme-challenge no diretório raiz da Web fornecido ( -w ), terá o sistema remoto verifique se ele está acessível sobre os nomes de domínio especificados sobre HTTP , e se tudo fizer check-out, criaremos vários arquivos PEM em /etc/letsencrypt/archive/www.example.net mais um conjunto correspondente de links simbólicos em /etc/letsencrypt/live/www.example.net e imprima uma mensagem de sucesso amigável.

Se tudo fizer check-out, o que você precisa fazer é configurar o servidor da Web para usar o certificado encontrado no subdiretório de nome de host de /etc/letsencrypt/live para HTTPS do domínio em questão. O mínimo absoluto para isso para o Apache é algo semelhante a:

<VirtualHost *:443>
        ServerName www.example.net
        SSLEngine on
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.net/privkey.pem
        SSLCertificateFile /etc/letsencrypt/live/www.example.net/cert.pem
        SSLCertificateChainFile /etc/letsencrypt/live/www.example.net/chain.pem
</VirtualHost>

Adicione outras diretivas conforme desejado, verifique com apache2ctl -S e apache2ctl configtest se todas as verificações e ative o host virtual HTTPS com apache2ctl graceful .

Não se esqueça de renovar o certificado regularmente; atualmente, os certificados Vamos Criptografar expiram após 90 dias. O pacote Debian vem com uma tarefa cron em /etc/cron.d/certbot e um serviço systemd em /lib/systemd/system/certbot.service que cuida disso, ou você pode executar certbot renew manualmente. Lembre-se de apache2ctl graceful para começar a usar o certificado recém-emitido; talvez você queira ajustar o trabalho cron ou o serviço systemd para fazer isso automaticamente. Para carregar automaticamente certificados renovados para o Apache no Debian Jessie, considere atualizar /lib/systemd/system/certbot.service para adicionar à seção [Service] (nota: o pedido é importante):

ExecStartPost=/usr/sbin/apache2ctl configtest
ExecStartPost=/usr/sbin/apache2ctl graceful

Ao fazer isso, o certificado renovado será carregado automaticamente se os arquivos de configuração do Apache passar configtest e listar o Certbot como uma unidade com falha se o configtest ou graceful falhar.

    
por 08.09.2016 / 23:59