站点升级HTTPS及升级时的一些注意事项

 2017年02月01日    1900     声明


HTTP/2只能在HTTPS环境下使用、苹果开始限制HTTP版本的API,种种迹象表明升级HTTPS将是一种趋势,HTTPS也是提升网站可信度、增加信息传输安全的重要手段。本文将对站点HTTPS流程及网站升级的一些注意事项,做一些简单整理介绍。

  1. 获取证书
  2. 安装证书
  3. 升级HTTPS时的注意事项
  4. 网站升级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提供的DVSSL证书

购买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.cnwww.itbilu2.com
  • 通配符SSL:证书可以用于某个及其所有一级子域名。如:*.itbilu.com的证书,也可用于www.itbilu.comcdn.itbilu.com

2. 安装证书

CA厂商都会提供证书安装教程,所使用Web服务器的不同,证书安装方式也有所有不同。

以Linux系统、Nginx Web服务器环境下,安装SymantecDVSSL 证书为例,简单介绍安装过程:

安装前已获取证书及私钥,证书名为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连接。

如果外链了jscss图片资源,请按以下方式修改。修改前请确保这些外链资源同样支持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耗费资源的一篇讨论,请自行参考:

HTTPS 要比 HTTP 多用多少服务器资源?


4. SSL证书费用问题

SSL证书费用会不会太高?

本站目前在SSL证书还没有任何花费。OVEV型证书的确会一笔开支,但对于需要申请这两类证书的组织来说,这笔开支应该可以忽略。

获取SSL证书,请参考:1.2 获取证书一节。


另外,HttpWatch官方对HTTPS的一些解释,请自备梯子查看: