В настоящее время я пробую HTTPS на одном из своих сайтов и получил пробный сертификат от доверенного центра сертификации. Я прошел следующий контрольный список:
a2enmod ssl
Введены директивы SSL:
SSLEngine on
SSLCertificateKeyFile /etc/ssl/ssl.key/server.key
SSLCertificateFile /etc/ssl/ssl.crt/api_my_site_com.crt
SSLCertificateChainFile /etc/ssl/ssl.crt/apimysite.com-bundle
Проверено, только apache прослушивал порт 443 с lsof
Однако, когда я пытаюсь перейти к https://my-site.com (очевидно, не настоящий домен), я получаю сообщение об ошибке «Соединение отказано». Это то, что регистрирует Apache:
[Sat Jul 20 22:50:34 2013] [info] Loading certificate & private key of SSL-aware server
[Sat Jul 20 22:50:34 2013] [info] Configuring server for SSL protocol
[Sat Jul 20 22:50:34 2013] [info] RSA server certificate enables Server Gated Cryptography (SGC)
[Sat Jul 20 22:50:34 2013] [info] [client ::1] Connection to child 0 established (server my-site.com:443)
[Sat Jul 20 22:50:34 2013] [info] Seeding PRNG with 656 bytes of entropy
[Sat Jul 20 22:50:34 2013] [info] [client ::1] SSL library error 1 in handshake (server my-site:443)
[Sat Jul 20 22:50:34 2013] [info] SSL Library Error: 336027900 error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol speaking not SSL to HTTPS port!?
[Sat Jul 20 22:50:34 2013] [info] [client ::1] Connection closed to child 0 with abortive shutdown (server my-site:443)
Есть идеи, почему это происходит?
Файлы конфигурации:
ports.conf
Listen 443
NameVirtualHost *:80
Listen 80
конфигурация виртуального хоста
<VirtualHost *:443>
DocumentRoot /var/www/mysite/sandbox/api
ServerName api.my-site.com
RewriteEngine on
RewriteRule ^/v1/* /v1/api.php [L]
RewriteRule ^/* /index.php [L]
<Directory "/var/www/mysite/sandbox/api">
allow from all
</Directory>
Options -MultiViews
ErrorDocument 404 /404.html
AddDefaultCharset utf-8
<IfModule mod_mime>
AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml
</IfModule>
<IfModule mod_rewrite>
Options +FollowSymlinks
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>
<IfModule mod_autoindex>
Options -Indexes
</IfModule>
<IfModule mod_rewrite>
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]
</IfModule>
<FilesMatch "(^#.*#|\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|sw[op])|~)$">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
FileETag None
SSLEngine on
SSLCertificateKeyFile /etc/ssl/ssl.key/server.key
SSLCertificateFile /etc/ssl/ssl.crt/api_my_site_com.crt
SSLCertificateChainFile /etc/ssl/ssl.crt/apimysite.com-bundle
ErrorLog /var/www/mysite/api.log
LogLevel info
</VirtualHost>
Я наконец исправил это, заметив, что не установил mod_ssl
.
sudo yum install mod_ssl
Я добавил это в httpd.conf
и перезапустили Apache:
Listen 443
И теперь это работает.
Поскольку вы создали виртуальный хост, SSL для нового хоста должен отличаться от порта 80, потому что вы включили SSL для порта 80 через 443. Итак, для нового виртуального хоста попробуйте 636 и посмотрите.
Используя установку Debian, я могу только предположить, что это должно быть по той же причине, что и с этим Ubuntu ошибка.
Изменение порядка директив прослушивания в /etc/apache2/sites-available/default-ssl.conf решает эту проблему. Патч
Я обнаружил проблему - я использую план Cloudflare Free для своего домена, и он активно блокирует любые подключения на порту 443.