专栏首页爱游博客Let’s Encrypt免费ssl证书申请

Let’s Encrypt免费ssl证书申请

介绍

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,进入官方推荐脚本页面,脚本如下:

  1. $ sudo apt-get update
  2. $ sudo add-apt-repository ppa:certbot/certbot
  3. $ sudo apt-get update
  4. $ sudo apt-get install python-certbot-nginx

因为我本机已经有了python和Nginx,所以我的脚本简化为了

  1. sudo apt-get update
  2. sudo add-apt-repository ppa:certbot/certbot
  3. sudo apt-get update
  4. sudo apt-get install certbot

接下来,我们要生成自己的证书。

获取证书前需要先停止 Nginx 服务

  1. service nginx stop

生成单域名证书

  1. certbot certonly --standalone --email your@email.com -d yourdomain.com

Tips: yourdomain.com目前必须是你的绝对域名,因为Let’s Encrypt暂时还不支持泛域名,但是根据官方的消息说,预计2018年一月,会实现支持。Wildcard Certificates Coming January 2018

到此,如果没有什么意外,执行完命令之后,你就可以看到你的证书创建成功的提示!默认是在 /etc/letsencrypt/live 路径下。

Nginx配置

有了证书,接下来我们就可以配置Nginx了。 进入Nginx的配置文件夹(/etc/nginx/sites-available/),创建一个ssl.conf配置文件,在里面增加一个server配置。 配置的内容,基本和监听http的配置相似,主要的区别是监听443端口和证书的加载,一个例子如下:

  1. server {
  2. # SSL configuration
  3. listen 443 ssl;
  4. listen [::]:443 ssl;
  5.     ssl on;
  6.     ssl_certificate   /etc/letsencrypt/live/123456.cloud/fullchain.pem;
  7.     ssl_certificate_key  /etc/letsencrypt/live/123456.cloud/privkey.pem;
  8.     ssl_session_timeout 5m;
  9.     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  10.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  11.     ssl_prefer_server_ciphers on;
  12.     root /var/www/html;
  13. # Add index.php to the list if you are using PHP
  14. index index.html index.htm index.nginx-debian.html;
  15.         location / {
  16. # First attempt to serve request as file, then
  17. # as directory, then fall back to displaying a 404.
  18.                 proxy_set_header X-Real-IP $remote_addr;
  19.                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  20.                 proxy_set_header Host $http_host;
  21.                 try_files $uri $uri/ =404;
  22.         }
  23. }

保存,然后reload ngxin(nginx -s reload)配置。这时候我们就可以在域名前加上https,就可以发现成功了!

仅限Https访问

有了Https,我们一般也就不想要http的访问了,或者说想把所有的http请求转为https。方法有很多种,我的方法是使用rewrite,把原先的Http全部转化为Https。 一个例子如下:

  1. server {
  2. listen 80 default_server;
  3. listen [::]:80 default_server;
  4.     server_name 123456.cloud;
  5.     rewrite ^(.*) https://$server_name$1 permanent;
  6. }

自此,个人小站的Https加密工作完成。

Github Pages使用Https

一般来说,我们都会把自己的Github Pages博客定义成自己的域名。但是会发现,变为自己的域名之后,就没有Https了。所以为了能让我们的博客也用上Https,这时候也要折腾一下了。 原理很简单,就是用自己的服务器进行反向代理,实际上访问Github Pages博客就是访问自己的服务器。 我自己的配置如下,

  1. server {
  2. # SSL configuration
  3. listen 443 ssl;
  4. listen [::]:443 ssl;
  5.         ssl on;
  6.         server_name blog.123456.cloud;
  7.         ssl_certificate   /etc/letsencrypt/live/blog.123456.cloud/fullchain.pem;
  8.         ssl_certificate_key  /etc/letsencrypt/live/blog.123456.cloud/privkey.pem;
  9.         ssl_session_timeout 5m;
  10.         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  11.         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  12.         ssl_prefer_server_ciphers on;
  13.         location / {
  14.                 proxy_set_header   X-Real-IP $remote_addr;
  15.                 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  16.                 proxy_set_header   Host $http_host;
  17.                 proxy_pass         http://151.101.229.147;
  18.     }
  19. }

