nginx 服务器自签https协议 (Let’s Encrypt)

检测Python指令

#检查Python的版本是否在2.7以上
python -v //2.7版本

如果没有安装Python的话,执行以下命令进行安装(如果检测到已安装则略过)

#安装python所需的包
yum install zlib-devel
yum install bzip2-devel
yum install openssl-devel
yum install ncurses-devel
yum install sqlite-devel
#获取到Python
cd /usr/local/src
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
#解压Python2.7.12
tar -xvf Python-2.7.12.tar.xz
#编译python
cd Python-2.7.12/
./configure --prefix=/usr/local/python2.7
make && make install
#建立link
ln -s /usr/local/python2.7/bin/python2.7 /usr/local/bin/python
#解决系统 Python 软链接指向 Python2.7 版本后,因为yum是不兼容 Python 2.7的,所需要指定 yum 的Python版本
# vim /usr/bin/yum 
将头部的
#!/usr/bin/python
改成
#!/usr/bin/python2.6.6

检测Git指令

#检查系统是否安装git
git  --version

如果没有安装Git的话,执行以下命令进行安装(如果检测到已安装则略过)

#git 安装
yum install git
2.2 快速获取Let's Encrypt免费SSL证书

相较于第一种自签生成证书的方法,Let's Encrypt肯定是考虑到推广HTTPS的普及型会让用户简单的获取和部署SSL证书,所以可以采用下面简单的一键部署获取证书。

#获取letsencrypt
git clone https://github.com/letsencrypt/letsencrypt
#进入letsencrypt目录
cd letsencrypt
#生成证书  --email后填写自己的邮箱   -d 后面填写需要配置证书的域名(支持多个哦)
./letsencrypt-auto certonly --standalone --email t@tsy6.com -d hxkj.vip -d www.hxkj.vip

Let's Encrypt是支持绑定多域名的,上述两种方法都是只支持单域名。

出现错误的话:

Problem binding to port 80: Could not bind to IPv4 or IPv6.

则原因是 nginx 占用了80端口,输入 service nginx stop。然后再次执行证书安装命令,即可顺利安装。

安装完毕后,输入 service nginx start,重启 nginx 服务。

2.3 Let's Encrypt免费SSL证书获取与应用

在完成Let's Encrypt证书的生成之后,我们会在"/etc/letsencrypt/live/hxkj.vip/"域名目录下有4个文件就是生成的密钥证书文件。

cert.pem  - Apache服务器端证书
chain.pem  - Apache根证书和中继证书
fullchain.pem  - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件

因为我的是Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件。修改nginx配置的详细过程,上面两种方法都提到了,这里不再赘述,以下我修改好的配置文件:

server {
        listen       443;
        server_name  hxkj.vip www.hxkj.vip;
        ssl on;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/letsencrypt/live/hxkj.vip/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/hxkj.vip/privkey.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
OK,到这里就完成了使用Let's Encrypt免费证书的方法配置https协议,大家也可访问我的页面来查看效果,地址:https://www.hxkj.vip
下面是证书检测详情

从上图可以看出,Let's Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以。但是,身为程序员,可以自动执行的事,坚决不手动搞。

2.4 Let's Encrypt证书自动续期,实现真正的永久免费使用
2.4.1 编写shell脚本

执行以下命令,在"/etc/letsencrypt/live/hxkj.vip/"域名目录下创建脚本,方便管理

vim /etc/letsencrypt/live/hxkj.vip/updatessl.sh    //创建一个名字为updatessl的脚本

然后在脚本里添加如下代码

#!/bin/sh
/usr/local/src/Python-2.7.12/letsencrypt/certbot-auto renew --force-renew --pre-hook "service nginx stop" --post-hook "service nginx start"
#第一行是指此脚本使用/bin/sh 来执行
#第二行中--force-renew参数代表强制更新

退出并保存,然后给脚本添加可执行权限

// 这里的文件路径填写你自己的文件路径
chmod +x /etc/letsencrypt/live/hxkj.vip/updatessl.sh
2.4.2 创建定时任务

打开crontab文件

crontab -e

然后在文件末尾添加一行以下内容

0  0  28 *  * root /etc/letsencrypt/live/hxkj.vip/updatessl.sh   //我这里代表每月28号更新一次证书文件,文件路径填写你自己的文件路径

具体格式如下:

Minute Hour Day Month Dayofweek command
分钟 小时 天 月 天每星期 命令

每个字段代表的含义如下:

Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek 每周的第几天执行该任务
Command 指定要执行的程序

在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。

记得重启crontab服务哦。好了,自动更新证书已经配置完了,再也不用担心证书过期啦!这也是我推荐使用这种方式生成证书的原因之一,没办法,懒啊~~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章