服務(wù)器配置https協(xié)議,三種免費(fèi)的方法

最近想搞一個(gè)網(wǎng)站玩玩,發(fā)布網(wǎng)站用https協(xié)議已經(jīng)是大勢(shì)所趨了。例如微信小程序,不使用https協(xié)議根本不讓接入。所以,分享一下我嘗試過(guò)的三種方法。
1.Linux自簽(OPENSSL生成SSL自簽證書(shū))
2.阿里云免費(fèi)證書(shū)
3.Let's Encrypt永久免費(fèi)SSL證書(shū)【墻裂推薦】

一、Linux自簽(OPENSSL生成SSL自簽證書(shū))

第1步:生成私鑰

執(zhí)行如下命令生成一個(gè)RSA私鑰

//生成rsa私鑰,des3算法,1024位強(qiáng)度,ssl.key是秘鑰文件名。
openssl genrsa -des3 -out ssl.key 1024

然后他會(huì)要求你輸入這個(gè)key文件的密碼,由你隨便設(shè)置。
由于以后要給nginx使用。每次reload nginx配置時(shí)候都要你驗(yàn)證這個(gè)PAM密碼的。
但是生成時(shí)候必須輸入密碼。如果不想以后那么麻煩,生成之后可以執(zhí)行如下命令再刪掉。

openssl rsa -in ssl.key -out ssl.key
第2步:生成CSR(證書(shū)簽名請(qǐng)求)

根據(jù)剛剛生成的key文件來(lái)生成證書(shū)請(qǐng)求文件,操作如下:

openssl req -new -key ssl.key -out ssl.csr

說(shuō)明:執(zhí)行以上命令后,需要依次輸入國(guó)家、地區(qū)、城市、組織、組織單位、Common Name和Email。其中Common Name應(yīng)該與域名保持一致。

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GuangDong
Locality Name (eg, city) []:ShenZhen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:tsy
Organizational Unit Name (eg, section) []:tsy
Common Name (e.g. server FQDN or YOUR name) []:selfssl.hxkj.vip   這一項(xiàng)必須和你的域名一致
Email Address []:t@tsy6.com
第3步:生成自簽名證書(shū)

根據(jù)以上2個(gè)文件生成crt證書(shū)文件,執(zhí)行下面命令:

//這里3650是證書(shū)有效期(單位:天)。這個(gè)大家隨意。最后使用到的文件是key和crt文件。
openssl x509 -req -days 3650 -in ssl.csr -signkey ssl.key -out ssl.crt

需要注意的是,在使用自簽名的臨時(shí)證書(shū)時(shí),瀏覽器會(huì)提示證書(shū)的頒發(fā)機(jī)構(gòu)是未知的。

第4步:安裝私鑰和證書(shū)

打開(kāi)conf目錄中的nginx.conf配置文件修改443端口監(jiān)聽(tīng)配置。一般nginx配置文件默認(rèn)路徑為 /etc/nginx/nginx.conf,執(zhí)行如下命令打開(kāi)并修改:

vim /etc/nginx/nginx.conf    //路徑是你的nginx配置文件路徑

Nginx默認(rèn)配置是將443端口的監(jiān)聽(tīng)配置注釋掉了的,如下:

# Settings for a TLS enabled server.
  #  server {
    #    listen       443;
      #  server_name  localhost;
        #ssl on;
        #root         /usr/share/nginx/html;

        #ssl_certificate "";
        #ssl_certificate_key "";
        #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;
#
        # Load configuration files for the default server block.
  #      include /etc/nginx/default.d/*.conf;
#
  #      location / {
    #    }
#
  #      error_page 404 /404.html;
    #        location = /40x.html {
      #  }
#
  #      error_page 500 502 503 504 /50x.html;
    #        location = /50x.html {
      #  }
    #}

將注釋打開(kāi),并對(duì)其中部分內(nèi)容進(jìn)行修改,修改后如下:

# Settings for a TLS enabled server.
    server {
        listen       443;
        server_name  selfssl.hxkj.vip;  //此處填寫你自己的域名
        ssl on;
        root         /usr/share/nginx/html;

        ssl_certificate "/home/ssl/ssl.crt";   //此處填寫剛剛生成的ssl.crt文件路徑
        ssl_certificate_key "/home/ssl/ssl.key";    //此處填寫剛剛生成的ssl.key文件路徑
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        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 {
        }
    }

