前言
SSL/TLS 安全评级(中文):https://myssl.com/
HSTS 简介
HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议(HTTP)响应头中包含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。
比如,https://example.com/ 的响应头含有Strict-Transport-Security: max-age=31536000; includeSubDomains。
这意味着两点:
在接下来的31536000秒(即一年)中,浏览器向example.com或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。比如,用户点击超链接或在地址栏输入 http://www.example.com/ ,浏览器应当自动将 http 转写成 https,然后直接向 https://www.example.com/ 发送请求。
在接下来的一年中,如果 example.com 服务器发送的TLS证书无效,用户不能忽略浏览器警告继续访问网站。
来源:百度百科
Nginx 配置
Nginx 服务器中的配置最为简单,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf
)将下面行添加到你的 HTTPS 配置的 server
块中即可:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
网上看有些人直接添加在 server 块中无效的情况,或许可以试试直接插入到 location ~ *php 内:
location ~ [^/]\.php(/|$) {
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
}
配置保存后重启 Nginx 服务。
Apache 配置
编辑你的 apache 配置文件(如/etc/apache2/sites-enabled/website.conf
和 /etc/apache2/httpd.conf
),并加以下行到你的 HTTPS VirtualHost
:
# Apache 需加载 mod_header 库,一般位于 httpd.conf 文件,搜索 mod_headers 并取消注释。(已加载可跳过)
LoadModule headers_module modules/mod_headers.so
#然后对应站点 VirtualHost 里面插入HSTS响应头信息
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
IIS 配置
我们要开启 IIS 的 HSTS 功能(以 IIS7 + 为例)。打开网站目录下的 web.config
这个文件,在相应的位置添加上针对 https 响应的 url 重写规则(下面配置文件的27~36行),并保存。
max-age 我们这里设置为 365 天。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<add value="index.php" />
</files>
</defaultDocument>
<staticContent>
<remove fileExtension=".htm" />
<remove fileExtension=".html" />
<mimeMap fileExtension=".html" mimeType="text/html;charset=utf-8" />
<mimeMap fileExtension=".htm" mimeType="text/html;charset=utf-8" />
<mimeMap fileExtension=".mp4" mimeType="application/octet-stream" />
</staticContent>
<rewrite>
<rules>
<rule name="redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security"
pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
<location path="favicon.ico">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="31.00:00:00" />
</staticContent>
</system.webServer>
</location>
</configuration>
Lighttpd 配置
对于 lighttpd 来说貌似也很简单,但我没有亲自测试过,将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf
):
server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}
其他配置方法
如果你改不了或者懒得改配置文件,可以采用下面的懒人方法。
将下面的代码插入到 index.php 中:
header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");
编辑保存后记得重启一下。
测试
访问 https://myssl.com/ ,输入你的域名进行检测,当没有出现下图绿框内所示的提示,就表明配置成功了,如开启了HSTS可达到A+评分。
版权属于:任宝硕
原文链接:https://blog.baoshuo.ren/archives/16.html
文章来源于宝硕博客,本站对原文有稍作修改!转载前请务必署名文章作者!