我经常访问的一个网站终于决定在他们的服务器上启用 TLS,只是不像很多网站那样强制要求它。维护者声称 TLS必须是可选的。为什么?
在我自己的网站上,我长期设置了强制 TLS 和 HSTS,并且禁用了较弱的密码套件。明文访问保证被 TLS 保护版本的 HTTP 301 隔离。这会对我的网站产生负面影响吗?
是否可以在来自 S3 源的 Amazon CloudFront 分配上设置 HSTS 标头?
我在网站http://server.mydom.tld:80上为我的域设置了 hsts ,因此浏览器转到端口 443 上的端口https://server.mydom.tld
但是,我还有其他网络服务器,在其他端口上运行。因此,当我访问http://server.mydom.tld:8888 时,它会被转发到https://server.mydom.tld:8888,但该服务器不运行 https,因此请求失败。
那是根据规范吗?
我注意到我没有在http://mydom.tld或http://www.mydom.tld上运行 hsts ,这可能是一个错误。
该怎么办?
我在共享主机 LAMP 环境中管理一个小网站:这基本上意味着我唯一可以编辑的是 htaccess 文件。
我想添加 HSTS 支持(我做到了),但是,当我在这里测试我的网站是否符合 HSTS 预加载资格时,出现以下错误:
错误:HTTP 首先重定向到 www
http://example(HTTP)https://example在添加 www 子域之前应立即重定向到(HTTPS)。现在,第一个重定向是到https://www.example.需要额外的重定向以确保任何支持 HSTS 的浏览器都会记录顶级域的 HSTS 条目,而不仅仅是子域。
所以,我想我应该这样重定向用户:
http://example (这是用户在浏览器地址栏中输入的内容)https://example (我们将他重定向到该网站的 HTTPS 版本)https://www.example (我们再次将他重定向到子域 www)我目前的重定向是这样完成的:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
我试图在最后一行之前添加一个重定向,这样:
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
但我从浏览器收到“页面未正确重定向”错误。
那么,将用户从网站的 http 版本重定向到 https 并最终重定向到带有 www 的 https 的正确方法是什么?以及:有任何风险吗?
我最近更改了我的 nginx 配置,将所有 http 流量重定向到 https(并将所有 www 流量重定向到 no-www)。
也添加add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;到我的服务器块是否有意义?或者这是不需要的,因为我已经重定向了所有流量?知道优点(和缺点,如果有的话)会很棒。
如果相关,我当前的虚拟主机配置是:
server {
server_name example.com www.example.com;
listen 80;
return 301 https://example.com$request_uri;
}
server {
server_name www.example.com;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/cert_chain.crt;
... other SSL related config ...
return 301 https://example.com$request_uri;
}
server {
server_name example.com;
listen 443 ssl;
... other SSL related config ...
... remaining server configuration ...
}
Run Code Online (Sandbox Code Playgroud) 我已经使用 Ubuntu 18.04 设置了一个 Vagrant 框并安装了 Apache 2.4.29。我创建并启用了一个新的 conf 文件,如下所示:
<VirtualHost *:80>
ServerName django.dev
ServerAlias www.django.dev
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我尝试调用 django.dev 时,apache 以 HSTS 标头响应:
我不知道这是从哪里来的。在 apache2.conf 和 000-default.conf 中都没有设置这样的标头,我什至没有启用 mod_ssl。
奇怪的是,如果直接调用 IP,一切都按预期进行。如果我 ping django.dev,它会解析为完全相同的 IP。
有谁知道我可以如何或在哪里禁用 HSTS?我不知所措,已经浪费了几个小时试图解决这个问题。
我刚刚检查了SSL 服务器测试是否在我的服务器上正确实施了 SSL 证书。我得到了一个档次的一个在他们的排名,但你可以得到一个A +,如果你已经激活HSTS。经过一番搜索,我发现 Google 可能会将 HSTS 视为排名因素。因此,它似乎与 SEO 相关。在实施 HSTS 之前,我有一些问题。
问题 1
如果某些外部 javascript 加载例如我网站上的 http(而不是 https)上的图像,会发生什么情况?HSTS 会阻止整个页面加载还是只阻止特定的“不安全”内容?
问题2
目前(没有 HSTS),如果资源是通过 http 加载的,我会收到“混合内容”警告。如果激活 HSTS,“混合内容”是否真的存在?
当我在浏览器中访问时,http://sub.example.com我收到“连接被拒绝” 消息或“无效证书”错误,但我什至不想通过 https 进行连接。
据我所知:
sub.example.comsub.example.com指向 Web 服务器的正确 IP 地址我该如何调试以及存在什么问题?
我们httpd.conf在虚拟主机处理端口 443 中启用了 HSTS 。我们尝试使用和不使用<IfModule mod_headers.c>:
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=10886400; includeSubDomains"
</IfModule>
Run Code Online (Sandbox Code Playgroud)
但是服务器在响应中不包含标头。以下是通过 HTTPS 的 curl:
> GET / HTTP/1.1
> Host: www.cryptopp.com
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 05 Nov 2016 22:49:25 GMT
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips
< Last-Modified: Wed, 02 Nov 2016 01:27:08 GMT
< ETag: "8988-5404756e12afc"
< Accept-Ranges: bytes
< Content-Length: 35208
< Vary: Accept-Encoding
< Content-Type: text/html; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)
的相关部分httpd.conf如下所示。cURL …
我正在配置 rb750。我想放弃 YouTube 访问权限并重定向到位于我们本地网络服务器中的友好页面。我可以放弃使用 l7 防火墙,但我无法重定向用户,因为 https。具体来说,你管使用某种技术来阻止这种“拦截”。我也尝试过 dnat 和 DNS,但两者都不起作用:(。我已经阅读了适用于 chrome、Firefox 和其他产品的 hsts(https 严格传输安全),并在网站导航期间允许完整的 https,这就是为什么我不能这样做。你们有什么想法吗?
hsts ×10
ssl ×4
apache-2.4 ×2
https ×2
nginx ×2
redirect ×2
.htaccess ×1
centos ×1
dnat ×1
mediawiki ×1
mikrotik ×1
mod-rewrite ×1
php ×1
ubuntu-18.04 ×1
web-server ×1