修改配置并保存后,執(zhí)行以下命令:

nginx -s reload

可使nginx重新加載配置,使配置生效。

OK,到這里就完成了使用Linux自簽的方法配置https協(xié)議,大家也可訪問(wèn)我的頁(yè)面來(lái)查看效果,地址:https://selfssl.hxkj.vip

tips:自簽證書(shū)因?yàn)榘踩院艿停瑫?huì)被谷歌瀏覽器攔截

下面是證書(shū)檢測(cè)詳情
自簽證書(shū)檢測(cè)詳情

二、阿里云免費(fèi)證書(shū)

第1步:登陸阿里云賬號(hào),選擇證書(shū)服務(wù)
選擇證書(shū)服務(wù).png
第2步:選擇DV SS
選DV SSL.png
第3步:選擇Symantec
選Symantec.png
第4步:選擇OV SSL
選OV SSL.png
第5步:選擇免費(fèi)型DV SSL
選免費(fèi)型DV SSL.png
第6步:好,經(jīng)過(guò)曲折的選擇完畢之后,購(gòu)買,需要支付0元(免費(fèi)的啦)
購(gòu)買.png
第7步:購(gòu)買成功之后會(huì)返回證書(shū)控制臺(tái),然后點(diǎn)擊補(bǔ)全信息
補(bǔ)全.png
第8步:需要填寫證書(shū)綁定的域名,根據(jù)自己的需求填寫就OK
輸入域名.png
第9步:填寫申請(qǐng)人的個(gè)人信息,如實(shí)填寫就好
填寫信息.png
第10步:補(bǔ)全成功之后,會(huì)返回域名配置引導(dǎo)頁(yè),如圖所示
域名配置TXT記錄.png
第11步:打開(kāi)自己的域名控制臺(tái),添加解析
添加解析.png
第12步:給域名添加TXT記錄,此處填寫的是第10步的信息,如圖所示
添加TXT記錄.png
第13步:確認(rèn)完畢之后,會(huì)自動(dòng)返回證書(shū)配置頁(yè),可以進(jìn)行配置檢測(cè)
檢測(cè)配置.png

如果配置正確,左邊會(huì)顯示“DNS配置記錄正確,請(qǐng)耐心等候”。否則的話,就是域名TXT記錄配置錯(cuò)誤,返回檢查第12步的信息是否填寫正確

第14步:一般10分鐘之內(nèi)就出結(jié)果了,配置正確的話,會(huì)自動(dòng)返回這個(gè)頁(yè)面,下載證書(shū)
下載證書(shū).png
第15步:安裝證書(shū),阿里教程挺詳細(xì)的,就不做贅述了
安裝教程.png

下面是我的nginx配置內(nèi)容,可供參考:

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

        ssl_certificate "/home/alissl/214715369370158.pem";
        ssl_certificate_key "/home/alissl/214715369370158.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        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 {
        }
    }

修改配置并保存后,執(zhí)行以下命令:

nginx -s reload

可使nginx重新加載配置,使配置生效。

OK,到這里就完成了使用阿里云免費(fèi)證書(shū)的方法配置https協(xié)議,大家也可訪問(wèn)我的頁(yè)面來(lái)查看效果,地址:https://alissl.hxkj.vip
下面是證書(shū)檢測(cè)詳情
阿里證書(shū)詳情.png

三、Let's Encrypt免費(fèi)證書(shū)

1:Let's Encrypt簡(jiǎn)介

Let's Encrypt作為一個(gè)公共且免費(fèi)SSL的項(xiàng)目逐漸被廣大用戶傳播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等組織人員發(fā)起,主要的目的也是為了推進(jìn)網(wǎng)站從HTTP向HTTPS過(guò)度的進(jìn)程,目前已經(jīng)有越來(lái)越多的商家加入和贊助支持。

Let's Encrypt免費(fèi)SSL證書(shū)的出現(xiàn),也會(huì)對(duì)傳統(tǒng)提供付費(fèi)SSL證書(shū)服務(wù)的商家有不小的打擊。到目前為止,Let's Encrypt獲得IdenTrust交叉簽名,這就是說(shuō)可以應(yīng)用且支持包括FireFox、Chrome在內(nèi)的主流瀏覽器的兼容和支持,雖然目前是公測(cè)階段,但是也有不少的用戶在自有網(wǎng)站項(xiàng)目中正式使用起來(lái)。

