标题写到了打造顶级安全网站,不知道有没有夸张,不过目前网站评级确实已经是最高了,如果有错请指出。

先上一波评测图:

安全评级.png

当网站刚刚建立时,默认只支持HTTP协议,此时我们需要做的第一步就是先升级HTTPS:

证书和私钥的生成:

1.创建服务器私钥,该命令会让你输入一个口令 server.key:
openssl genrsa -des3 -out server.key 1024
输入密码,确认密码,自己随便定义,但是要记住,后面会用到。
2创建签名请求的证书(CSR) server.csr
openssl req -new -key server.key -out server.csr
输出内容为:
Enter pass phrase for root.key: ← 输入前面创建的密码
Country Name (2 letter code) [AU]:CN ← 国家代号,中国输入CN
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名
Organizational Unit Name (eg, section) []: ← 可以不输入
Common Name (eg, YOUR name) []: ← 此时不输入
Email Address []:admin@mycompany.com ← 电子邮箱,可随意填
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 可以不输入
An optional company name []: ← 可以不输入
4.备份一份服务器密钥文件
cp server.key server.key.org
5.在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
openssl rsa -in server.key.org -out server.key
6.最后标记证书使用上述私钥和CSR server.crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

将证书配置到Nginx:

server{#比起默认的80 使用了443 默认 是ssl方式  多出default之后的ssllisten 443 default ssl;#default 可省略#开启  如果把ssl on;这行去掉,ssl写在443端口后面。这样http和https的链接都可以用ssl on;#证书(公钥.发送到客户端的)ssl_certificate /home/server.crt;#私钥,ssl_certificate_key /home/server.key;location ~ /\.{deny all;}
}

将旧的地址重定向到HTTPS(避免以前被搜索引擎收录的页面继续使用HTTP请求):

server{#兼容HTTP与HTTPSlisten  80;listen 443 ssl;ssl_certificate /home/server.crt;ssl_certificate_key /home/server.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;if ($server_port = 80 ) {return 301 https://$host$request_uri;}location ~ /\.{deny all;}
}

此时网站已经支持HTTPS了,但是这样就安全吗?答案是否定的,请看下图:

不安全的链接.png

此时浏览器提示不安全的链接,可能的原因有很多,比如你生成的证书和你目前使用的域名不匹配或者你是自己签发的CA,我们目前就是因为自己签发的证书导致的这个问题,所以要想拿到一个绿色通行证需要大家去找一些证书签发机构申请一个证书,证书有免费的只是限制比较多,具体大家百度,选择很多,所以这里就不再赘述了,拿到申请的证书后,访问就是绿色标识了。

免费证书.png

此时网站已经有了绿色通道了,但是这里有个重点,你需要确认你的网站下所有访问全部使用HTTPS,否则你的网站评级最高是B,具体操作是使用浏览器F12进入调试模式,然后刷新网页,观察是否有HTTP请求,我这里就有一张图片是使用了外链,这个外链有一张图片是HTTP请求,此时编辑网站页面,将图片下载下来并上传至自己的站点,在引用外链的地方将src资源指向自己刚才上传的图片,由于我们的服务器已经使用了HTTPS,所以网站加载这张图片的时候会用HTTPS加载自己站点内的图片。

完成以上步骤,站点评级已经是A-了,要怎样让我们的站点达到最高评级呢?答案是开启HSTS,下面引用一下百度词库:

HSTS(HTTP Strict Transport Security)作用

HSTS可以用来抵御SSL剥离攻击。SSL剥离攻击是中间人攻击的一种,由Moxie Marlinspike于2009年发明。他在当年的黑帽大会上发表的题为“New Tricks For Defeating SSL In Practice”的演讲中将这种攻击方式公开。SSL剥离的实施方法是阻止浏览器与服务器创建HTTPS连接。它的前提是用户很少直接在地址栏输入https://,用户总是通过点击链接或3xx重定向,从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http://,达到阻止HTTPS的目的。
HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。
另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。

HSTS不足

