HTTPS 升级指南

Posted Web开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS 升级指南相关的知识,希望对你有一定的参考价值。

来自:阮一峰的网络日志

链接:http://www.ruanyifeng.com/blog/2016/08/migrate-from-http-to-https.html


上一篇文章我介绍了  ,它只有在 HTTPS 环境才会生效。

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

  • 《HTTPS 协议概述》

  • 《图解 HTTPS 协议》

  • 《HTTPS 协议的七个误解》

  • 《HTTPS 协议的延迟有多大?》


本文介绍如何将一个 HTTP 网站升级到 HTTPS 。




一、获取证书


升级到 HTTPS 协议的第一步,就是要获得一张证书。


证书是一个二进制文件,里面包含经过认证的网站公钥和一些元数据,要从经销商购买。

  • GoGetSSL

  • SSLs.com

  • SSLmate.com


证书有很多类型,首先分为三种认证级别。


  • 公司认证(Company Validation):确认域名所有人是哪一家公司,证书里面会包含公司信息。


还分为三种覆盖范围。

  • 单域名证书:只能用于单一域名,foo.com的证书不能用于www.foo.com

  • 通配符证书:可以用于某个域名及其所有一级子域名,比如*.foo.com的证书可以用于foo.com,也可以用于www.foo.com

  • 多域名证书:可以用于多个域名,比如foo.com和bar.com


认证级别越高、覆盖范围越广的证书,价格越贵。


还有一个免费证书的选择。为了推广HTTPS协议,电子前哨基金会EFF成立了 Let's Encrypt,提供免费证书(教程和工具)。


拿到证书以后,可以用 SSL Certificate Check 检查一下,信息是否正确。


二、安装证书


证书可以放在/etc/ssl目录(Linux 系统),然后根据你使用的Web服务器进行配置。


  • 证书配置文件生成器,by Mozilla

  • 配置文件模板,by SSLMate


如果使用 Let's Encrypt 证书,请使用自动安装工具 Certbot。


安装成功后,使用 SSL Labs Server Test 检查一下证书是否生效。


三、修改链接


下一步,网页加载的 HTTP 资源,要全部改成 HTTPS 链接。因为加密网页内如果有非加密的资源,浏览器是不会加载那些资源的。

<script src="http://foo.com/jquery.js"></script>

上面这行加载命令,有两种改法。

<!-- 改法一 -->   
<script src="https://foo.com/jquery.js"></script>   

<!-- 改法二 -->   
<script src="//foo.com/jquery.js"></script>

其中,改法二会根据当前网页的协议,加载相同协议的外部资源,更灵活一些。


另外,如果页面头部用到了rel="canonical",也要改成HTTPS网址。

<link rel="canonical" href="https://foo.com/bar.html" />

四、301重定向


下一步,修改 Web 服务器的配置文件,使用 301 重定向,将 HTTP 协议的访问导向 HTTPS 协议。


nginx 的写法。

server {   
  listen 80;   
  server_name domain.com www.domain.com;   
  return 301 https://domain.com$request_uri;   }

Apache 的写法(.htaccess文件)。

RewriteEngine On   
RewriteCond %{HTTPS} off   
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

五、安全措施


以下措施可以进一步保证通信安全。


5.1 HTTP Strict Transport Security (HSTS)



另一种情况是恶意网站使用自签名证书,冒充另一个网站,这时浏览器会给出警告,但是许多用户会忽略警告继续访问。


"HTTP严格传输安全"(简称 HSTS)的作用,就是强制浏览器只能发出HTTPS请求,并阻止用户接受不安全的证书。


它在网站的响应头里面,加入一个强制性声明。以下例子摘自维基百科。

Strict-Transport-Security: max-age=31536000; includeSubDomains

上面这段头信息有两个作用。


(2)在接下来的一年中,如果example.com服务器发送的证书无效,用户不能忽略浏览器警告,将无法继续访问该网站。


HSTS 很大程度上解决了 SSL 剥离攻击。只要浏览器曾经与服务器建立过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。

该方法的主要不足是,用户首次访问网站发出HTTP请求时,是不受HSTS保护的。


如果想要全面分析网站的安全程度,可以使用 Mozilla 的 Observatory。


5.2 Cookie


另一个需要注意的地方是,确保浏览器只在使用 HTTPS 时,才发送Cookie。


网站响应头里面,Set-Cookie字段加上Secure标志即可。

Set-Cookie: LSID=DQAAAK...Eaem_vYg; Secure

六、参考链接

  • How To Migrate To HTTPS, by Chris Palmer

  • Complete Guide - How to Migrate from HTTP to HTTPS, by KeyCDN

  • What You Need to Know About Changing From Http to Https, by Matt Mansfield



●本文编号156,以后想阅读这篇文章直接输入156即可。

●输入m可以获取到文章目录

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、ios开发、C/C++、.NET、Linux、数据库、运维等。

小编推荐↓↓↓
 

以上是关于HTTPS 升级指南的主要内容,如果未能解决你的问题,请参考以下文章

Vue3官网-高级指南(十七)响应式计算`computed`和侦听`watchEffect`(onTrackonTriggeronInvalidate副作用的刷新时机`watch` pre)(代码片段

SpringBoot 部署 Jar 文件,瘦身优化指南 !

推荐10个优秀GitHub仓库

推荐10个优秀GitHub仓库

在android studio中升级repo v9后,片段必须是公共静态类崩溃错误

javascript 即兼容性升级页面样式片段