项目部署之https配置教程

328 阅读4分钟

为什么要用https

https 更安全。甚至为了安全,一个专业可靠的网站, https 是必须的。 Firefox 和 Chrome 都计划将没有配置 SSL 加密的 https 网站标记为不安全(貌似 Firefox50 已经这么干了),目前它们也正在联合其他相关的基金会与公司推动整个互联网 https 化,现在大家访问的一些主要的网站。如 Google 多年前就已经全部启用 https ,国内的淘宝、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜索结果也正在给予 https 的网站更高的排名和优先收录权。

前置知识

http 和 https

http 是一个传输网页内容的协议,比如你看到的 http 开头的网站 www.163.com ,其网站上的资源都是通过 http 协议传输到我们的浏览器,然后被我们看到。

而 https 可以理解为 HTTP over SSL/TLS ,好端端的 http 为什么需要 over SSL/TLS 呢,因为 http 是明文传输的,通过 http 协议传输的内容很容易被偷看和篡改,为了安全(你肯定不想被人偷看或者篡改网页内容吧,比如网站银行密码什么的。)就为 http 协议再加上了一层 SSL/TLS 安全协议,所以就有了 https。

SSL/TLS

HTTP over SSL/TLS 字面意思就是带 安全套接层 的 http 协议,内心纯洁的同学也可以理解为 带安全套的 http,因为带了安全套,所以当然会比较安全。其中 SSL 是 Secure Sockets Layer 的缩写,是 “安全套接层” 的意思。TLS 是 Transport Layer Security 的缩写,是 传输层安全协议 的意思。SSL 和 TLS 是同一个东西的不同阶段,理解为同一个东西也行,都是安全协议就对了。

CA

证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

获取SSL证书

首先我们需要获取SSL证书,这样我们的网站才可以配置https。

由于我的服务器和域名都是阿里云的,方便起见,我这里就演示阿里云是如何申请证书的,当然为了降低大家的尝试成本,申请的是免费的证书。

进入阿里云搜索SSL证书产品,进入选购页面,按照下图选择免费的证书购买:

证书选购页

点击立即购买并一直下一步,最终进入以下界面:

点击前往证书控制台然后点击证书申请:

填入相应信息,需要注意的是,由于是免费版的,无法通配符匹配域名,所以需要填写完整的域名;我的域名是阿里云的,所以会自动验证,如果是其它厂商的,需要手动验证,这里就不演示了:

点击下一步并验证,如验证成功即可以提交审核,通常立马就能看到审核通过了:

审核通过后,能看到新申请的证书,接下来我们需要在服务器上配置https了,首先点击下载,将证书下载到本地:

我的服务器用得是nginx,所以我这里选择nginx,其它的服务器类型可以根据需要去下载:

下载完成后解压能看到两个文件,分别是xxx.key, xxx.pem,将它们上传到自己的服务器:

使用nginx配置https

然后进入nginx配置文件(假设你已经安装了),配置如下,具体的说明以注释的形式描述:

# blog.conf
server {
  listen 80; # http
  server_name blog.ywhoo.cn;
  return 301 https://blog.ywhoo.cn; # 当用户访问http的时候重定向到https
}

server {
  listen 443 ssl; # https默认监听的是443端口,需要在服务器的安全组放开,这样才能保证正常访问
  server_name blog.ywhoo.cn; # 域名地址
  ssl on; # 打开 ssl
  ssl_certificate /www/ssl/4755935_blog.ywhoo.cn.pem; # 证书密钥地址 地址是前面我们把证书文件上传的到的地址
  ssl_certificate_key /www/ssl/4755935_blog.ywhoo.cn.key; # 证书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 / {
    root /www/blog;
    index index.html;
  }
}

我的博客地址,可以看到这个地址是http的,但访问的时候会自动重定向到https。

这是完善新搭建博客的一部分,后续在搭建过程中可能还会遇到问题,会继续和大家分享,Say goodbye~