本身作了一個iOS App,須要訪問本身的網站獲取數據,可是系統默認只能直接訪問https的網站。不想讓應用改用http的服務。所以,研究如何啓用https,本文便是介紹如何在CentOS上配合Nginx使用CertBot。html
環境nginx
CentOS(CentOS Linux release 7.2.1511
)git
Nginx(nginx version: nginx/1.6.3
)github
ExpressJS應用web
命令行,鍵入:瀏覽器
sudo yum install epel-release sudo yum install certbot
這裏我不想使用CertBot的standalone
模式,這個模式雖然能夠配置好服務器,可是之後Renew的時候,須要讓服務中止一下,再啓動。所以拋棄這個模式,咱們使用Webroot
配置模式。bash
由於,CertBot在驗證服務器域名的時候,會生成一個隨機文件,而後CertBot的服務器會經過HTTP訪問你的這個文件,所以要確保你的Nginx配置好,以即可以訪問到這個文件。服務器
修改你的服務器配置,在server模塊
添加:dom
location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /usr/share/nginx/html; } location = /.well-known/acme-challenge/ { return 404; }
能夠看到,上面的root,咱們讓他指向了/usr/share/nginx/html
,由於個人應用是經過NodeJS
的ExpressJS
寫的,若是修改源代碼的話,比較麻煩。所以我就讓檢驗的連接指向了nginx默認的文件夾下。ide
接着從新加載Nginx配置:
sudo service nginx reload
而後在命令行輸入:
sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d your.domain.com
上面記得替換your.domain.com
爲你本身的域名。
若是提示:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/your.domain.com/fullchain.pem. Your cert will expire on 20XX-09-23. 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
證書生成成功!
一樣,修改Nginx的虛擬主機配置文件,新建一個443端口的server配置:
server { listen 443 ssl; listen [::]:443 ssl ipv6only=on; ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/your.domain.com/chain.pem; // ... other settings ... }
上面記得替換your.domain.com
爲你本身的域名。
接着從新加載Nginx配置:
sudo service nginx reload
如今經過瀏覽器訪問你的網站:https://your.domain.com
試試,若是看到瀏覽器的綠色標誌,恭喜你設置成功!
不過因爲這個證書的時效只有90天,咱們須要設置自動更新的功能,幫咱們自動更新證書的時效。
先在命令行模擬證書更新:
sudo certbot renew --dry-run
模擬更新成功的效果以下:
------------------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/your.domain.com.conf ------------------------------------------------------------------------------- ** 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/your.domain.com/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.)
既然模擬成功,咱們就使用crontab -e
的命令來啓用自動任務,命令行:
sudo crontab -e
添加配置:
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
上面的執行時間爲:每週一半夜2點30分執行renew任務。
你能夠在命令行執行/usr/bin/certbot renew >> /var/log/le-renew.log
看看是否執行正常,若是一切OK,那麼咱們的配置到此結束!