摘要:甚至和百度的搜索結果也正在給予的網(wǎng)站更高的排名和優(yōu)先收錄權。由于預設的解碼器是,所以就不能識別中文。那理解了這個錯誤原因后,我這邊首先想到的就是網(wǎng)站的配置文件中是否含有中文。打開一看,確實存在中文注釋。
相關知識 HTTP/HTTPS 是什么?
簡單來說,HTTP 是一個傳輸網(wǎng)頁內(nèi)容的協(xié)議,比如我們?yōu)g覽一個網(wǎng)頁,網(wǎng)頁上的文字、圖片、 CSS 、 JS 等文件都是通過 HTTP 協(xié)議傳輸?shù)轿覀兊臑g覽器,然后被我們看到。因為 HTTP 是明文傳輸?shù)模ㄟ^ HTTP 協(xié)議傳輸?shù)膬?nèi)容很容易被偷看和篡改,為了安全(你肯定不想被人偷看或者篡改網(wǎng)頁內(nèi)容吧,比如網(wǎng)站銀行密碼什么的。)就為 HTTP 協(xié)議再加上了一層 SSL/TLS 安全協(xié)議,所以就有了 HTTPS 。SSL/TLS 是什么?
SSL 是指安全套接字層(Secure Sockets Layer),內(nèi)心純潔的同學也可以理解為「帶安全套的 HTTP」,因為帶了安全套,所以當然會比較安全。TLS 是 傳輸層安全協(xié)議(Transport Layer Security),SSL 和 TLS 是同一個東西的不同階段,理解為同一個東西也行,都是安全協(xié)議就對了。為什么要部署 HTTPS?
說到底,就是 HTTPS 更安全。甚至為了安全,一個專業(yè)可靠的網(wǎng)站, HTTPS 是必須的。 Firefox 和 Chrome 都計劃將沒有配置 SSL 加密的 HTTP 網(wǎng)站標記為不安全,目前它們也正在聯(lián)合其他相關的基金會與公司推動整個互聯(lián)網(wǎng) HTTPS 化,現(xiàn)在大家訪問的一些主要的網(wǎng)站。如 Google 多年前就已經(jīng)全部啟用 HTTPS ,國內(nèi)的淘寶、搜狗、知乎、百度等等也全面 HTTPS 了。甚至 Google 和百度的搜索結果也正在給予 HTTPS 的網(wǎng)站更高的排名和優(yōu)先收錄權。怎么部署 HTTPS 呢?
你只需要有一張被信任的 CA ( Certificate Authority )也就是證書授權中心頒發(fā)的 SSL 安全證書,并且將它部署到你的網(wǎng)站服務器上。一旦部署成功后,當用戶訪問你的網(wǎng)站時,瀏覽器會在顯示的網(wǎng)址前加一把小綠鎖,表明這個網(wǎng)站是安全的,當然同時你也會看到網(wǎng)址前的前綴變成了 HTTPS ,不再是 HTTP 了。怎么獲得 SSL 安全證書呢?
理論上,我們自己也可以簽發(fā) SSL 安全證書,但是我們自己簽發(fā)的安全證書不會被主流的瀏覽器信任,所以我們需要被信任的證書授權中心( CA )簽發(fā)的安全證書。而一般的 SSL 安全證書簽發(fā)服務都比較貴,比如 Godaddy 、 GlobalSign 等機構簽發(fā)的證書一般都需要20美金一年甚至更貴,不過為了加快推廣 HTTPS 的普及, EEF 電子前哨基金會、 Mozilla 基金會和美國密歇根大學成立了一個公益組織叫 ISRG ( Internet Security Research Group ),這個組織從 2015 年開始推出了 Let’s Encrypt 免費證書。這個免費證書不僅免費,而且還相當好用,所以我們就可以利用 Let’s Encrypt 提供的免費證書部署 HTTPS 了。Let’s Encrypt 簡介
前面已經(jīng)介紹過, Let’s Encrypt 是 一個叫 ISRG ( Internet Security Research Group ,互聯(lián)網(wǎng)安全研究小組)的組織推出的免費安全證書計劃。參與這個計劃的組織和公司可以說是互聯(lián)網(wǎng)頂頂重要的先驅,除了前文提到的三個牛氣哄哄的發(fā)起單位外,后來又有思科(全球網(wǎng)絡設備制造商執(zhí)牛耳者)、 Akamai 加入,甚至連 Linux 基金會也加入了合作,這些大牌組織的加入保證了這個項目的可信度和可持續(xù)性。Certbot 簡介
ISRG 的發(fā)起者 EFF (電子前哨基金會)為 Let’s Encrypt 項目發(fā)布了一個官方的客戶端 Certbot ,利用它可以完全自動化的獲取、部署和更新安全證書。雖然第三方工具也可以使用,但是官方工具更權威,風險也更小,而且遇到問題也更容易解決,畢竟有官方的支持。實際操作 Certbot 使用方法
Certbot 的官網(wǎng)是https://certbot.eff.org/, 我們打開這個鏈接,選擇自己使用的 web server 和操作系統(tǒng)。選擇完之后,官網(wǎng)就會顯示出對應的安裝操作步驟。
以目前我所使用的服務器為例,web server 使用Nginx(1.12),操作系統(tǒng)是CentOS(7.3)。因為 Certbot 打包在EPEL中,所以在安裝 Certbot 之前要先安裝EPEL
yum -y install epel-release
然后按著官網(wǎng)給出的步驟提示命令安裝 Certbot
yum install python2-certbot-nginx
安裝完畢后,繼續(xù)輸入官網(wǎng)提示命令
certbot --nginx
運行此命令會自動獲取證書,并且 Certbot 會自動編輯Nginx配置文件配置HTTPS服務。
這邊在運行配置命令時遇到一個坑
ImportError: No module named "requests.packages.urllib3"
可以看出是缺少一個模塊包,看配置命令在命令臺的輸出,Certbot 是用 python 來寫 Nginx 配置。既然是用的 python,可以通過 pip list 命令查看 python 的依賴包列表。但是查看是已經(jīng)存在的,這個問題很快通過 Certbot 在 github 上的一個 Issues 找到了答案(Issues鏈接)。目前看是包的版本依賴有問題,執(zhí)行以下命令進行依賴包的重裝
pip uninstall requests pip uninstall urllib3 yum remove python-urllib3 yum remove python-requests yum install python-urllib3 yum install python-requests yum install certbot
再次執(zhí)行 certbot --nginx 命令成功。命令執(zhí)行后首先會提示輸入一個郵箱地址,主要作用是訂閱一些通知,輸入后回車。
[root@izuf6fco0zwyipdq9485s2z ~]# certbot --nginx Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx ▽ Enter email address (used for urgent renewal and security notices) (Enter "c" to cancel): demo@mail.com // 演示郵箱 Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
回車后 Certbot 就會自動請求下載 Let"s Encrypt 證書,并設置 Nginx 配置文件。期間會有一些同意相關協(xié)議和選擇哪個網(wǎng)站配置的交互,這個看輸出文字就能明白意思。
... ▽ server { (A)gree/(C)ancel: a - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let"s Encrypt project and the non-profit organization that develops Certbot? We"d like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: y Starting new HTTPS connection (1): supporters.eff.org Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: kisstime.top - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter "c" to cancel): 1 Obtaining a new certificate Performing the following challenges: http-01 challenge for kisstime.top Cleaning up challenges ...
但是這邊到 Certbot 設置 Nginx 配置文件的時候遇到一個坑,報如下一個錯誤
An unexpected error occurred: UnicodeDecodeError: "ascii" codec can"t decode byte 0xe5 in position 2: ordinal not in range(128) Please see the logfiles in /var/log/letsencrypt for more details.
熟悉 python 的同學應該對這個錯誤比較了解。不過博主 python 還是用的比較少,花了點時間了解了一下。
在解決錯誤之前,首先要了解unicode和utf-8的區(qū)別。unicode指的是萬國碼,是一種“字碼表”。而utf-8是這種字碼表儲存的編碼方法。unicode不一定要由utf-8這種方式編成bytecode儲存,也可以使用utf-16,utf-7等其他方式。目前大多都以utf-8的方式來變成bytecode。其次,Python中字符串類型分為byte string 和 unicode string兩種。如果在python文件中指定編碼方式為utf-8(#coding=utf-8),那么所有帶中文的字符串都會被認為是utf-8編碼的byte string(例如:mystr="你好"),但是在函數(shù)中所產(chǎn)生的字符串則被認為是unicode string。問題就出在這邊,unicode string 和 byte string 是不可以混合使用的,一旦混合使用了,就會產(chǎn)生這樣的錯誤。例如:
self.response.out.write("你好"+self.request.get("argu"))
其中,"你好"被認為是byte string,而self.request.get("argu")的返回值被認為是unicode string。由于預設的解碼器是ascii,所以就不能識別中文byte string。然后就報錯了。
那理解了這個錯誤原因后,我這邊首先想到的就是網(wǎng)站的 Nginx 配置文件中是否含有中文。打開一看,確實存在中文注釋。將注釋去掉,重新執(zhí)行命令成功不在報錯
接著命令交互會提示是否將所有HTTP重定向到HTTPS,我這邊選擇全部重定向也就是「2」。
Cleaning up challenges Deploying Certificate to VirtualHost: //這邊會顯示你的網(wǎng)站配置文件目錄 Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you"re confident your site works on HTTPS. You can undo this change by editing your web server"s configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press "c" to cancel): 2 Redirecting all traffic on port 80 to ssl in //這邊會顯示你的網(wǎng)站配置文件目錄 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://kisstime.top You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=kisstime.top - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: .../fullchain.pem Your key file has been saved at: .../privkey.pem Your cert will expire on 2019-02-14. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. 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
OK,當完成上面最后一步后,輸入如上信息后就表明 HTTPS 配置成功了!我們可以通過提示中的 SSL Server Test 網(wǎng)址來測試網(wǎng)站是否能夠 HTTPS 來進行訪問
You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=kisstime.top
事實證明,高興的太早了。。。通過測試網(wǎng)站和直接訪問域名發(fā)現(xiàn)網(wǎng)站都是訪問不了。思考了一下,確認下服務器的443端口是否開啟,我這邊用的是阿里云的服務器,登錄控制臺查看安全組規(guī)則,發(fā)現(xiàn)確實是443端口沒有開啟,配置開啟后,重新訪問成功。
其他 Nginx的設置說明基本上 Certbot 會在對應的 Nginx 配置文件加上下面的參數(shù):
server { # ... other configs # SSL 設置 listen 443 ssl; # set crt and key ssl_certificate .../fullchain.pem; ssl_certificate_key .../privkey.pem; # include 基本的 ssl 設置 include .../options-ssl-nginx.conf; # Certbot 也會生成一把 Diffie-Hellman 密鑰 ssl_dhparam .../ssl-dhparams.pem; # ... other configs }自動更新證書
Let’s Encrypt 免費SSL證書用起來非常方便,但每次申請只有三個月有效期,在每次到期之前都需要重新申請,Certbot 已經(jīng)提供了一鍵續(xù)訂的命令
certbot renew
我們可以通過添加此條命令的cron作業(yè)(或systemd計時器)來安排證書的自動續(xù)訂
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin 0 0,12 * * * certbot renew --quietCertbot 的 log 路徑
Certbot 的 log 預設路徑在 /var/log/letsencrypt,有需要可以去確認查看。
相關第三方certbot-auto是對腳本certbot的封裝,可以設置系統(tǒng)環(huán)境或自動升級。
參考資料牛頓曾經(jīng)說過:如果說我看得比別人更遠些,那是因為我站在巨人的肩膀上。(If I have seen further, it is by standing on the shoulders of giants.)感謝。
https://certbot.eff.org/
https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot
https://blog.csdn.net/use_my_heart/article/details/51303317
https://blog.hellojcc.tw/2018/05/02/setup-https-with-letsencrypt-on-nginx/
博客原文鏈接原文鏈接
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42633.html
摘要:使用的官方文檔,可以選擇系統(tǒng),切換對應的使用方法,我選擇的是安裝安裝過程中,若出現(xiàn)錯誤,可使用解決,注意后面的要替換為提示錯誤中的申請證書 Certbot使用的官方文檔,可以選擇系統(tǒng),切換對應的使用方法,我選擇的是Ubuntu16.04+Nginx 1、安裝Cerbot $ sudo apt-get update $ sudo apt-get install software-prop...
摘要:在上使用免費的如果你使用來做負載均衡,在上可以很方便的使用。提供期限為三個月的免費證書,到期之后需要,官方還提供自動的工具是一個自動申請和續(xù)期證書的工具。在官網(wǎng)可以找到各種和服務器下的安裝方法。常見的和安裝起來十分方便。 在Amazon Linux 上 使用 Lets encrypt 免費的SSL 如果你使用ELB來做負載均衡,在AWS上可以很方便的使用SSL。如果不使用ELB就需要自...
摘要:的服務器,你可以到騰訊云或者阿里云購買這樣的云主機。將域名自己解析到你的的云主機注意如果你的域名沒備案,在購買主機的時候,推薦大家購買騰訊云或者阿里云境外的主機。 原文來自 https://www.codecasts.com/blo... Lets Encrypt 的服務相信很多人都知道了,我個人認為這是最好的免費 SSL 服務。下面內(nèi)容即使如何在自己的網(wǎng)站上使用 Lets Encry...
閱讀 1654·2019-08-30 13:04
閱讀 2205·2019-08-30 12:59
閱讀 1764·2019-08-29 18:34
閱讀 1857·2019-08-29 17:31
閱讀 1255·2019-08-29 15:42
閱讀 3530·2019-08-29 15:37
閱讀 2857·2019-08-29 13:45
閱讀 2771·2019-08-26 13:57