[ОБНОВЛЕНИЕ] - Я разместил его не на том сайте, поэтому скопирую и вставлю эту тему в сообщество 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, так вот как я решил проблему.