使用Let's Encrypt启用加密(HTTPS)网站

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 ; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/93cd4611070a30c095d7c9290f897e3e.html