SSL_ERROR_RX_RECORD_TOO_LONG certbot

У меня есть следующие настройки:

  • Apache 2.4
  • Ubuntu 16.04 LTS
  • letsencrypt / certbot

Теперь, как только я включаю следующий .conf на сервере по умолчанию, все мои настроенные домены верхнего уровня получают ошибку SSL_ERROR_RX_RECORD_TOO_LONG. Если я отключу эту конфигурацию, все будет работать так, как ожидалось.

Я уверен, что из-за этого apache прослушивает правильные порты, правильные IP-адреса, и letsencrypt / certbot настроен правильно.

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

Изменение это на

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

не решило проблему.

apache2ctl -S 

показывает ожидаемые результаты, 001-default-ssl.conf и 001-default.conf являются значениями по умолчанию для порта 80 и порта 443.

openssl s_client -connect workingdomain.tld:443

печатает:

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)
---

Опять же, как только я отключу этот конфиг, каждый домен, настроенный с помощью certbot / letsencrypt, работает должным образом.

Я этого не понимаю, поскольку я в основном блокирую только сервер по умолчанию, все остальные мои домены не должны зависеть от этого параметра.

2
задан 13 January 2018 в 16:15
1 ответ

Вы должны указать свой SSL-сертификат -

<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com
    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>

Если вы хотите обслуживать несколько доменов, вы все равно можете это сделать, по крайней мере, для современных браузеров, которые понимают SNI и т. Д.

Во-первых. , получите отдельные сертификаты letsencrypt для каждого домена. Если у вас несколько имен хостов (например, www.example.com и example.com ), они могут использовать общий доступ, если фактический домен остается тем же.

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

Это будет предоставить вам 2 набора сертификатов в каталогах / etc / letsencrypt / live / DOMAIN / .

При создании конфигураций виртуального хоста вместо указания _default_: 443 используйте фактический IP-адрес хоста и указывает на соответствующие файлы сертификатов.

<VirtualHost 10.0.1.2:443>
    ServerName example1.com
    ServerAlias www.example1.com
    ServerAdmin webmaster@example1.com
    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 webmaster@example2.com
    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>

Я не собираю информацию о формах и т. д. на своих сайтах, но я хочу, чтобы все работало по протоколу HTTPS, поэтому я настроил конфигурации vhost для перенаправления не-HTTPS запросы к стороне HTTPS с неименованным переадресацией на 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>
1
ответ дан 3 December 2019 в 12:33

Теги

Похожие вопросы