Назад | Перейти на главную страницу

Certbot https не работает для example.com, только для www.example.com

[ОБНОВЛЕНИЕ] - Я разместил его не на том сайте, поэтому скопирую и вставлю эту тему в сообщество Unix / Linux. Так что удалите, пожалуйста, эту тему!

Я установил SSL-сертификат на свой веб-сервер и включил перенаправление всех HTTP-запросов на https. Пока это работает, когда я пытаюсь открыть www.example.com, но не с example.com. Для записи я изменил свой domain.com на example.com. Я проверил свой access_log и error.log и все они не показывают новых записей, когда я пытаюсь открыть example.com в браузере.

curl https://example.com

curl: (60) Issuer certificate is invalid.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

Когда я выполняю ту же команду curl с www.example.com, я попадаю на свой сайт. Я использую

-bash-4.2$ hostname
example
-bash-4.2$ hostname -f
example.com

Мое имя хоста в /etc/sysconfig/network это пример. Я также использую файл vhost:

cat /etc/httpd/sites-available/example.conf
<VirtualHost *:80>

    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html
    ErrorLog /var/www/html/error.log
    CustomLog /var/www/html/requests.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>

и в httpd.conf я настроил загрузку файлов конфигурации из /etc/httpd/sites-available/*.conf

Другая проблема заключается в том, что когда я пытаюсь установить Cpanel, я получаю следующую ошибку:

2017-03-15 14:10:39  501 ( INFO): Validating that the system hostname ('example') is a FQDN...
2017-03-15 14:10:39  507 (ERROR):
2017-03-15 14:10:39  508 (ERROR): ********************* ERROR *********************
2017-03-15 14:10:39  509 (ERROR):
2017-03-15 14:10:39  510 (ERROR): Your hostname (example) is invalid, and must be
2017-03-15 14:10:39  511 (ERROR): set to a fully qualified domain name before installing cPanel.
2017-03-15 14:10:39  512 (ERROR):
2017-03-15 14:10:39  513 (ERROR): A fully qualified domain name must contain two dots, and consists of two parts: the hostname and the domain name.
2017-03-15 14:10:39  514 (ERROR): You can update your hostname by running `hostname your-hostname.example.com`, then re-running the installer.
2017-03-15 14:10:39  516 (ERROR): ********************* ERROR *********************
2017-03-15 14:10:39  517 (FATAL): Exiting...
Removing /root/installer.lock.

И это мой файл SSL VHOST, который был автоматически сгенерирован функцией Let's encrypt:

    <IfModule mod_ssl.c>
<VirtualHost *:443>

    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html
    ErrorLog /var/www/html/error.log
    CustomLog /var/www/html/requests.log combined
RewriteEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
</VirtualHost>
</IfModule>

Еще немного отладочной информации:

curl -l example.com
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://example.com/">here</a>.</p>
</body></html>

curl https://example.com
curl: (60) Issuer certificate is invalid.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

curl -l www.example.com
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.example.com/">here</a>.</p>
</body></html>

И когда я бегу curl -l https://www.example.com мой веб-сайт загружается, что означает, что он проходит проверку сертификата SSL, и проблема только в сертификате example.com. Итак, я думаю, что мои файлы VHOST полностью испорчены. Я пытался переустановить их, но, думаю, не получилось.

После глубокого исследования выяснилось, что проблема заключалась в том, что запросы к example.com использовали сертификат ssl по умолчанию, который был определен в /etc/httpd/conf.d/ssl.conf, поэтому я прокомментировал три строки, содержащие ключ, сам сертификат и файл цепочки, и добавил путь к сертификату Let's encrypt

SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

Затем я перезагрузил службу httpd и проверил статус, используя:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com https://www.ssllabs.com/ssltest/analyze.html?d=www.example.com

вы также можете проверить свои сертификаты SSL, используя:

openssl rsa -in privateKey.key -check
openssl x509 -in certificate.crt -text -noout

И вы можете проверить свои сертификаты SSL, используя:

openssl s_client -connect www.example.com:443
openssl s_client -connect example.com:443

Поэтому, когда я сравнил оба сертификата, я увидел, что example.com использует сертификат localhost.crt, а затем я выполнил команду find, чтобы найти, где этот сертификат был настроен, и обнаружил, что он был настроен только в файле ssl.conf, так вот как я решил проблему.