SSL_ERROR_RX_RECORD_TOO_LONG certbot

2

Eu tenho a seguinte configuração:

  • Apache 2.4
  • Ubuntu 16.04 LTS
  • letsencrypt / certbot

Agora, assim que eu ativar o seguinte .conf no servidor padrão, todos os meus domínios de nível superior configurados receberão um erro SSL_ERROR_RX_RECORD_TOO_LONG. Se eu desabilitar essa configuração, tudo funcionará como esperado.

Devido a esse fato, tenho certeza, o apache ouve as portas corretas, os IPs corretos e o comando letsencrypt / certbot está configurado corretamente.

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
            Require all denied
    </Directory>
</VirtualHost>

Alterando isso para

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
            Require all granted
    </Directory>
</VirtualHost>

não resolveu o problema.

apache2ctl -S 

mostra os resultados esperados, 001-default-ssl.conf e 001-default.conf são os padrões da porta 80 e da porta 443.

openssl s_client -connect workingdomain.tld:443

impressões:

CONNECTED(00000003)
139991513372312:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1515852550
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

Novamente, assim que eu desabilitar essa configuração, todos os domínios configurados com certbot / letsencrypt funcionarão como esperado.

Eu não entendo isso, já que basicamente estou bloqueando apenas o servidor padrão, todos os meus outros domínios não devem ser afetados por essa configuração.

    
por Michael 13.01.2018 / 15:15

1 resposta

1

Você precisa apontar para o seu certificado SSL -

<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example.com
    <directory /var/www-example.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${APACHE_LOG_DIR}/ssl-example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ssl-example.com-access.log combined
</VirtualHost>

Se você deseja servir vários domínios, ainda é possível fazê-lo, pelo menos, para navegadores modernos que entendem o SNI / etc.

Primeiro, obtenha certificados letencrypt separados para cada domínio. Se você tiver vários nomes de host (ou seja, ambos www.example.com e example.com ), eles poderão compartilhar, desde que o domínio real seja o mesmo.

letsencrypt certonly -d example1.com -d www.example1.com -d mail.example1.com
letsencrypt certonly -d example2.com -d www.example2.com -d mail.example2.com

Isso lhe dará 2 conjuntos de certs, sob os diretórios /etc/letsencrypt/live/DOMAIN/ .

Ao criar suas configurações de vhost, em vez de especificar o _default_:443 , use o IP real do host e aponte para os arquivos de certificado apropriados.

<VirtualHost 10.0.1.2:443>
    ServerName example1.com
    ServerAlias www.example1.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example1.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example1.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example1.com
    <directory /var/www-example1.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${APACHE_LOG_DIR}/ssl-example1.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ssl-example1.com-access.log combined
</VirtualHost>
<VirtualHost 10.0.1.2:443>
    ServerName example2.com
    ServerAlias www.example2.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example2.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example2.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example2.com
    <directory /var/www-example2.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${APACHE_LOG_DIR}/ssl-example2.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ssl-example2.com-access.log combined
</VirtualHost>

Eu não coleto informações de formulário, etc. nos meus sites, mas eu quero que tudo execute HTTPS, então eu configuro configurações de vhost para redirecionar solicitações não HTTPS para o lado HTTPS, com um catch-all sem nome que redireciona para example1.com -

<VirtualHost *:80>
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example1.com/$1 [R,L]
</VirtualHost>
<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example1.com/$1 [R,L]
</VirtualHost>
<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example2.com/$1 [R,L]
</VirtualHost>
    
por 13.01.2018 / 17:59