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为了加快速度,这个的缓存机制却是挺讨厌的。