Certbot讓網站擁有免費https證書
certbot certonly --webroot -w /var/www/html/awaimai -d awaimai.com -d www.awaimai.com
網站使用http協議,在chrome瀏覽器中總是報不安全,看著就讓人不爽,自己建的網站,不安全總是會讓自己心慌慌。看到有頭有臉的網站都是https開頭,心中自然也想裝逼一把,讓自己的網站高階大氣上檔次。搞一搞吧!Let's Encrypt(certbot)!
Let's Encrypt是一個免費的SSL證書發行專案,自動化發行證書,證書有90天的有效期,適合我們個人或者臨時使用。certbot是Let's Encrypt釋出的新的工具,生成證書的使用方法和證書續簽就變得更加簡單了。但是目前看certbot在一些老版本的Linux發行版上的相容性還是有問題的,特別是在CentOS 5上因為python版本過低是無法用的,CentOS 6上需要先安裝epel才行,當然也有很多第三方的工具你也可以自己去嘗試一下。
執行環境centos7.4 nginx 1.14.0
1、安裝certbot客戶端
[[email protected] nginx]# yum install certbot Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 epel | 3.2 kB 00:00:00 extras | 3.4 kB 00:00:00 nginx | 2.9 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/4): extras/7/x86_64/primary_db | 156 kB 00:00:00 (2/4): epel/x86_64/updateinfo | 937 kB 00:00:00 (3/4): updates/7/x86_64/primary_db | 1.3 MB 00:00:00 (4/4): epel/x86_64/primary | 3.6 MB 00:00:00 Loading mirror speeds from cached hostfile epel 12738/12738 Package certbot-0.27.1-1.el7.noarch already installed and latest version Nothing to do
我已經安裝過了。
2、獲取證書
certbot certonly --webroot -w /home/zengfp/www/blog/public -d zengfanping.com -d www.zengfanping.com
這個命令會為 zengfanping.com 和 www.zengfanping 這兩個域名生成一個證書。
使用 --webroot
模式會在 /home/zengfp/www/blog/public 中建立.well-know資料夾。
這個資料夾裡面包含了一些驗證檔案,certbot 會通過訪問 example.com/.well-known/acme-challenge
證書生成完畢後,我們可以在/etc/letsencrypt/live/
目錄下看到對應域名的資料夾,裡面存放了指向證書的一些快捷方式。
3、standalone模式
上面--webroot這個命令在大多數情況下都可以滿足需求。
但是有些時候我們的一些服務並沒有根目錄,例如一些微服務,這時候使用 --webroot 就走不通了。
certbot 還有另外一種模式--standalone
, 這種模式不需要指定網站根目錄,他會自動啟用伺服器的443埠,來驗證域名的歸屬。
我們有其他服務(例如nginx)佔用了443埠,就必須先停止這些服務,在證書生成完畢後,再啟用。
certbot certonly --standalone -d example.com -d www.example.com
4、獲取證書出錯
類似的如下:
IMPORTANT NOTES: The following errors were reported by the server: Domain: www.zengfanping.com Type: connection Detail: Fetching http://www.zengfanping.com/.well-known/acme-challenge/xOiPmxEoy3bm8SZkNOskBj83OPOCmRHN6vvIQFSL-8I: 2 connection refused To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you’re using the webroot plugin, you should also verify that you are serving files from the webroot path you provided.
這個時候你就需要檢查自己的專案目錄是否正確,域名解析是否正確,如果你在你的server_name處寫了多個域名,就需要對每個域名都進行解析。還有你的專案路徑一定要正確
server { listen 80 default_server; server_name zengfanping.com www.zengfanping.com; rewrite ^/(.*) https://www.zengfanping.com/$1 permanent; root /home/zengfp/www/blog/public; index index.html; location ~ /.well-known { allow all; } # location / { # root /home/zengfp/www/blog/public; # index index.html index.htm; # } access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/host.error.log; }
在進行--webroot這個模式獲取證書的時候,我把我的nginx服務關了,一直獲取不來證書,而且一直報上面那個錯誤。報錯之後還是需要點耐心的,因為如果你一直重複上面那個獲取證書的命令,就會提示你獲取證書太頻繁,耐心啊。最後我把nginx服務啟動之後,再次獲取證書,就成功了。本人的一次坑,希望夥伴們不要走。
5、啟用https
本人配置:
server { listen 80 default_server; server_name zengfanping.com www.zengfanping.com; rewrite ^/(.*) https://www.zengfanping.com/$1 permanent; root /home/zengfp/www/blog/public; index index.html; location ~ /.well-known { allow all; } # location / { # root /home/zengfp/www/blog/public; # index index.html index.htm; # } access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/host.error.log; } server { listen 443 ssl; ssl on; server_name www.zengfanping.com; root /home/zengfp/www/blog/public; index index.html; ssl_certificate /etc/letsencrypt/live/www.zengfanping.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.zengfanping.com/privkey.pem; location ~ /\.ht { deny all; } }
上面的配置中有個rewrite,就是讓輸入上面域名中的任何一個,都讓其指向 https://www.zengfanping.com 這個地址。
最終效果:
6、跨過每一個小坑,讓自己每天都進步一點點!您的點贊是我前進的鼓勵!希望你不要吝嗇哦。個人部落格網址:https://www.zengfanping.com。不吝賜教