SSL/TLS深度解析--在 Nginx上配置 HSTS、CSP 与其他

在 Nginx 上配置 HSTS

HTTP响应中包含 Strict-Transport-Security 头实现网站HSTS,像下面这样配置:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload,就实现了HSTS,即—— HTTP Strict Transport Security,HTTP严格传输安全。假设TLS连接没有错误,兼容的浏览器将会在 max-age 参数指定的保留期内激活HSTS。

一旦站点启用了HSTS,用户的后续访问就会直接进入443端口,然而你还需要确保那些访问到80端口的用户能被重定向到正确的地址。为了支持这个重定向,而且由于在明文响应中HSTS响应头是不被允许的。

需要配置重定向

# 增加HSTS
[[email protected] conf]# vim nginx.conf
......
server {
        listen       80;
        server_name  *.test05.com test05.com;
        return 301 https://$host$request_uri;
}
......
add_header Strict-Transport-Security  "max-age=31536000; includeSubDomains; preload"  always ;
# max-age:时间单位是秒,31536000/3600*24 =365天
# always:表示无论哪种请求都将HSTS的头发送给客户端,也包括错误响应。默认情况404等是不发送HSTS头的。
# includeSubDomains:参数指定在当前主机域名及其所有子域上启用HSTS。
# preload:是一个可选项,是一个为了解决第一次访问的用户,无法预先得知HSTS设置,而创建的
# 要注意 add_header 这个指令的继承方式,如果一个子配置块中设置了 add_header 指令,那么在上层配置块中的 add_header 指令是不会被继承的。如果你需要在子配置中添加额外的 add_header 指令,那么有关HSTS那部分要复制到子配置中。

[[email protected] conf]# ../sbin/nginx -t
nginx: the configuration file /project/nginx1.15.0/conf/nginx.conf syntax is ok
nginx: configuration file /project/nginx1.15.0/conf/nginx.conf test is successful
[[email protected] conf]# ../sbin/nginx -s reload

在 Nginx 上使用 CSP

内容安全策略(content security policy,CSP)是一种声明的安全机制,可以让网站运营者能够控制遵循CSP的用户代理(通常是浏览器)的行为。通过控制要启用哪些功能,以及从哪里下载内容,可以减少网站的***面。

CSP的主要目的是防御跨站点脚本(cross-ste scripting,XSS)***。例如,CSP可以完全禁止内联的JavaScript,并且控制外部代码从哪里加载。它也可以禁止动态代码执行。禁用了所有的这些***源,XSS***变得更加困难。一个网站通过设置 Content-Security-Policy 响应头启用所需的CSP策略。

具体规则:

default-src:默认策略

script-src:js脚本

style-src:样式

img-src:图片

connect-src:链接

font-src:字体

object-src:插件<object>, <embed> 或者<applet>等

media-src: 多媒体<audio>,<video>之类

frame-src:frame

sandbox:沙箱

可取值与含义:

‘*‘:任意来源

‘none‘:任何来源的都不加载

‘self‘:同源,与请求同源的资源可以加载

data 编码过的资源,例如Base64编码过的图片

‘unsafe-inline‘:行内代码可以执行

‘unsafe-eval‘:允许动态代码执行,例如 JavaScript的 eval()方法

https:要求来源是https协议的

https:// xxx.com:要求来源是https协议的某个站点

css.test.com:要求来源是某个站点

*.test.com:要求来源是某个站点及其所有的子站点

[[email protected] ~]# cd /project/nginx1.15.0/conf/
[[email protected] conf]# vim nginx.conf
......
add_header Content-Security-Policy  "default-src ‘self‘; img-src * ; object-src *  script-src  www.test05.com" ;
[[email protected] conf]# ../sbin/nginx -t
nginx: the configuration file /project/nginx1.15.0/conf/nginx.conf syntax is ok
nginx: configuration file /project/nginx1.15.0/conf/nginx.conf test is successful
[[email protected] conf]# ../sbin/nginx -s reload

nginx 在配置上错误所造成的漏洞

[[email protected] ~]# cd /project/nginx1.15.0/conf/
[[email protected] conf]# vim nginx.conf
......
# 防止嵌入 到frame 中;避免点击劫持***
add_header X-Frame-Options  DENY ;
#禁止服务器自动解析资源类型
add_header X-Content-Type-Options  nosniff ;
#防XSS***
add_header X-Xss-Protection 1;

X-Frame-Options 3个选项值:

DENY:拒绝一个页以frame方式加载

SAMEORIGIN:同源域名下的页面,可以用frame方式加载

ALLOW-FROM:允许指定的域名以frame形式加载

点击劫持,是在某个自身不安全站点的某个页面上有一个iframe加载了你的网站的某个页面,***者可以篡改这个iframe,诱使用户去点击,所以最好还是禁止iframe去加载你的页面;或者是同源和个别指定站点可以以frame形式加载你的页面。

XSS***:跨站脚本***:

X-Xss-Protection:4个选项值:

0:不开启XSS保护

1:开启保护(浏览器中一般默认),检测到跨站点脚本***,浏览器将删除不安全的部分。

1; mode=block 检测到***,浏览器将阻止页面的呈现

1; report=<reporting-uri> 检测到跨站点脚本***,浏览器将清理页面并报告违规行为。这使用CSP report-uri功能发送报告;只有chrome支持发送报告。

nosniff 是禁止嗅探 ,服务器提示客户端一定按照 Content-Type 首部中的 MIME 类型来解析,而不能对其进行修改。

