参考文章:Let’s Encrypt,免费好用的 HTTPS 证书

先放官网

Let’s Encrypt

Let’s Encrypt 是免费、自动化、开放的证书签发服务, 它得到了 Mozilla、Cisco、Akamai、Electronic Frontier Foundation 和 Chrome 等众多公司和机构的支持,发展十分迅猛


所需环境

  • 一个 HTTP 服务,以 Nginx 为例

  • python

  • 两个目录:

    /site 网站目录

    /site_site_cert 保存证书的目录

证书的颁发有两种方式:

通过在线生成

通过网址在线生成,需要验证文件

通过程序生成

通过本地 IIS,生成后会自动绑定本地 IIS 站点上的HTTPS 域名。

我使用的是第一种方法:在线生成,原理是:先在你的服务器上传一个密钥,然后Let’s Encrypt会对网站进行访问,下载密钥进行验证。


开工

创建账号

首先创建一个目录,我是在根目录下创建文件夹site_cert

mkdir /site_cert

这个文件夹用来存放各种临时文件和最后的证书文件。进入这个目录,创建一个RSA私钥,用于Let’s Encrypt识别你的身份

openssl genrsa 4096 > account.key

创建CSR文件

在这之前,还需要创建域名私钥(一定不要使用上面的账户私钥)

openssl genrsa 4096 > domain.key

我参考的文章提到了两种私钥RSA和ECC,我现在也还不懂什么原理,把两种区别放出来吧

RSA 私钥:兼容性好

ECC 私钥:部分老旧操作系统、浏览器不支持。优点是证书体积小

两个用于身份身份验证的私钥文件创建好,就可以生成CSR(Certificate Signing Request,证书签名请求)文件了,申请时可以把域名带 www 和不带 www 的两种情况都加进去,一张证书最多可以包含100个域名。

openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com")) > domain.csr
  • 其中DNS的yoursite.comwww.yoursite.com记得要换成自己的域名

我在这里遇到了问题提示找不到/etc/ssl/openssl.cnf文件,在网上找的的解决办法是

执行 :

openssl version -a

会输出openssl的信息,其中OPENSSLDIR对应的路径就是openssl.cnf文件的地址,自行将上面的cat /etc/ssl/openssl.cnf,改为自己的路径运行。

配置验证服务

前面介绍过了Let’s Encrypt验证的原理是在你的服务器上生成一个随机文件,在通过创建CSR时的域名进行访问下载,如果成功表明你对这个域名的拥有权。

创建用于存放网站的目录site以及用于验证文件存放的子目录

mkdir -p /site/.well-known/acme-challenge/

然后再Nginx中配置:

