摘要:如果存在文件請優先修改此文件,具體原因請百度配置重啟到此為止,我們就已經成功的完成了的配置。
本文首發地址:https://liluyang.me
本文將以本站 http://liluyang.me 升級到 https://liluyang.me 的過程來分享一下 https 的原理,http 和 https 的區別,以及如何將網站從 http 升級到 https。
引言 為什么要用 https?https 更安全。甚至為了安全,一個專業可靠的網站, https 是必須的。 Firefox 和 Chrome 都計劃將沒有配置 SSL 加密的 https 網站標記為不安全(貌似 Firefox50 已經這么干了),目前它們也正在聯合其他相關的基金會與公司推動整個互聯網 https 化,現在大家訪問的一些主要的網站。如 Google 多年前就已經全部啟用 https ,國內的淘寶、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜索結果也正在給予 https 的網站更高的排名和優先收錄權。
要需要掌握哪些知識?擁有基礎的 Linux 系統知識,常用的 Shell 命令。
需要有什么資源?如果你只是要測試 https,請查看Nginx 容器教程
如果你要在生產環境使用 https,請接著往下看:
一個服務器,一個域名,并且已經正確的將域名指向了你的服務器,并且擁有服務器的 SSH 權限
Tips: 需要注意的是如果是在國內阿里云或者騰訊云購買的域名請備案,否則即使你正確的配置了你的域名,可能也依然無法訪問你的服務器,因為在國內備案是必須的。
關鍵詞 http 和 https簡單來說,http 是一個傳輸網頁內容的協議,比如你看到的 http 開頭的網站 http://www.163.com,其網頁上的文字、圖片、 CSS、JS 等文件都是通過 http 協議傳輸到我們的瀏覽器,然后被我們看到。
而 https 可以理解為 HTTP over SSL/TLS ,好端端的 http 為什么需要 over SSL/TLS 呢,因為 http 是明文傳輸的,通過 http 協議傳輸的內容很容易被偷看和篡改,為了安全(你肯定不想被人偷看或者篡改網頁內容吧,比如網站銀行密碼什么的。)就為 http 協議再加上了一層 SSL/TLS 安全協議,所以就有了 https。
SSL/TLSHTTP over SSL/TLS 字面意思就是帶 安全套接層 的 http 協議,內心純潔的同學也可以理解為 帶安全套的 http,因為帶了安全套,所以當然會比較安全(/(ㄒoㄒ)/~~)。其中 SSL 是 Secure Sockets Layer 的縮寫,是 “安全套接層” 的意思。TLS 是 Transport Layer Security 的縮寫,是 傳輸層安全協議 的意思。SSL 和 TLS 是同一個東西的不同階段,理解為同一個東西也行,都是安全協議就對了。
CA證書頒發機構(CA, Certificate Authority)即頒發數字證書的機構。是負責發放和管理數字證書的權威機構,并作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。
Let’s EncryptLet"s Encrypt 成立于 2015 年的數字證書認證機構,成立的目的就是為了推行 https 協議在全世界的普及。主要贊助商包括電子前哨基金會、Mozilla基金會、Akamai以及思科。Let"s Encrypt 旨在以自動化流程消除手動創建和安裝證書的復雜流程,并推廣使萬維網服務器的加密連接無所不在,為安全網站提供免費的 SSL/TLS 證書。
說人話就是 Let’s Encrypt 就是一個可以給我們頒發授信證書的 CA 組織。
CertbotLet’s Encrypt 官方推出的授信證書生成客戶端。可以在 Debian,CentOS 等主流系統上運行
官方鏈接如下:https://certbot.eff.org/
獲取證書要升級到 https 首先要獲得 CA 簽發的安全證書文件,我們選擇的證書簽發機構是 Let’s Encrypt,目前 Let’s Encrypt 推薦的方法是安裝 Certbot 工具通過校驗服務器和域名的歸屬權方式來獲取證書
安裝Certbot如果你的英文能力比較好,那么請訪問 Certbot官網 根據官方教程來下載,官方教程更加細致,出了問題也方便查看官方的第一手資料。當然你也可以根據以下命令來安裝 Certbot 工具,這里我們以 debian9 系統為例來安裝
# 下載 certbot,如果是 centOS 等內核,可以使用 yum 命令 apt install certbot生成證書
certbot 安裝成功后,我們有兩種模式來獲取證書
第一種模式 Webrootcertbot certonly --webroot -w /root/docker_nginx/html -d liluyang.me -d www.liluyang.me
這個命令會為 liluyang.com 和 www.liluyang.com 這兩個域名生成一個證書
--webroot 模式會在 /root/docker_nginx/html 中創建 .well-known 文件夾,這個文件夾里面包含了一些驗證文件,certbot 會通過訪問 example.com/.well-known/acme-challenge 來驗證你的域名是否綁定的這個服務器。這個文件夾就是你 Nginx 下 index.html 所在的目錄,請自行根據自己服務器 Nginx 的配置情況修改這個參數。
如果執行成功,命令行會大致輸出以下參數表示成功:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/liluyang.me/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/liluyang.me/privkey.pem Your cert will expire on 2019-07-01. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let"s Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
以上信息中包含了生成后的證書的位置,過期時間等信息,根據提示信息我們打開 /etc/letsencrypt/live/ 文件夾,檢查這個文件夾中是否有你生成的對應網站的證書文件,如果成功,應該如下圖所示:
這個命令在大多數情況下都可以滿足需求,如果失敗了,請看下一種模式。
第二種模式Standalone如果你已經通過第一種模式生成證書成功,請跳過這里,直接看下一章
但是有些時候我們的一些服務并沒有根目錄,例如一些微服務,這時候使用 --webroot 就走不通了。certbot 還有另外一種模式 --standalone, 這種模式不需要指定網站根目錄,他會自動啟用服務器的 443 端口,來驗證域名的歸屬。我們有其他服務(例如nginx)占用了 443 端口,就必須先停止這些服務,在證書生成完畢后,再啟用。
certbot certonly --standalone -d example.com -d www.example.com
證書生成完畢后,我們可以在 /etc/letsencrypt/live/ 目錄下看到對應域名的文件夾,里面存放了指向證書的一些快捷方式。
這時候我們的第一生成證書已經完成了,接下來就是配置我們的 web 服務器,啟用 HTTPS。
如果生成失敗,并且你自己搜索之后又沒有能力解決,請在評論留言
如果生成失敗,并且你自己搜索之后又沒有能力解決,請在評論留言
如果生成失敗,并且你自己搜索之后又沒有能力解決,請在評論留言
安裝證書證書生成生成后,我們還要做最后的一步就是把證書的配置信息添加到 nginx 的 conf 目錄的 certs 文件夾中。我個人的 Nginx 是通過 docker 鏡像的方式運行的,并且我將本地的 /root/docker_nginx/conf 文件夾設置為了 Nginx 的配置文件夾,所以現在我們將證書 cert.pem 和 privkey.pem 拷貝到這個目錄。配置目錄如下
在 Nginx 的配置文件 nginx.conf 末尾添加以下配置,注意修改對應的配置參數,下面的配置模板僅供參考。
如果存在 conf.d/default.conf 文件請優先修改此文件,具體原因請百度
# 443 https 配置 server { listen 443 ssl http2; server_name liluyang.me www.liluyang.me; ssl on; ssl_certificate /etc/nginx/certs/cert.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/html; index index.html index.htm; } }
重啟 Nginx
到此為止,我們就已經成功的完成了 https 的配置。 現在打開我的博客 https://liluyang.com 就可以在瀏覽器端看到標有 安全 的網站標識字樣了,如下圖:
注意事項如果是 docker 部署的 nginx,最后重啟啟動 docker 時要將 443(https) 端口映射出來,否則無法訪問服務器的 443(https) 端口的。
docker run --volume "$PWD/html":/usr/share/nginx/html --volume "$PWD/conf":/etc/nginx -p 80:80 -p 443:443 -d nginx可選配置 強制使用 https 訪問網站
將 http 請求轉發到 https
請在配置文件夾中添加以下配置,然后重啟 Nginx 即可
server { listen 80; server_name liluyang.me www.liluyang.me; return 301 https://liluyang.me; }自動續訂
細心的同學可能會發現, https 證書的有效時間是非常短的,只有三個月,那么每隔三個月我們都要操作一次嗎?其實不是的,我們可以用過自動續訂的方式來刷新我們的證書有效時間。
測試自動續訂certbot renew --dry-run
如果測試成功,會生成如下提示:
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/liluyang.me.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator webroot, Installer None Renewing an existing certificate Performing the following challenges: http-01 challenge for liluyang.me http-01 challenge for www.liluyang.me Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed without reload, fullchain is /etc/letsencrypt/live/liluyang.me/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating "certbot renew" close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/liluyang.me/fullchain.pem (success) ** DRY RUN: simulating "certbot renew" close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.手動執行自動續訂
certbot renew -v開啟自動續訂
自動續訂也可以用 certbot 來實現,自動續訂之后會更新 pem 文件到 /etc/letsencrypt/live/example.com/ 。如果你的 nginx 配置沒有直接指向 /etc/letsencrypt/live/example.com/ 文件夾,請記得將 pem 文件夾拷貝到你的配置文件夾中
certbot renew --quiet --no-self-upgrade參考鏈接
《Nginx 容器教程》 BY 阮一峰
《https 教程參考鏈接》 BY 阮一峰
《Let"s Encrypt 證書生成工具Certbot》 BY Let"s Encrypt官方
《Let"s Encrypt 入門教程》
《Let"s Encrypt 使用教程,免費的SSL證書,讓你的網站擁抱 HTTPS》
《HTTPS 簡介及使用官方工具 Certbot 配置 Let’s Encrypt SSL 安全證書詳細教程》
《數字證書及 CA 的掃盲介紹和工作原理》
~
廣告:掃碼關注 知乎日報 小程序客戶端
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11490.html
摘要:服務器部署最后一篇文章,部署證書,升級為,其實網上相關教程有很多,但是略麻煩,本教程讓你一切從簡,分鐘搞定,免費一年哦申請證書免費申請的機構有很多,我用的是騰訊云的,進入騰訊云官網,云產品的證書管理,可免費申請。 nodejs服務器部署最后一篇文章,部署ssl證書,升級http為https,其實網上相關教程有很多,但是略麻煩,本教程讓你一切從簡,5分鐘搞定https,免費一年哦 申請s...
摘要:程序的入口類打開網址訪問,網頁顯示這就說明,從獲取了的屬性,而是從倉庫讀取的如圖本文源碼下載四參考資料優秀文章推薦史上最簡單的教程終章史上最簡單的教程第一篇服務的注冊與發現史上最簡單的教程第七篇高可用的分布式配置中心 轉載請標明出處: http://blog.csdn.net/forezp/a...本文出自方志朋的博客在上一篇文章講述zuul的時候,已經提到過,使用配置服務來保存各個服...
摘要:自動化測試和持續集成發布。在服務型環境中部署和調整數據庫或其他的后臺應用。容器與鏡像的關系類似于面向對象編程中的對象與類。容器容器是獨立運行的一個或一組應用。提供了龐大的鏡像集合供使用。 還在按照mysql安裝教程一步一步配置服務配置賬戶嗎?還在為每開一個新環境重新配置這些服務感到苦惱嗎?使用Docker,服務快速構建部署。解決你的研發時間,早點下班~現代技術,還不會docker你就落...
閱讀 2905·2021-11-15 18:02
閱讀 3799·2021-10-14 09:43
閱讀 3732·2021-09-08 10:41
閱讀 2521·2019-08-30 15:53
閱讀 1802·2019-08-30 14:14
閱讀 1943·2019-08-29 16:12
閱讀 3137·2019-08-29 14:03
閱讀 1280·2019-08-29 13:46