У меня следующая установка:
Теперь, как только я включаю следующий .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, будет работать должным образом.
Я не понимаю этого, поскольку я в основном блокирую только сервер по умолчанию, все остальные мои домены не должны зависеть от этого параметра.
Вы должны указать свой сертификат 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/
каталоги.
Когда вы создаете свои конфигурации vhost, вместо того, чтобы указывать _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>