一步步教你把HTTP網站免費轉成HTTPS網站

關於HTTPS和HTTP的區別,以及HTTPS的優勢、HTTPS和SSL之間的關係等,本文不做任何討論,感興趣的可以自行百度。本文只用來記錄作為一個「外行人」,如何一步步構建自己的HTTPS伺服器的過程。

1、申請SSL證書

SSL證書是一種加密協議。大部分企業級的SSL證書都是需要收費的,而且對於個人開發者來說都不便宜(土豪隨意)。個人使用的SSL證書,有一些是免費的,比如Let"s Encrypt、阿里雲、騰訊雲、又拍雲等,都有提供免費證書的申請介面。

這裡以阿里云為例,其免費申請流程為:

(1)註冊阿里雲賬號

(2)打開「管理控制台」 -- 「安全(雲盾)」 -- 「CA證書服務」

(3)打開右上角「購買證書」:

(4)選擇「免費型DV SSL」,並點擊立即購買。購買成功後跳轉到「我的證書」頁面:

(5)此時的狀態處於「待完成」,點擊右側「補全」按鈕,補全域名信息:

(6)按照流程單擊「下一步」,填寫個人信息,上傳相關信息等。最後跳回「我的證書」頁面:

(7)此時的狀態變成了「待審核」。點擊右側「進度」按鈕,進入詳情頁:

(8)這裡需要配置域名授權驗證。具體步驟可參考:如何配置域名授權驗證? 配置完成後點擊「配置檢查」,如果配置成功,則:

此時耐心等待審核結果即可。一般需要3到5個工作日。

2、配置基本的Nginx伺服器

這裡我們使用Python的Flask框架,構建一個最簡單的網站,頁面直接返回Hello World。

這裡建議大家使用docker進行網站部署。推薦一個自己的Docker鏡像,鏡像中集成了Python網站開發、爬蟲等所需要的各種庫,以及安裝有uWSGI和Nginx等相關服務。地址如下:hub.docker.com/r/xianhu

下載鏡像後直接新建容器,並開放80埠和443埠即可:

PS:這裡開放80是為了測試HTTP,開放443是為了測試HTTPS。

docker run -it --name test -p 80:80 -p 443:443 xxx/image:v10

進入鏡像後,新建FlaskDemo目錄,並新建FlaskDemo.py文件。文件代碼如下:

from flask import Flaskapp = Flask(__name__)@app.route("/")def hello_world(): return "Hello World!"if __name__ == "__main__": app.run()

然後利用uWSGI啟動Flask程序,關於uWSGI的知識相信做過Flask的程序員應該都了解。

uwsgi -s /tmp/uwsgi.sock -w FlaskDemo:app --chdir /root/FlaskDemo/ --chmod-socket=666

修改Nginx配置文件,配置文件地址:/etc/nginx/conf.d/default.conf:

server { listen 80; server_name xxx.com; charset utf-8; location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock;}server { listen 80 default; server_name ""; return 500;}server { listen 80 default; server_name ""; return 500;}

配置很簡單。修改之後重啟nginx -s reload即可使配置文件生效。此時訪問域名地址,即可看到如下效果,HTTP網站配置完成。注意:域名需要備案,否則國內不允許上線。

此時是通過HTTP進行訪問的。下一步我們就需要改為HTTPS訪問。

3、在Nginx中配置SSL證書

經過兩三天的等待,SSL證書終於申請成功了,即在阿里雲的「安全(雲盾)」產品中的「CA證書服務」中,「證書狀態」變成了「已簽發」:

下載證書到伺服器,下載後可以得到兩個文件:xxxx.pem 和 xxxx.key

在Nginx的安裝目錄下,新建文件夾cert,並將上述兩個文件複製到該文件夾下:

此時修改Nginx配置文件/etc/nginx/conf.d/default.conf:

server { listen 443; server_name xxx.com; charset utf-8; #access_log /var/log/nginx/host.access.log main; ssl on; ssl_certificate cert/xxxx.pem; ssl_certificate_key cert/xxxx.key; ssl_session_timeout 5m; ssl_ciphers .... ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; }}

保存配置文件後,重啟Nginx:nginx -s reload。

此時再去訪問網址,即可得到:

即HTTPS配置成功!

=============================================================

作者主頁:笑虎(Python愛好者,關注爬蟲、數據分析、數據挖掘、數據可視化等)

作者專欄主頁:擼代碼,學知識 - 知乎專欄

作者GitHub主頁:擼代碼,學知識 - GitHub

歡迎大家拍磚、提意見。相互交流,共同進步!

==============================================================

推薦閱讀:

從零部署一個https網站
看到網址前的小嘆號,隱私就處在危險的境地
TLS完全指南(一):TLS和安全通信
知乎都全站 HTTPS 好久了, 你還好意思不懂 HTTPS?
搭建基於 Nginx 的 Https 站點

TAG:网站开发 | HTTPS | SSL证书 |