當我去:http://web-sniffer.net/並檢查我網站的標題(https://www.example.org),我得到狀態碼 200
但是,當我使用單選按鈕 HTTP/1.0(沒有主機標頭)時,我收到狀態代碼 400(錯誤請求)。
我的 apache 日誌顯示“主機名稱 www.example.org 透過 SNI 提供,但 HTTP 請求中未提供主機名稱”
我讀到要使其工作,我需要關閉 apache conf 檔案中的指令“SSLStrictSNIVHostCheck”。
我新增了這個指令,但在建立 HTTP/1.0(沒有主機標頭)時仍然收到狀態碼 400
作為參考,這是我的 ports.conf 檔案:
ServerName www.example.org
NameVirtualHost *:80
Listen 10.0.0.1:80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
這是我的預設 ssl 檔案:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName www.example.org
ServerAdmin [email protected]
SSLStrictSNIVHostCheck off
Alias /static /home/ubuntu/public_html/static
<Directory /home/ubuntu/public_html/static>
Order deny,allow
Allow from all
</Directory>
Alias /media /home/ubuntu/public_html/media
<Directory /home/ubuntu/public_html/media >
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /home/ubuntu/public_html/apache.wsgi
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/ssl/crt/example_org.crt
SSLCertificateKeyFile /etc/ssl/crt/server.key
SSLCertificateChainFile /etc/ssl/crt/ca.crt
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
答案1
據我所知,透過查看阿帕契原始碼,你不能這樣做任何Apache 設定選項。你必須發送一個 Host: 標頭,該標頭與透過 SNI 發送的內容相匹配,以便 Apache 接受它。
RFC 6066 第 11.1 節指定 Web 伺服器必須檢查 Host: 標頭和透過 SNI 傳送的主機名稱是否符合。
實際上,過去 15 年左右生產的任何使用 HTTP 的軟體都應該在每個請求中發送 Host: 標頭。如果你確實有一些不存在的東西,那麼它要么太舊而不能在互聯網上存在,要么已經損壞了。
答案2
聽起來這個測試(站點)已損壞。如果您使用沒有主機標頭的 HTTP/1.0,則您不太可能曾傳送過 SNI 擴充。我認為您不需要“修復”您的網站來支持這一點。