Let's Encrypt 的最大貢獻(xiàn)是它的 ACME 協(xié)議,第一份全自動(dòng)服務(wù)器身份驗(yàn)證協(xié)議,以及配套的基礎(chǔ)設(shè)施和客戶端。這是為了解決一直以來(lái) HTTPS TLS X.509 PKI 信任模型,即證書(shū)權(quán)威(Certificate Authority, CA)模型缺陷的一個(gè)起步。在客戶端-服務(wù)器數(shù)據(jù)傳輸中,公私鑰加密使得公鑰可以明文傳輸而依然保密數(shù)據(jù),但公鑰本身是否屬于服務(wù)器,或公鑰與服務(wù)器是否同屬一個(gè)身份,是無(wú)法簡(jiǎn)單驗(yàn)證的。證書(shū)權(quán)威模型通過(guò)引入事先信任的第三方,由第三方去驗(yàn)證這一點(diǎn),并通過(guò)在服務(wù)器公鑰上簽名的方式來(lái)認(rèn)證服務(wù)器。第三方的公鑰則在事先就約定并離線準(zhǔn)備好,以備訪問(wèn)時(shí)驗(yàn)證簽名之用。這個(gè)第三方就稱為證書(shū)權(quán)威,簡(jiǎn)稱CA。相應(yīng)的,CA驗(yàn)證過(guò)的公鑰被稱為證書(shū)。問(wèn)題是,如果服務(wù)器私鑰泄露,CA無(wú)法離線使對(duì)應(yīng)的證書(shū)無(wú)效化,只能另外發(fā)布無(wú)效記錄供客戶端查詢。也就是說(shuō),在私鑰泄露到CA發(fā)布無(wú)效記錄的窗口內(nèi),中間人可以肆意監(jiān)控服-客之間的傳輸。如果中間人設(shè)法屏蔽了客戶端對(duì)無(wú)效記錄的訪問(wèn),那么直到證書(shū)過(guò)期,中間人都可以進(jìn)行監(jiān)控。而由于當(dāng)前CA驗(yàn)證和簽發(fā)證書(shū)大多手動(dòng),證書(shū)有效期往往在一年到三年。Let's Encrypt 簽發(fā)的證書(shū)有效期只有90天,甚至希望縮短到60天。有效期越短,泄密后可供監(jiān)控的窗口就越短。

2:部署Let's Encrypt證書(shū)

2.1 檢查服務(wù)器是否安裝Python與Git

檢測(cè)Python指令

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

如果沒(méi)有安裝Python的話,執(zhí)行以下命令進(jìn)行安裝(如果檢測(cè)到已安裝則略過(guò))

#安裝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
#解決系統(tǒng) Python 軟鏈接指向 Python2.7 版本后,因?yàn)閥um是不兼容 Python 2.7的,所需要指定 yum 的Python版本
# vim /usr/bin/yum 
將頭部的
#!/usr/bin/python
改成
#!/usr/bin/python2.6.6

檢測(cè)Git指令

#檢查系統(tǒng)是否安裝git
git  --version

如果沒(méi)有安裝Git的話,執(zhí)行以下命令進(jìn)行安裝(如果檢測(cè)到已安裝則略過(guò))

#git 安裝
yum install git
2.2 快速獲取Let's Encrypt免費(fèi)SSL證書(shū)

相較于第一種自簽生成證書(shū)的方法,Let's Encrypt肯定是考慮到推廣HTTPS的普及型會(huì)讓用戶簡(jiǎn)單的獲取和部署SSL證書(shū),所以可以采用下面簡(jiǎn)單的一鍵部署獲取證書(shū)。

#獲取letsencrypt
git clone https://github.com/letsencrypt/letsencrypt
#進(jìn)入letsencrypt目錄
cd letsencrypt
#生成證書(shū)  --email后填寫自己的郵箱   -d 后面填寫需要配置證書(shū)的域名(支持多個(gè)哦)
./letsencrypt-auto certonly --standalone --email t@tsy6.com -d hxkj.vip -d www.hxkj.vip

Let's Encrypt是支持綁定多域名的,上述兩種方法都是只支持單域名。

2.3 Let's Encrypt免費(fèi)SSL證書(shū)獲取與應(yīng)用

