Let's Encrypt是一個免費而且開源的CA,且已經得到Mozilla、微軟等主要瀏覽器廠商的根授信。它極大低下降DV證書的入門門檻,進而推動全網的HTTPS化。php
Certbot is an easy-to-use client that fetches a certificate from Let’s Encrypt—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.html
本文全部的操做均在Ubuntu14.04下進行安裝和配置。python
本文同步更新地址: 使用Let's Encrypt加密你的小站nginx
直接安裝Let's Encrypt相對比較複雜和費事。爲了簡化安裝步驟,咱們就直接使用 Let's Encrypt 官網推薦的自動部署腳本Certbot。
根據環境選擇,咱們選擇Nginx+Ubuntu14.04,進入官方推薦腳本頁面,腳本以下:git
$ sudo apt-get update $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install python-certbot-nginx
由於我本機已經有了python和Nginx,因此個人腳本簡化爲了github
sudo apt-get update sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install certbot
接下來,咱們要生成本身的證書。web
service nginx stop
certbot certonly --standalone --email your@email.com -d yourdomain.com
Tips:
yourdomain.com目前必須是你的絕對域名,由於Let's Encrypt暫時還不支持泛域名,可是根據官方的消息說,預計2018年一月,會實現支持。Wildcard Certificates Coming January 2018ubuntu
到此,若是沒有什麼意外,執行完命令以後,你就能夠看到你的證書建立成功的提示!默認是在 /etc/letsencrypt/live 路徑下。瀏覽器
有了證書,接下來咱們就能夠配置Nginx了。
進入Nginx的配置文件夾(/etc/nginx/sites-available/),建立一個ssl.conf配置文件,在裏面增長一個server配置。
配置的內容,基本和監聽http的配置類似,主要的區別是監聽443端口和證書的加載,一個例子以下:緩存
server { # SSL configuration listen 443 ssl; listen [::]:443 ssl; ssl on; ssl_certificate /etc/letsencrypt/live/123456.cloud/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/123456.cloud/privkey.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; try_files $uri $uri/ =404; } }
保存,而後reload ngxin(nginx -s reload)配置。這時候咱們就能夠在域名前加上https,就能夠發現成功了!
有了Https,咱們通常也就不想要http的訪問了,或者說想把全部的http請求轉爲https。方法有不少種,個人方法是使用rewrite,把原先的Http所有轉化爲Https。
一個例子以下:
server { listen 80 default_server; listen [::]:80 default_server; server_name 123456.cloud; rewrite ^(.*) https://$server_name$1 permanent; }
自此,我的小站的Https加密工做完成。
通常來講,咱們都會把本身的Github Pages博客定義成本身的域名。可是會發現,變爲本身的域名以後,就沒有Https了。因此爲了能讓咱們的博客也用上Https,這時候也要折騰一下了。
原理很簡單,就是用本身的服務器進行反向代理,實際上訪問Github Pages博客就是訪問本身的服務器。
我本身的配置以下,
server { # SSL configuration listen 443 ssl; listen [::]:443 ssl; ssl on; server_name blog.123456.cloud; ssl_certificate /etc/letsencrypt/live/blog.123456.cloud/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blog.123456.cloud/privkey.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://151.101.229.147; } }
這裏須要注意的是,proxy_pass的地址是ping本身的Github Pages地址獲得的,也就是那個.io結尾的地址。而後在你的域名提供商那裏,修改你博客的A地址解析就能夠了。
固然,若是這裏你也僅限Https訪問的話,把你的http監聽也進行rewrite一下就行了!
Let’s Encrypt 生成的免費證書爲3個月時間,使用 certbot renew 能夠無限免費續簽 Https 證書。
爲了方便,咱們可使用crontab進行自動續期。注意在使用certbot renew的時候,要先關閉nginx才能成功。
一、Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping
緣由和解決方案:這是由於80、443端口被佔用,解除對端口的佔用便可,例如執行 service nginx stop ^_^
二、DNS解析生效慢
解決方案:你的域名供應商通常都會提供DNS服務器,ping一下dns服務器,獲得IP。而後在你本機的DNS配置裏,換成ping DNS服務器獲得IP既可。
三、Nginx配置不起做用,DNS也不起做用 解決方案: (1)、換除Chrome之外的瀏覽器 (2)、在Chrome中,F12打開控制檯,按住刷新按鈕,選擇‘清空緩存並硬性從新加載’ Chrome爲了加快速度,這個的緩存機制卻是挺討厭的。