服務器配置https協議,三種免費的方法

最近想搞一個網站玩玩,發佈網站用https協議已是大勢所趨了。例如微信小程序,不使用https協議根本不讓接入。因此,分享一下我嘗試過的三種方法。
1.Linux自籤(OPENSSL生成SSL自簽證書)
2.阿里雲免費證書
3.Let's Encrypt永久免費SSL證書【牆裂推薦】html

1、Linux自籤(OPENSSL生成SSL自簽證書)

第1步:生成私鑰

執行以下命令生成一個RSA私鑰python

//生成rsa私鑰,des3算法,1024位強度,ssl.key是祕鑰文件名。
openssl genrsa -des3 -out ssl.key 1024

而後他會要求你輸入這個key文件的密碼,由你隨便設置。
因爲之後要給nginx使用。每次reload nginx配置時候都要你驗證這個PAM密碼的。
可是生成時候必須輸入密碼。若是不想之後那麼麻煩,生成以後能夠執行以下命令再刪掉。linux

openssl rsa -in ssl.key -out ssl.key
第2步:生成CSR(證書籤名請求)

根據剛剛生成的key文件來生成證書請求文件,操做以下:nginx

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

說明:執行以上命令後,須要依次輸入國家、地區、城市、組織、組織單位、Common Name和Email。其中Common Name應該與域名保持一致。git

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   這一項必須和你的域名一致
Email Address []:t@tsy6.com
第3步:生成自簽名證書

根據以上2個文件生成crt證書文件,執行下面命令:程序員

//這裏3650是證書有效期(單位:天)。這個你們隨意。最後使用到的文件是key和crt文件。
openssl x509 -req -days 3650 -in ssl.csr -signkey ssl.key -out ssl.crt

須要注意的是,在使用自簽名的臨時證書時,瀏覽器會提示證書的頒發機構是未知的。github

第4步:安裝私鑰和證書

打開conf目錄中的nginx.conf配置文件修改443端口監聽配置。通常nginx配置文件默認路徑爲 /etc/nginx/nginx.conf,執行以下命令打開並修改:算法

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

Nginx默認配置是將443端口的監聽配置註釋掉了的,以下:sql

# 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 {
      #  }
    #}

將註釋打開,並對其中部份內容進行修改,修改後以下:shell

# 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 {
        }
    }

修改配置並保存後,執行如下命令:

nginx -s reload

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

OK,到這裏就完成了使用Linux自籤的方法配置https協議,你們也可訪問個人頁面來查看效果,地址:https://selfssl.hxkj.vip

tips:自簽證書由於安全性很低,會被谷歌瀏覽器攔截

下面是證書檢測詳情

自簽證書檢測詳情

2、阿里雲免費證書

第1步:登錄阿里雲帳號,選擇證書服務

選擇證書服務.png

第2步:選擇DV SS

選DV SSL.png

第3步:選擇Symantec

選Symantec.png

第4步:選擇OV SSL

選OV SSL.png

第5步:選擇免費型DV SSL

選免費型DV SSL.png

第6步:好,通過曲折的選擇完畢以後,購買,須要支付0元(免費的啦)

購買.png

第7步:購買成功以後會返回證書控制檯,而後點擊補全信息

補全.png

第8步:須要填寫證書綁定的域名,根據本身的需求填寫就OK

輸入域名.png

第9步:填寫申請人的我的信息,如實填寫就好

填寫信息.png

第10步:補全成功以後,會返回域名配置引導頁,如圖所示

域名配置TXT記錄.png

第11步:打開本身的域名控制檯,添加解析

添加解析.png

第12步:給域名添加TXT記錄,此處填寫的是第10步的信息,如圖所示

添加TXT記錄.png

第13步:確認完畢以後,會自動返回證書配置頁,能夠進行配置檢測

檢測配置.png
若是配置正確,左邊會顯示「DNS配置記錄正確,請耐心等候」。不然的話,就是域名TXT記錄配置錯誤,返回檢查第12步的信息是否填寫正確