在完成Let's Encrypt證書(shū)的生成之后,我們會(huì)在"/etc/letsencrypt/live/hxkj.vip/"域名目錄下有4個(gè)文件就是生成的密鑰證書(shū)文件。

cert.pem - Apache服務(wù)器端證書(shū)
chain.pem - Apache根證書(shū)和中繼證書(shū)
fullchain.pem - Nginx所需要ssl_certificate文件
privkey.pem - 安全證書(shū)KEY文件

因?yàn)槲业氖荖ginx環(huán)境,那就需要用到fullchain.pem和privkey.pem兩個(gè)證書(shū)文件。修改nginx配置的詳細(xì)過(guò)程,上面兩種方法都提到了,這里不再贅述,以下我修改好的配置文件:

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免費(fèi)證書(shū)的方法配置https協(xié)議,大家也可訪問(wèn)我的頁(yè)面來(lái)查看效果,地址:https://www.hxkj.vip
下面是證書(shū)檢測(cè)詳情
letsencrypt證書(shū)檢測(cè)詳情

從上圖可以看出,Let's Encrypt證書(shū)是有效期90天的,需要我們自己手工更新續(xù)期才可以。但是,身為程序員,可以自動(dòng)執(zhí)行的事,堅(jiān)決不手動(dòng)搞。

2.4 Let's Encrypt證書(shū)自動(dòng)續(xù)期,實(shí)現(xiàn)真正的永久免費(fèi)使用
2.4.1 編寫shell腳本

執(zhí)行以下命令,在"/etc/letsencrypt/live/hxkj.vip/"域名目錄下創(chuàng)建腳本,方便管理

vim /etc/letsencrypt/live/hxkj.vip/updatessl.sh    //創(chuàng)建一個(gè)名字為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 來(lái)執(zhí)行
#第二行中--force-renew參數(shù)代表強(qiáng)制更新

退出并保存,然后給腳本添加可執(zhí)行權(quán)限

// 這里的文件路徑填寫你自己的文件路徑
chmod +x /etc/letsencrypt/live/hxkj.vip/updatessl.sh
2.4.2 創(chuàng)建定時(shí)任務(wù)

打開(kāi)crontab文件

crontab -e

然后在文件末尾添加一行以下內(nèi)容

0  0  28 *  * root /etc/letsencrypt/live/hxkj.vip/updatessl.sh   //我這里代表每月28號(hào)更新一次證書(shū)文件,文件路徑填寫你自己的文件路徑

具體格式如下:

Minute Hour Day Month Dayofweek command
分鐘 小時(shí) 天 月 天每星期 命令

每個(gè)字段代表的含義如下:

Minute 每個(gè)小時(shí)的第幾分鐘執(zhí)行該任務(wù)
Hour 每天的第幾個(gè)小時(shí)執(zhí)行該任務(wù)
Day 每月的第幾天執(zhí)行該任務(wù)
Month 每年的第幾個(gè)月執(zhí)行該任務(wù)
DayOfWeek 每周的第幾天執(zhí)行該任務(wù)
Command 指定要執(zhí)行的程序

在這些字段里,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對(duì)于不指定的字段,要用“*”來(lái)填補(bǔ)其位置。

記得重啟crontab服務(wù)哦。好了,自動(dòng)更新證書(shū)已經(jīng)配置完了,再也不用擔(dān)心證書(shū)過(guò)期啦!這也是我推薦使用這種方式生成證書(shū)的原因之一,沒(méi)辦法,懶啊~~~

四、總結(jié)

1.通過(guò)Linux自簽方式生成簽名文件,這種方式操作繁瑣,安全性低,反正就是吃力不討好,不推薦使用。
2.使用阿里云的免費(fèi)證書(shū),配置方便,唯一的缺點(diǎn)就是有效期只有一年,萬(wàn)一忘記更新就炸了。但是一年的時(shí)間也還好,可以考慮使用。
3.使用Let's Encrypt證書(shū),安全性優(yōu)良,各大廠商都支持,還能實(shí)現(xiàn)自動(dòng)更新有效期,這種方式強(qiáng)烈推薦?。。?/h5>

轉(zhuǎn)載請(qǐng)注明出處:http://www.itdecent.cn/p/eaad77ed1c1b
作者:TSY
個(gè)人空間:https://www.hxkj.vip

喜歡的話,可以關(guān)注下我的微信公眾號(hào)

微信公眾號(hào)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容