禁用了客户端的 MIME 类型嗅探行为,防止恶意代码的注入。开启X-Content-Type-Options 要注意,要保证所传输的内容都要有正确 Content-Type 属性,要是没有这个属性,可能会造成加载不成功和无法运行;因为关闭了浏览器自动识别这一项。有些浏览器 如 IE9 ,IE11 在无法获得类型时,就不加载内容。

nginx配置中的 目录穿透隐患:要确保配置的路径和alias 配置的路径 ,

要都有 / ;或者都没有 /

  • 正确配置

location /download/ {
                autoindex on;
                alias /project/nginx1.15.0/files/;
        }

  • 有安全隐患的配置

location /download {
                autoindex on;
                alias /project/nginx1.15.0/files/;
        }

原文地址:http://blog.51cto.com/stuart/2328320

时间: 2024-10-11 00:07:30

SSL/TLS深度解析--在 Nginx上配置 HSTS、CSP 与其他的相关文章

SSL/TLS深度解析--在Nginx上配置证书链及多域名证书

生成私钥与自签根证书(这次使用aes256加密,密码是redhat) # 进行简单处理 [[email protected] ~]# cd /usr/local/openssl/ [[email protected] openssl]# mkdir root-CA sub-CA [[email protected] openssl]# cp -rf CA/* root-CA/ [[email protected] root-CA]# rm -rf root_cacert_ecc.pem crln

SSL/TLS深度解析--在 Nginx 上部署 TLS

利用 openssl 源代码安装 Nginx [[email protected] software]# tar xf nginx-1.15.5.tar.gz [[email protected] software]# cd nginx-1.15.5/ [[email protected] nginx-1.15.5]# groupadd nginx [[email protected] nginx-1.15.5]# useradd nginx -M -s /sbin/nologin -g ngi

SSL/TLS深度解析--测试TLS/SSL加密

项目地址 https://github.com/drwetter/testssl.sh testssl.sh 是一个免费且开源的功能丰富的命令行工具,用于在 Linux/BSD 服务器上检查支持加密,协议和一些加密缺陷的支持 TLS/SSL 加密的服务. testssl git clone --depth 1 --branch 2.9.5 https://github.com/drwetter/testssl.sh.git 错误 Fatal error: Neither "dig",

SSL/TLS深度解析--OpenSSL的基本使用

摘要算法 [[email protected] ~]# openssl dgst -help #默认sha256 Usage: dgst [options] [file...] file... files to digest (default is stdin) -help Display this summary -c Print the digest with separating colons -r Print the digest in coreutils format -out out

SSL/TLS深度解析--OpenSSL s_client测试子命令

#下载第三方的最新的PEM(privacy-enhanced mail)格式的可信证书库 [[email protected] ~]# wget --no-check-certificate https://curl.haxx.se/ca/cacert.pem 使用s_client 命令进行测试 [[email protected] ~]# openssl s_client -CAfile /root/cacert.pem -connect www.baidu.com:443 -msg CONN

SSL/TLS深度解析--OpenSSL 生成自签证书

密钥算法 OpenSSL 支持 RSA.DSA 和 ECDSA 密钥,但是在实际场景中只是用 RSA 和 ECDSA 密钥.例如 Web 服务器的密钥,都使用RSA或ECDSA,因为DSA效率问题会限制在1024位(相对旧版本浏览器不支持更长的DSA密钥),ECDSA还没有全面范围的普及.比如SSH,一般都是使用DSA和RSA,而不是所有的客户端(不只是浏览器)都支持ECDSA算法. 密钥长度 默认的密钥长度一般都不够安全,老版本的 OpenSSL 默认 RSA 私钥是1024位,所以我们需要指

aliyun 主机Nginx 上配置Drupal 伪静态

网上找了好久没有正确的,后面直接在http://wiki.nginx.org/Drupal 上找到原文,但原文中复制过来会出现个 'root' rewrite directive is duplicate 错误和 server 第一列的错误. 对比aliyun上的预先设定的rewrite 发现它们都没有server {} 这个名,并且这个位置也在nginx -t 时报错了. 注释了报错的位置,删除了不适用于drupal 7下面的配置. /alidata/server/nginx/sbin/ngi

或许是 Nginx 上配置 HTTP2 最实在的教程了

导读 从 2015 年 5 月 14 日 HTTP/2 协议正式版的发布到现在已经快有一年了,越来越多的网站部署了 HTTP2,HTTP2 的广泛应用带来了更好的浏览体验,只要是 Modern 浏览器都支持,所以部署 HTTP2 并不会带来太多困扰. 虽然 h2 有 h2c (HTTP/2 Cleartext) 可以通过非加密通道传输,但是支持的浏览器初期还是比较少的,所以目前部署 h2 还是需要走加密的,不过由于 Let’s Encrypt 大力推行免费证书和证书的廉价化,部署 h2 的成本并

在NGINX上配置HTTPS---血的教训--要重启NGINX

重启,不是重载!!! 是STOP & START 而不是RELOAD!!! 纠结了好几天...(难道有的NGINX上不用重启????) 你妹的,上次也是,,PHP-FPM,将一个PHP的程序连MYSQL数据库从IP更改为域名,也要重启PHP-FPM才生效!!!! 跟WIN一样??重启也能解决UX80%的问题???? ~~~~~~~~~~~~~~~~~~ Nginx SSL 数字证书安装 第一步:获取服务器证书 1.  获取域名型(DV)中级证书访问:/support/root-dvssl.htm