这里需要注意的是,proxy_pass的地址是ping自己的Github Pages地址得到的,也就是那个.io结尾的地址。然后在你的域名提供商那里,修改你博客的A地址解析就可以了。 这里有个细节需要注意的是,ping自己的GitHub Pages,应该在Nginx所在的服务器进行ping,这样得到的IP是最快的! 当然,如果这里你也仅限Https访问的话,把你的http监听也进行rewrite一下就好了!

证书续期

Let’s Encrypt 生成的免费证书为3个月时间,使用 certbot renew 可以无限免费续签 Https 证书。 为了方便,我们可以使用crontab进行自动续期。注意在使用certbot renew的时候,要先关闭nginx才能成功。

常见的问题

1、Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping 原因和解决方案:这是因为80、443端口被占用,解除对端口的占用即可,例如执行 service nginx stop ^_^

2、DNS解析生效慢 解决方案:你的域名供应商一般都会提供DNS服务器,ping一下dns服务器,得到IP。然后在你本机的DNS配置里,换成ping DNS服务器得到IP即可。

3、Nginx配置不起作用,DNS也不起作用 解决方案: (1)、换除Chrome以外的浏览器 (2)、在Chrome中,F12打开控制台,按住刷新按钮,选择‘清空缓存并硬性重新加载’ Chrome为了加快速度,这个的缓存机制倒是挺讨厌的。

cambrian.render('tail')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • VulnHub靶机渗透之Matrix:v3

    这一次的靶机难度为中等难度,有所提升,以黑客帝国电影为背景,有点中二,感兴趣可以自行下载研究,下载连接如下:https://download.vulnhub.c...

    光明SAMA
  • 第一次vulnhub靶机的渗透

    最近一直在学习渗透测试相关的理论知识,看书看的头大,趁着老婆孩子回娘家的这段时间终于可以在晚上搞搞实验过过手瘾啦

    光明SAMA
  • 带妹玩转vulnhub(九)

    http://192.168.43.53/index.php?file=research.php

    用户5878089
  • VulnHub靶机渗透之DC:4

    这次的靶机为DC系列第四个靶机,这系列的靶机设计的很不错,每个靶机环境都比较相似,但是每一个靶机都需要不同的技术和技巧,闲话不多说,下载地址:https://d...

    光明SAMA
  • EwoMail开源邮件服务器搭建

    EwoMail是基于Linux的开源邮件服务器软件,集成了众多优秀稳定的组件,是一个快速部署、简单高效、多语言、安全稳定的邮件解决方案,帮助你提升运维...

    洛米唯熊
  • Kali Linux Web渗透测试手册(第二版) - 6.8 - 检测和利用命令注入漏洞

    我们以前已经看到如何使用PHP的system()函数在服务器中执行操作系统命令。有时,开发人员使用诸如此类的指令或具有相同功能的其他指令来执行某些任务。最终,它...

    7089bAt@PowerLi
  • Kali Linux Web渗透测试手册(第二版) - 7.2 - 通过利用Shellshock执行命令

    Shellshock(也叫Bashdoor)是2014年9月在bash shell中发现的一个bug,它允许通过存储在环境变量值中的函数执行命令。

    7089bAt@PowerLi
  • 免费内网穿透|服务端微信异步通知的调试

    $ sudo apt install software-properties-common

    猿哥
  • 带妹玩转vulnhub(五)

    今天晚上听说炫酷的女装大佬国庆期间要出去旅游,不能带我飞,很伤心?,一怒之下我又来找萌妹了-。还有没有妹子了晚上出来玩丫(小声比比),哥哥身体很好!??咳咳!

    用户5878089
  • Web渗透(二) 环境搭建

    今天收获很多,体检,逛街,吹牛,算是对自己的职业生涯有了一个新的认识,不管怎么样,技术是要做下去的,不管多晚,不管多累,希望刚入门的师傅们能够喜欢,与其说是教程...

    用户5878089

扫码关注云+社区

领取腾讯云代金券