给网站换上 https --- CentOS 7 环境

给网站换上 https --- CentOS 7 环境

简介

以下摘自 百度百科 的解释:

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

其实就是在 http 基础上 加了 TSL/SSL 协议,然后就成了 HTTPS 协议。

解决什么问题呢?

以往使用 http 进行客户端和服务端之间的数据传输,是存在安全隐患,因为可以在传输的中间截取数据进行篡改。而 HTTPS 的出现解决了这一问题,进行数据加密等等一些手段,让传输的过程变得安全可靠,数据无法被篡改。 具体作用:

  • 传输安全
  • 可扩展性
  • 数据完整性
  • 真实性
  • ......

为网站换上 HTTPS

这里使用的是 Let’s Encrypt 这个免费的解决方案。

证书的网站:certbot

步骤:

  • 在网站首页中间有两个 select 下拉菜单,选择 web 服务器与操作系统的选项 网站会根据选项自动跳转到相应的教程
  • 安装所需环境扩展
  • 修改 nginx.conf 文件
  • 定时更新证书,因为该证书有效期为 90 天

根据上面的步骤,那么 CentOS 的环境应该是这样的:

1.首先,进入 certbot 网站首页,选择选项:

1539438886

2.之后,在这下面会出现对应的教程,执行下面命令:

sudo yum install python2-certbot-nginx
pip install --upgrade --force-reinstall 'requests==2.6.0' urllib3
certbot --nginx -d huasio.com,www.huasio.com --nginx-server-root=/etc/nginx/conf

上面第三行命令会安装证书,每个域名会有一个公钥证书和一个私钥证书,私钥证书绝对不能泄露出去,否则就白加密了

3.修改 nginx 配置,监听 443 端口,并且将证书加进去: 1539440282(1)

监听 80 端口,将 http 的访问,重新定向为 https://

1539440547(1)

之后重新加载 nginx 配置

nginx -s reload

还需要将网站所有 http 的链接都换成 https,否则是会提示不安全(看着就不爽)

因为证书有效期是 90 天,所以还需要设置自动更新证书,好在 certbot 为此提供的命令,让这一切变得不那么艰难

自动续订

Certbot 有几种自动续订的方法

  • 钩子脚本
  • 修改续订配置文件
  • 自动续订(Crontab)

前面两中相对后一种,相对复杂,这里使用最容易的“自动续订”(毕竟文档是英文的,我也看的不是很懂)

crontab 定时任务有 六个参数,依照顺序为:

minute(分): 代表一小时内的第几分,范围 0-59。 
hour(小时): 代表一天中的第几小时,范围 0-23。 
mday(月第几天):代表一个月中的第几天,范围 1-31。 
month(月):代表一年中第几个月,范围 1-12。 
wday(星期)  :   代表星期几,范围 0-7 (0及7都是星期天)。 
who(用户) :   要使用什么身份执行该指令,当使用 crontab -e 时,不必加此字段。 
command(command):所要执行的指令。 

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次

定时任务位置/var/spool/cron

执行 crontab -e 添加定时任务日志,这个命令是以用户身份添加的定时任务。将以下内容添加进去:

0 0 1 * * /usr/bin/certbot renew --force-renewal
1 0 1 * * /usr/sbin/service nginx restart

该任务的是含义是,一个月后执行强制更新证书,并且在1分钟之后重新加载 nginx

crontab 命令

  • service crond status 查看定时服务状态
  • service crond start 启动定时计划服务
  • crontab -u 指定用户,只能 root 身份执行该命令
  • crontab -e 添加定时任务
  • crontab -l 查看定时任务
  • crontab -r 移除所有定时任务

差不多就这样了,不是很满意的文章,对 https 介绍浅尝即止,是因为我本身对 HTTP/TSL/SSL 还不是很理解,所以文章暂时就这样,后面可能会更新。