第14步:通常10分鐘以內就出結果了,配置正確的話,會自動返回這個頁面,下載證書

下載證書.png

第15步:安裝證書,阿里教程挺詳細的,就不作贅述了

安裝教程.png
下面是個人nginx配置內容,可供參考:

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 {
        }
    }

修改配置並保存後,執行如下命令:

nginx -s reload

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

OK,到這裏就完成了使用阿里雲免費證書的方法配置https協議,你們也可訪問個人頁面來查看效果,地址:https://alissl.hxkj.vip
下面是證書檢測詳情

阿里證書詳情.png

3、Let's Encrypt免費證書

1:Let's Encrypt簡介

Let's Encrypt做爲一個公共且免費SSL的項目逐漸被廣大用戶傳播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等組織人員發起,主要的目的也是爲了推動網站從HTTP向HTTPS過分的進程,目前已經有愈來愈多的商家加入和贊助支持。

Let's Encrypt免費SSL證書的出現,也會對傳統提供付費SSL證書服務的商家有不小的打擊。到目前爲止,Let's Encrypt得到IdenTrust交叉簽名,這就是說能夠應用且支持包括FireFox、Chrome在內的主流瀏覽器的兼容和支持,雖然目前是公測階段,可是也有很多的用戶在自有網站項目中正式使用起來。

Let's Encrypt 的最大貢獻是它的 ACME 協議,第一份全自動服務器身份驗證協議,以及配套的基礎設施和客戶端。這是爲了解決一直以來 HTTPS TLS X.509 PKI 信任模型,即證書權威(Certificate Authority, CA)模型缺陷的一個起步。在客戶端-服務器數據傳輸中,公私鑰加密使得公鑰能夠明文傳輸而依然保密數據,但公鑰自己是否屬於服務器,或公鑰與服務器是否同屬一個身份,是沒法簡單驗證的。證書權威模型經過引入事先信任的第三方,由第三方去驗證這一點,並經過在服務器公鑰上簽名的方式來認證服務器。第三方的公鑰則在事先就約定並離線準備好,以備訪問時驗證簽名之用。這個第三方就稱爲證書權威,簡稱CA。相應的,CA驗證過的公鑰被稱爲證書。問題是,若是服務器私鑰泄露,CA沒法離線使對應的證書無效化,只能另外發布無效記錄供客戶端查詢。也就是說,在私鑰泄露到CA發佈無效記錄的窗口內,中間人能夠肆意監控服-客之間的傳輸。若是中間人設法屏蔽了客戶端對無效記錄的訪問,那麼直到證書過時,中間人均可以進行監控。而因爲當前CA驗證和簽發證書大多手動,證書有效期每每在一年到三年。Let's Encrypt 簽發的證書有效期只有90天,甚至但願縮短到60天。有效期越短,泄密後可供監控的窗口就越短。

2:部署Let's Encrypt證書

2.1 檢查服務器是否安裝Python與Git

檢測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是支持綁定多域名的,上述兩種方法都是隻支持單域名。

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
下面是證書檢測詳情

letsencrypt證書檢測詳情

從上圖能夠看出,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服務哦。好了,自動更新證書已經配置完了,不再用擔憂證書過時啦!這也是我推薦使用這種方式生成證書的緣由之一,沒辦法,懶啊~~~

4、總結

1.經過Linux自籤方式生成簽名文件,這種方式操做繁瑣,安全性低,反正就是吃力不討好,不推薦使用。
2.使用阿里雲的免費證書,配置方便,惟一的缺點就是有效期只有一年,萬一忘記更新就炸了。可是一年的時間也還好,能夠考慮使用。
3.使用Let's Encrypt證書,安全性優良,各大廠商都支持,還能實現自動更新有效期,這種方式強烈推薦!!!

轉載請註明出處:https://www.jianshu.com/p/eaad77ed1c1b
做者:TSY
我的空間:https://www.hxkj.vip

喜歡的話,能夠關注下個人微信公衆號

微信公衆號

相關文章
相關標籤/搜索