server {server_name www.yoursite.com yoursite.com;location ^~ /.well-known/acme-challenge/ {alias /home/xxx/www/challenges/;try_files $uri =404;}location / {rewrite ^/(.*)$ https://yoursite.com/$1 permanent;}
}
  • 别忘了改yoursite

这个配置会优先查找/site目录下的网站,建议保留以后证书认证还可以用到,因为颁发的证书一次可以使用90天。

获取网站证书

先下载acme-tiny脚本到之前的site_cert目录:

wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

指定账户私钥、CSR以及网站上验证文件的目录,执行脚本:

python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /fakesite/.well-known/acme-challenge/ > ./signed.crt

执行成功的话会在当前目录生成一个signed.crt文件,这个文件就是申请好的证书文件。

我在这里出现了错误提示

ValueError: Wrote file to /site/.well-known/acme-challenge/blablabla, but couldn't download http://www.yoursite.com/.well-known/acme-challenge/blablabla

大概的意思就是,在网站目录里写入了一个验证文件,但是Let’s Encrypt的服务器访问不到你的网站,建议先去看一看Nginx配置是否出错,再有可能是自己的域名无法在国外解析,建议暂时使用国外的DNS解析商。推荐的有:

Hurricane Electric Free DNS

ZoneEdit

CloudFlare

这些都是免费的,但是因为我自己的域名后缀为.tk,上面第一个DNS解析商警告因为.tk域名滥用,不给解析。

网站证书到手以后,还要下载 Let’s Encrypt 的中间证书。证书链中大部分都是「站点证书 – 中间证书 – 根证书」这样三级。服务端只需要发送前两个证书即可。我们需要把中间证书和网站证书合在一起:

wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pemcat signed.crt intermediate.pem > chained.pem

最终,在Nginx中添加证书配置,并reload,我的部分配置如下

server {listen 443 ssl;ssl_certificate       /site_cert/chained.pem;ssl_certificate_key   /site_cert/domain.key;ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers           HIGH:!aNULL:!MD5;server_name           braindance.tk;index index.html index.htm;root …………………………
}

执行

nginx -s reload

证书自动更新 计划任务

​ 至此我们已经成功的获取到了Https证书,但是获取到的Https证书只有90天的时效,到期的话还需要使用相同的方法进行更新,为了避免某次忘记更新导致网站出现问题,我们可以使用linux中的crond服务为我们自动更新证书。

vi/site_cert 文件夹 创建 计划任务脚本 renew_cert.sh

vi /site_cert/renew_cert.sh

通过vi输入以下内容

#!/bin/bashcd /fakesite_cert/
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /fakesite/.well-known/acme-challenge/ > ./signed.crt || exit
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem
nginx -s reload

更新的大致过程是,运行python脚本再次更新signed.crt申请证书文件,再进行证书合并写入chained.pem文件。

然后给这个文件赋予 可执行 属性

chmod +x /fakesite_cert/renew_cert.sh

使用crontab -e指令打开定时任务配置文件,并加入以下内容。

0 0 1 * * /home/xxx/shell/renew_cert.sh >/dev/null 2>&1

对于上面指令的具体意思请自行搜索crontab命令

完工

Let‘s Encrypt 免费Https证书相关推荐

  1. let‘s encrypt免费https证书(certbot)

    let's encrypt免费https证书(certbot) 准备工作 访问let's encrypt官网 具体配置步骤 第一步,以具有 sudo 权限的用户身份通过​​ SSH 连接到运行您的 H ...

  2. Centos使用let's encrypt免费https证书(certbot)

    最近做一个新加坡的项目,要用到亚马逊云服务AWS,遇到一个https的证书问题.以前国内项目都用的阿里云提供的免费https证书,直接推送到SLB完事.AWS也有同样的功能,使用ELB(负载均衡)提供 ...

  3. acme.sh申请Let‘s Encrypt 免费HTTPS证书

    1.安装acme.sh(新的操作流程已更新,更新时间2022-10-14) 该文档基于ubuntu 20.04操作,基本大同小异,这里附上官方文档供对比参考,如果出现其他问题的可以邮箱留言 14067 ...

  4. let‘s encrypt 免费https证书申请

    安装下载certbot https://certbot.eff.org/instructions?ws=nginx&os=ubuntuxenial 执行 certbot run -a manu ...

  5. 万由u-nas系统用上Let’s Encrypt 免费Https安全证书

    万由u-nas系统用上Let's Encrypt免费Https安全证书 ----by icarus 2019.2.25 前言: 万由的https证书是自签发的,你在外网访问的时候会显示不安全,就很烦, ...

  6. 教你快速撸一个免费HTTPS证书

    摘要: 免费 HTTPS 证书,了解一下? HTTPS 已成为业界标准,这篇博客将教你申请Let's Encrypt的免费 HTTPS 证书. 本文的操作是在 Ubuntu 16.04 下进行,使用 ...

  7. 利用Certbot工具快速给网站部署Let's Encrypt免费SSL证书

    使用https证书的话,强制使用域名 很多商家也都提供免费证书,比如腾讯云提供免费一年GeoTrust DV SSL证书.Let's Encrypt永久免费但需要90天激活一次续约,当然如果要购买证书 ...

  8. K8s 中使用 cert-manager 申请免费 Https 证书

    K8s 中使用 cert-manager 申请免费 Https 证书 Intro 最近在尝试将自己的应用从自己用 kind 部署的一个 k8s 集群迁移到 Azure 的 AKS 上,其中一个问题就是 ...

  9. wordpress个人博客申请Let’s Encrypt免费SSL证书

    最近,在网上火透半边天的,非 Let's Encrypt 的免费SSL证书莫属了.Let's Encrypt 是一个将于2015年末推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过 ...

最新文章

  1. Python 之父立 Flag:明年要把 Python 速度提高 2 倍!
  2. Linux command: ps -ef |grep java
  3. HTML5 手写板签名
  4. Install Qt5 on Ubuntu 16.04
  5. 存储过程实现无限级分类(3)
  6. C# 虚方法与抽象方法区别
  7. 宇宙的最原始状态是个什么样子
  8. 阿里云主机CentOS添加硬盘
  9. java数组实验心得体会_学习JAVA之数组小结
  10. Exchange 2010 OWA 无法使用关键字搜索
  11. Unity中设置对象匀速移动
  12. (亲测)躺着破解IDM下载权限,治疗不用破解补丁的强迫症们
  13. PS:修复图片模糊(字体)
  14. 84.常用的返回QuerySet对象的方法使用详解:select_related, prefetch_related
  15. 编写属于自己的Python第三方库
  16. 无限极分类之查找家谱树
  17. JAVA大学生活动中心场地管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  18. OpenRASP管理后台安装(亲测)
  19. Bowtie2去除污染的使用方法
  20. vr应急救援模拟系统是什么何优势|广州华锐互动

热门文章

  1. 【转载】Java线程池详解
  2. Tensorflow学习—— Estimator简介
  3. C++——OOP(Object-Oriented Programming) vs. GP(Generic Programming)
  4. 【今日CV 视觉论文速览】21 Nov 2018
  5. 设计模式——单例模式详解
  6. 字体图标使用教程 阿里字体图标iconfont 鲸鱼编程
  7. mysql 连接查询 子查询 备份 笔记
  8. 断开式绑定ComboBox 关键命令 1201
  9. 班级的每日作业和任务目标
  10. 吃货阶段03 需求 实现我要下单的功能 0927