項目或網站配置https訪問CA證書-學習筆記

 

我們在做一些項目或者網站的時候需要配置https,以加強網站的安全性等,記錄一下學習之路~

HTTPS認識

HTTP:是互聯網上應用最爲廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。

HTTPS:是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。HTTPS協議的主要作用可以分爲兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。

HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

本文測試環境

服務環境:nginx-1.7

系統環境:windows10/CentOS7

1)  通過openssl自己辦法證書測試https服務

2)通過let`s Encrypt申請免費證書

Https項目服務部署(linux-CentOS7)

1)openssl

1. 首先確保機器上安裝了openssl和openssl-devel

1)#yum install openssl
2)#yum install openssl-devel

2. 創建服務器私鑰,命令會讓你輸入一個口令:

openssl genrsa -des3 -out server.key 1024  //生成私鑰

3. 創建簽名請求的證書(CSR):

openssl req -new -key server.key -out server.csr  //生成證書頒發機構,用於頒發公鑰

4. 在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令:

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key  //除去密碼以便reload詢問時不需要密碼

5. 配置nginx,最後標記證書使用上述私鑰和CSR:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

6. 修改Nginx配置文件,讓其包含新標記的證書和私鑰:

server {
        listen       9003 ssl;  //監聽端口爲9003  同時兼容http和https
        server_name  www.aecccloud.com;
  
        #ssl                  on;    //開啓ssl  指定https時打開註釋
        ssl_certificate      /usr/share/nginx/html/sslfile/server.crt; #證書位置
         ssl_certificate_key  /usr/share/nginx/html/sslfile/server.key; #私鑰位置
        ssl_session_timeout  5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;  //指定密碼爲openssl支持的格式
        ssl_ciphers  HIGH:!aNULL:!MD5; //密碼加密方式
        ssl_prefer_server_ciphers   on;  //依賴SSLv3和TLSv1協議的服務器密碼將優先於客戶端密碼
        location / {
            root   html;  //根目錄的相對位置
            index  index.html index.htm;
        }
    }

2)let`s Encrypt

certbot是Let's Encrypt官網推薦的自動化配置工具工具官網可以選擇針Apache/Nginx/Haproxy/Plesk等不同服務器不同操作系統的安裝配置方法

根據官網https://certbot.eff.org選擇服務類型系統版本來執行命令:

certbot有幾個不得不解決的依賴問題

1) certbot依賴的python2的urllib3庫版本爲1.21.1版本,如果已經安裝了更高版本的urllib3庫,那麼降級吧pip install urllib3==1.21.1

2) 如果python2的requests庫版本小於2.6.0,那麼自覺升級pip install --upgrade --force-reinstall 'requests==2.6.0'

3) 接下來真正的安裝過程:​​​​​​

yum install epel-release -y && yum update -y
yum install python2-certbot-nginx -y

4) 確保你的nginx配置已經有配置域名,並且域名解析也已經指向該IP地址,域名能夠通過80端口正常訪問(或配置其他端口)

5) 當安裝完成以後,一切就簡單了,運行certbot --nginx,會以提問的方式詢問你幾個配置問題:

# 第一步會讀取你的nginx配置,詢問你需要對哪些域名需要添加ssl

Which names would you like to activate HTTPS for?

-------------------------------------------------------------------------------

1: a.haofly.net

2: b.haofly.net

-------------------------------------------------------------------------------

# 第二步詢問你在遇到http的時候是否需要重定向到https

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

就這樣,配置就算完成了,可以看到新的nginx配置已經寫入到配置文件中,訪問域名也會自動跳轉到https了

6)當然,Let's Encrypted只有90天的有效期,可以使用這條命令更新證書: sudo certbot renew --dry-run,官方建議每天隨機運行兩次該命令,如果證書沒有過期,運行命令並不會對你的服務器造成什麼影響,所以就添加如下定時任務: 

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

Https項目服務部署(windows)

1. 安裝perl(非必須)

下載地址:https://www.activestate.com/activeperl/downloads

以管理員身份運行cmd或者重啓cmd重啓電腦,驗證是否安裝成功

2. 安裝openssl

下載地址:http://slproweb.com/products/Win32OpenSSL.html

按照提示更改存放目錄,一直next即可,安裝完成之後配置一下環境變量。把openssl安裝路徑bin的路徑(例如 D:\OpenSSL-Win64\bin)加入到操作系統的系統環境變量Path中

運行cmd,命令行openssl查看是否安裝成功

1)生成證書

首先在nginx安裝目錄中創建新文件夾sslfile用於存放證書,如:D:\niginx\sslfile

在控制檯執行命令:cd D:\nginx\ssl

2) 創建私鑰

genrsa -des3 -out test.key 1024 # test文件名是自己隨便起即可

輸入密碼後,再次重複輸入確認密碼

3) 創建csr證書

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

#其中key文件爲剛纔生成的文件

 

執行上述命令後,需要輸入一系列的信息。輸入的信息中最重要的爲Common Name,這裏輸入的域名即爲我們要使用https訪問的域名

4) 去除密碼

在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令,否則會在啓動nginx的時候需要輸入密碼。

複製test.key並重命名爲test.copy.key。

在命令行中執行如下命令以去除口令:

openssl rsa -in test.copy.key -out test.key
#然後輸入密碼,這個密碼就是上文中在創建私鑰的時候輸入的密碼。

5) 生成crt證書

openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt

證書生成完畢。我們發現,ssl文件夾中一共生成了4個文件。下面,配置https服務器的時候,我們需要用到的是其中的test.crt和test.key這兩個文件

3. 修改nginx配置 

    listen       9003 ssl;	     #監聽端口爲9003  且同時支持http和https
    server_name  www.aecccloud.com;    #域名

    ssl_certificate      /usr/share/nginx/html/sslfile/server.crt; #證書位置
    ssl_certificate_key  /usr/share/nginx/html/sslfile/server.key; #私鑰位置
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;  #指定密碼爲openssl支持的格式
    ssl_ciphers  HIGH:!aNULL:!MD5;   #密碼加密方式
    ssl_prefer_server_ciphers   on;  #依賴SSLv3和TLSv1協議的服務器密碼將優先

關閉nginx服務,重啓服務即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章