用户首次访问某网站是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。解决这个不足目前有两种方案,一是浏览器预置HSTS域名列表,Google Chrome、Firefox、Internet Explorer和Spartan实现了这一方案。二是将HSTS信息加入到域名系统记录中。但这需要保证DNS的安全性,也就是需要部署域名系统安全扩展。截至2014年这一方案没有大规模部署。
由于HSTS会在一定时间后失效(有效期由max-age指定),所以浏览器是否强制HSTS策略取决于当前系统时间。部分操作系统经常通过网络时间协议更新系统时间,如Ubuntu每次连接网络时,OS X Lion每隔9分钟会自动连接时间服务器。攻击者可以通过伪造NTP信息,设置错误时间来绕过HSTS。解决方法是认证NTP信息,或者禁止NTP大幅度增减时间。比如Windows 8每7天更新一次时间,并且要求每次NTP设置的时间与当前时间不得超过15小时。

总结下来就是,当我们在浏览器敲入我们的域名进行加载的时候,浏览器默认会以HTTP方式访问,此时我们通过返回响应头的方式告诉浏览器服务器只允许HTTPS访问,然后当我们下次再加载这个域名的时候就是以HTTPS的方式访问了,然后上面提到了不足是指第一次访问的时候,还是HTTP的方式访问,相当于请求仅会在第2+N次后才会使用HTTPS请求,但是如果你足够细心的话,应该能注意到上面Nginx的配置,原理上讲应该可以弥补上面提到的不足:

        if ($server_port = 80 ) {return 301 https://$host$request_uri;}

一台新的电脑会默认使用HTTP请求我们的服务器,也就是通过80端口请求,但是通过上面的配置,将80端口重定向到HTTPS,就避免了第一次通过HTTP请求的问题,并且由于我们开启了HSTS,我们第一次请求会给浏览器返回一个响应头让浏览器下次使用HTTPS请求,刚好又避免了服务器频繁重定向的问题,说了这么多,下面讲讲如何开启HSTS,在我们的ssl配置下面添加如下配置:

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;add_header X-Frame-Options "DENY";add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

配置说明:

  • ssl_ciphers 密码套件规则
  • ssl_protocols 启动特定的加密协议
  • ssl_prefer_server_ciphers 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

上面添加的两个响应头说明:

  • X-Frame-Options 响应头是用来给浏览器指示允许一个页面可否在 <frame><iframe>或者 <object> 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。

X-Frame-Options 有三个值:

DENY
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN
表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri
表示该页面可以在指定来源的 frame 中展示。
换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

  • Strict-Transport-Security就是上面所说的开启HSTS,其中参数:max-age=31536000 是配置最大有效时间,我这里设置了一年(60x60x24x365),因为安全评级网站要求时间至少大于180天时才有效,这段配置也是刚才从nginx官网copy下来的配置。

经过以上配置过后,重启你的Nginx,刷新你的网站,去安全评级网站测试一下吧,目前腾讯、阿里、百度评级都是A+,还不跟上时代的步伐,立即行动?

HTTPS升级配合HSTS打造顶级安全网站相关推荐

  1. 京东 618:如何配合业务打造 JDReact 三端融合开发平台?

    京东 618:如何配合业务打造 JDReact 三端融合开发平台? 阅读 616 收藏 31 2017-06-18 原文链接:mp.weixin.qq.com 腾讯云技术升级,年终钜惠!云服务器最高降 ...

  2. 只有大佬才知道的八大顶级自学网站,赶紧收藏学习吧!!!

    一个懂得如何自学的人是人才,好马配好鞍,懂得自学的人配上几个顶级的自学网站那就是无敌了.想要自学但找不到好的资源的可以看这里,这里给你标配了八大顶级自学网站,快来学习吧!!! 八大顶级自学网站 一.我 ...

  3. 只有大佬才知道的八大顶级自学网站,赶紧收藏学习吧!!!(转载)

    八大顶级自学网站 一.我要自学网:https://www.51zxw.net/ 二.中国大学MOOC网:https://www.icourse163.org/ 三.ps自学网:http://www.p ...

  4. HTTPS 升级指南

    为了升级到 HTTP/2 协议,必须先启用 HTTPS.如果你不了解 HTTPS 协议(学名 TLS 协议),可以参考我以前的文章. <HTTPS 协议概述> <图解 HTTPS 协 ...

  5. 7个顶级资源网站,不知道就很可惜

    说起搜索资源,大家肯定先想到百度,的确"度娘"很万能,能帮我们解决很多问题,但毕竟百度资源有限,用的人多了就造成重复的问题,接下来,小编给大家分享7个顶级资源搜索网站,能满足你很所 ...

  6. 知乎高赞的7个顶级资源网站,记住了帮你减少一半的搜索时间

    俗话说得好,授人以资源不如授人以网站,接下来小编就给大家免费分享7个顶级资源网站,记住了可以帮你减少一半的搜索时间,感兴趣的朋友赶紧收藏起来慢慢用吧. 1. 三百搜 https://www.3bsou ...

  7. 打造全新的网站群管理系统

    We7网站管理系统 西部动力政府门户网站内容管理系统,以"安全性强.易用性高.可视化模板.插件应用"为基本原则,符合国家电子政务网站建设标准,高效的技术创新和优质售后服务,受由中国 ...

  8. 中国顶级门户网站架构分析1

    首先声明,下面的内容都是我个人根据一些工具形成的猜想.并不保证和现实中各大门户网站所用的架构一摸一样,不过我认为八九不离十了^_^ . 整篇文章我想分2个部分来讲:第一部分是分析国内2大顶级门户网站首 ...

  9. 从SEO优化角度打造移动端网站的移动建站指南

    移动互联网已经越来越成为互联网的主流渠道,如果说以前对移动页面没有很规范的优化和高质量内容评判划分标准,但现在随着各大搜索引擎发布了移动建站指南,图文并茂的描述了如何提高移动站在百度质量度的等级,但是 ...

最新文章

  1. Socket.IO 客户端 API IO
  2. LeetCode 36有效的数独37解数独(八皇后问题)
  3. python算法与数据结构-二叉树的代码实现(46)
  4. 那些年移动互联网行业曾经走过的弯路
  5. php全选帖子删除,用PHP实现全选全删
  6. Kubernates和Docker
  7. MySQL之增删改查(以查为主)
  8. Scrapy爬取知乎用户信息
  9. linux 下查看tomcat版本
  10. 袁亚湘院士上《开讲啦》变数学魔术啦!
  11. ABAP RFC函数导入参数 EXPORTING 传入内表形式参数
  12. 用于发现软件定义无线电的实时频谱分析仪设备的网络协议
  13. js把HTML转成对象,将js对象转换为html
  14. 小程序开发-Step1
  15. 操写一盒酥三字于盒上
  16. 量子计算机 霍金,科学家正在使用量子粒子窥视黑洞内部
  17. Spring cloud config 配置文件加密
  18. 汽车控制器测试工装-ETest
  19. 我的世界服务器修改视野,我的世界默认视野是多少度
  20. 2022 年山东省职业院校技能大赛“中职组” 网络搭建与应用赛项

热门文章

  1. 怎么在Word中制作表格?简单的Word表格制作方法分享
  2. GrowingIO服务端开发面试、以及对测试开发、趣头条的一点个人看法。仅供参考
  3. 显著性物体检测(salient object detection, SOD)代码汇总
  4. CSDN写博客去除上传图片的水印
  5. MySQL varchar(255) 和 varchar(256) 区别
  6. 网络工作室官网HTML源码
  7. mysql 收缩日志_MySQL5.7中Undo回收收缩相关参数
  8. 港科夜闻|香港科技大学委任郑光廷教授为副校长(研究与发展)
  9. WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?
  10. 服务器提示远程桌面忙,登录服务器windows2008出现:远程桌面服务当前正忙,因此无法完成您尝试执行的任务。(或者出现黑屏界面)...