Let's Encrypt是一个免费并且开源的CA,且已经获得Mozilla、微软等主要浏览器厂商的根授信。它极大低降低DV证书的入门门槛,进而推进全网的HTTPS化。
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.
本文所有的操作均在Ubuntu14.04下进行安装和配置。
安装
直接安装Let's Encrypt相对比较复杂和费事。为了简化安装步骤,我们就直接使用 Let's Encrypt 官网推荐的自动部署脚本Certbot。
根据环境选择,我们选择Nginx+Ubuntu14.04,进入官方推荐脚本,脚本如下:
$ sudo apt-get
update
$ sudo
add-apt-repository ppa:certbot/certbot
$ sudo apt-
get update
$ sudo apt-
get install Python-certbot-nginx
因为我本机已经有了python和Nginx,所以我的脚本简化为了
sudo apt-get
update
sudo
add-apt-repository ppa:certbot/certbot
sudo apt-
get update
sudo apt-
get install certbot
接下来,我们要生成自己的证书。
到此,如果没有什么意外,执行完命令之后,你就可以看到你的证书创建成功的提示!默认是在 /etc/letsencrypt/live 路径下。
Nginx配置
有了证书,接下来我们就可以配置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访问
有了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
一般来说,我们都会把自己的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
;
}
}