HTTP/2
只能在HTTPS
环境下使用、苹果开始限制HTTP
版本的API,种种迹象表明升级HTTPS
将是一种趋势,HTTPS
也是提升网站可信度、增加信息传输安全的重要手段。本文将对站点HTTPS
流程及网站升级的一些注意事项,做一些简单整理介绍。
1. 获取证书
1.1 证书作用
证书
,即:CA证书
、SSL 证书
。是指由电子证书认证机构(CA, Certificate Authority)所版发的数字证书,可用于认证网站身份、加密HTTPS(基于SSL/TLS
)通讯双方(客户端/服务器)的通讯内容。证书是HTTPS服务器的身份证明,证书中数据会使用不可破译格式,证书中内容包括:
- 所有者的身份信息
- 证书序列号及到期时间
- 加密公钥
- 证书颁发机构的数字签名
使用SSL 证书
后,加密流程大致如下:
- 客户端(浏览器)通过握手获取证书,验证服务器身份,并基于
SSL/TLS
建立加密连接 - 验证服务器身份后,会浏览器地址栏中会出现一个绿色的挂锁图标,并使用
https
前缀 - 浏览器/服务器之间往来传递的信息均经过加密处理,保障传输安全
从技术角度来讲,SSL 证书
主要解决了两个问题:身份认证、信息传输安全。另外,CA厂商为了提高可信度,在发生安全事故后也会给与一定数额的赔偿。
1.2 获取证书
全球第一家CA厂商是VeriSign,现已被Symantec收购。当前较出名的CA石商有Symantec、Comodo、Godaddy、GlobalSign、Digicert,可以通过这些厂商或代理商购买证书。SSL 证书
大多需要购买,也有国内一些相关云服务厂商,购买其产品后可以免费申请一定数据的证书。如:阿里云,每个阿里云帐号可免费申请20个由Symantec提供的DV
型SSL证书
。
购买SSL 证书
,根据。一般大致步骤如下:
- 购买
SSL 证书
- 身份认证。根据所购买证书类型的不同,身份认证流程也有所不同。如:对于
DV
型证书,只需要自已生成或由系统生成CSR
签名文件等,再通过CNAME
验证域名所有者身份,便可通过身份验证 - 证书颁发及证书安装
另外,推荐一个免费的、自动化的和开放的证书颁发机构(CA):Let's Encrypt,Let's Encrypt还提供了自动化安装工具Certbot。
1.3 证书类型
按认证级别分,可分为以下三种:
- 域名认证(
DV
SSL,Domain Validation):申请流程较为简单,认证级别最低,可以验证申请人对域名的所有权。客户端验证成功后,一般会在浏览器地址栏显示一把锁 - 组织认证(
OV
SSL,Organization Validation):申请流程较为复杂,认证级别较高,可以验证域名及组织的合法性。 - 扩展认证(
EV
SSL,Extended Validation):申请时申请人必须通过严谨的扩展验证流程,认证级别最高。客户端验证成功后,会浏览器地址栏会显示公司名
根据不同的认证级别,及CA
证书颁发商不同的收费策略,证书的适用范围也会有所区别。如:
- 单域名SSL:证书只能用于一个网站。如:
itbilu.com
的证书将不能用于www.itbilu.com
- 多域名SSL:证书可以用于多个网站。如:用于
www.itbilu.com
证书也可用于www.itbilu.cn
、www.itbilu2.com
等 - 通配符SSL:证书可以用于某个及其所有一级子域名。如:
*.itbilu.com
的证书,也可用于www.itbilu.com
、cdn.itbilu.com
等
2. 安装证书
CA厂商都会提供证书安装教程,所使用Web服务器的不同,证书安装方式也有所有不同。
以Linux系统、Nginx Web服务器环境下,安装SymantecDV
型SSL 证书
为例,简单介绍安装过程:
安装前已获取证书及私钥,证书名为cert.pem
、私钥名为private.key
。
1. 创建/var/ssl
目录,并将证书及私钥文件移动到该目录下。
2. 修改站点配置
修改配置文件可以通过修改全局配置文件实现,全局配置文件一般是:/etc/nginx/nginx.conf
如果服务器中运行了多个站点,则更推荐通过修改站点的单们配置文件实现。站点配置文件一般位于/etc/nginx/conf.d/
目录下。
现修改IT笔录的配置文件:
$ vi /etc/nginx/conf.d/itbilu.conf
2.1 在主server
节点,监听443
端口,并启用SSL/TLS
服务:
listen 443; server_name itbilu.com; ssl on; ssl_certificate /var/ssl/cert.pem; ssl_certificate_key /var/ssl/private.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;
2.2 配置HTTP转发。即:将原HTTP使用的80
端口连接301
重定向到新的HTTPS网址。增加如下配置节点:
server { listen 80; server_name itbilu.com www.itbilu.com; rewrite ^(.*) https://itbilu.com$1 permanent; }
全部配置文件类似如下:
server { listen 443; server_name itbilu.com; ssl on; ssl_certificate /var/ssl/cert.pem; ssl_certificate_key /var/ssl/private.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { # …… # 其它配置 # …… } } server { listen 80; server_name itbilu.com www.itbilu.com; rewrite ^(.*) https://itbilu.com$1 permanent; } # www 域名转发,只使用 itbilu.com 做为主域名 server { listen 443; server_name www.itbilu.com; rewrite ^(.*) https://itbilu.com$1 permanent; }
注意:配置HTTP转发非必要,可根据个人需要决定是否重定向HTTP链接。
2.3 重启nginx
服务
$ nginx -s reload
如果配置正确,HTTPS的站点已经可以访问,且能过HTTP网址访问能自动跳转到对应的HTTPS网址。如果访问异常,请根据检查CA厂商提供的配置方案检查配置文件。
3. 升级HTTPS时的注意事项
站点由HTTP升级HTTPS后,有一些调整需要注意,主要调整内容如下:
3.1 站点静态资源同样需要使用https
连接
在HTTPS环境下,浏览器不会加载HTTP静态资源,尤其是js
脚本、css
样式表。图片资源一般可以显示,但会在控制台显示一些警告信息,最好图片也使用HTTPS连接。
如果外链了js
、css
或图片
资源,请按以下方式修改。修改前请确保这些外链资源同样支持HTTPS协议。
修改js
脚本连接
原连接:
<script type="text/javascript" src="http://cdn.itbilu.com/js/main-min.js"></script>
修改为以下任意一种:
<!-- 修改方法一 --> <script type="text/javascript" src="//cdn.itbilu.com/js/main-min.js"></script> <!-- 修改方法二 --> <script type="text/javascript" src="https://cdn.itbilu.com/js/main-min.js"></script>
修改css
样式表
原连接:
<link href="http://cdn.itbilu.com/css/main-min.css" rel="stylesheet" type="text/css">
修改为以下任意一种:
<!-- 修改方法一 --> <link href="//cdn.itbilu.com/css/main-min.css" rel="stylesheet" type="text/css"> <!-- 修改方法二 --> <link href="https://cdn.itbilu.com/css/main-min.css" rel="stylesheet" type="text/css">
修改图片外链修改
原连接:
<img src="http://cdn.itbilu.com/https-handshake.png" />
修改为以下任意一种:
<!-- 修改方法一 --> <img src="//cdn.itbilu.com/https-handshake.png" /> <!-- 修改方法二 --> <img src="https://cdn.itbilu.com/https-handshake.png" />
注意:本站使用七牛CDN
存储静态资源,主站切换HTTPS前已将CDN
域名升级为HTTPS。
3.2 SEO
元素使用HTTPS
主要是用于标识页面权威URL的rel="canonical"
连接,如:
<link rel="canonical" href="http://itbilu.com/a-canonical-page.html" />
修改为以下任意一种:
<!-- 修改方法一 --> <link rel="canonical" href="//itbilu.com/a-canonical-page.html" /> <!-- 修改方法二 --> <link rel="canonical" href="https://itbilu.com/a-canonical-page.html" />
3.3 配置301
重定向
站点升级HTTPS后,一般来说HTTP及HTTPS连接可以同时使用。为了不造成页面权重的分散,建议在Nginx、Apache等Web服务中,将网的HTTP连接301
重定向到HTTPS连接。参考:Nginx配置HTTP转发
3.4 其它
本站当前只是一个技术博客,升级HTTPS相对简单。各个网站具体情况的不同,由于框架、早期规划等情况的不同。升级HTTPS应该充分考虑各自站点的实际情况,做好升级预案及补救措施,升级后也应该做足够的测试,以免对现有业务造成影响。
4. 网站升级HTTPS时的一些疑问
笔者在升级HTTPS前的一些疑问,并针对这些疑问做了一些调研。以下是对这些问题的整理,希望能给储君参考:
1. 对站点SEO
的影响
升级HTTPS后,是否对站点的SEO
的影响?
大多数站长或开发者都有这个担心。其中,Google在很早以前就已经能够很好的支持HTTPS,不管是排名还是收录都不会有任何影响。
而当前占据国内最大市场份额的百度,在早其确认不支持HTTPS站点的收录。但自2015年5月25日起,也已全面支持HTTPS页面直接收录,且对于权重值相同的站点,HTTPS页面在排名上会被优先对待。详见其公告:百度开放收录https站点公告。
另外,一些CA
证书颁发商称:HTTPS有助于提升站点排名。这一点未做考证,本站将在升级HTTPS后,对收录情况做一段时间的跟踪,以验证HTTPS对站点的影响。
2. 对站点访问速度的影响
升级HTTPS后,是否会网站访问速度变慢?
建立HTTPS连接前,要经过4次握手,在建立连接时,HTTPS会HTTP慢大约10%。但是,一旦建立有效的HTTPS连接,再刷新网页,两种协议几乎没有区别。而且HTTPS可以对文本内容进行压缩,这样平均访问速度还会有所提升。
3. 对服务器的压力
升级HTTPS后,是否需要大幅升级服务器资源?
相比HTTP来说,HTTPS建立连接前增加了据手过程,这势必会告成传输内容的增加;建立连接后需要对传输内容进行压缩、加密、解密等。这些都会对服务器造成一定的压力,但对一些博客、个人站来讲,本身访问量不会太大,这些影响可以忽略。
以下是知乎上对HTTPS耗费资源的一篇讨论,请自行参考:
4. SSL证书
费用问题
SSL证书
费用会不会太高?
本站目前在SSL证书
还没有任何花费。OV
、EV
型证书的确会一笔开支,但对于需要申请这两类证书的组织来说,这笔开支应该可以忽略。
获取SSL证书
,请参考:1.2 获取证书一节。
另外,HttpWatch官方对HTTPS的一些解释,请自备梯子查看: