HTTPS 升级指南

转载 2016年08月29日 09:43:35

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

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

一、获取证书

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

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

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

  • 域名认证(Domain Validation):最低级别认证,可以确认申请人拥有这个域名。对于这种证书,浏览器会在地址栏显示一把锁。
  • 公司认证(Company Validation):确认域名所有人是哪一家公司,证书里面会包含公司信息。
  • 扩展认证(Extended Validation):最高级别的认证,浏览器地址栏会显示公司名。

还分为三种覆盖范围。

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

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

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

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

二、安装证书

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

如果使用 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)

访问网站时,用户很少直接在地址栏输入https://,总是通过点击链接,或者3xx重定向,从HTTP页面进入HTTPS页面。攻击者完全可以在用户发出HTTP请求时,劫持并篡改该请求。

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

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

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


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

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

(1)在接下来的一年(即31536000秒)中,浏览器只要向example.com或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。用户点击超链接或在地址栏输入http://www.example.com/,浏览器应当自动将http转写成https,然后直接向https://www.example.com/发送请求。

(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

六、参考链接

(完)

https升级指南

一、获取证书 升级到 HTTPS 协议的第一步,就是要获得一张证书。 证书是一个二进制文件,里面包含经过认证的网站公钥和一些元数据,要从经销商购买。 GoGetSSL SSLs...
  • kai_wei
  • kai_wei
  • 2016年12月21日 16:13
  • 125

HTTPS 升级指南

HTTPS 升级指南 作者: 阮一峰 日期: 2016年8月26日 上一篇文章我介绍了 HTTP/2 协议 ,它只有在 HTTPS 环境才会生效。 为了升级到 HTTP/2...
  • kaizi318
  • kaizi318
  • 2016年09月22日 16:35
  • 1648

HTTPS 升级指南

http://www.ruanyifeng.com/blog/2016/08/migrate-from-http-to-https.html 作者: 阮一峰 日期: 201...
  • u013980127
  • u013980127
  • 2016年12月19日 16:57
  • 139

HTTPS 升级指南

为了升级到 HTTP/2 协议,必须先启用 HTTPS。 本文介绍如何将一个 HTTP 网站升级到 HTTPS 。 一、获取证书 升级到 HTTPS 协议的第一步,就是要获得一张证书...
  • tanglitong
  • tanglitong
  • 2017年12月07日 11:34
  • 20

后web时代,你的网站更新了https了吗?

如果有一项技术可以让网站的访问速度更快、更安全、并且seo权重提升(百度除外),而且程序员不需要改代码就可以全站使用,最重要的是,不需要额外花钱,那有这么好的事情吗?...
  • proginn
  • proginn
  • 2016年07月26日 21:08
  • 1258

从HTTP到HTTPS协议系统升级总结

由于客户的一个安全型要求,要把系统从HTTP升级到HTTPS协议,以前的系统是在B/S模式,Websocket体系下进行实施的,并且所有的代码都是基于windows本身的IOCP(异步IO)的方式,在...
  • u010298834
  • u010298834
  • 2017年07月16日 19:37
  • 929

从 http 升级到 https 过程中遇到的一些问题

Apple 2017年1月1号起要求Appstore 上线的应用都必须使用 https 加密请求协议,在二月份又改为建议 从 http 升级为 https 协议,此为背景。 公司做的APP同时在...
  • zhang275827743
  • zhang275827743
  • 2017年03月02日 17:21
  • 580

使用nginx把 http 向https升级

为什么要使用 HTTPS ? 首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密。简单点说...
  • xiaoyao8903
  • xiaoyao8903
  • 2016年11月20日 21:24
  • 2729

《HTTP权威指南》学习笔记(一)

《HTTP权威指南》学习笔记(一)-第一部分 HTTP:Web的基础(描述Web的基础构件与HTTP的核心技术)(1-4章)...
  • ggf123456789
  • ggf123456789
  • 2015年05月08日 09:19
  • 642

在linux安装Nginx以从http升级到https

在linux安装Nginx以从http升级到https本文章以cent OS为例说一下在linux平台下安装Nginx下的一些经验。可以通过yum 安装通过命令yum -y install nginx...
  • woshinannan741
  • woshinannan741
  • 2017年05月21日 10:33
  • 845
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTPS 升级指南
举报原因:
原因补充:

(最多只允许输入30个字)