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服務哦。好了,自動更新證書已經配置完了,再也不用擔心證書過期啦!這也是我推薦使用這種方式生成證書的原因之一,沒辦法,懶啊~~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章