为域名申请免费的SSL证书,实现启用HTTPS加密
前言
最近打算要部署一些个人项目, 打算申请SSL证书来实现HTTPS加密。
以下是我个人的实践过程和一些遇到的问题。我是用了两台服务器:一台是系统为Ubuntu20的服务器和一台系统为Centos7.9的服务器。都是阿里云上的服务器(也是白嫖的服务器(bushi))。拿来练练手。
注意: 申请证书是需要域名的,因为证书是和域名进行绑定的,不是和ip地址进行绑定的!!!
Let’s Encrypt 简介
-
Let’s Encrypt是一个免费的证书颁发机构,致力于提供简单易用的HTTPS加密证书。它由非盈利组织Internet Security Research Group(ISRG)发起,目的是让整个互联网更加安全、私密和安全。Let’s Encrypt提供了一个自动化的、开放的、免费的和可信的证书颁发服务,使得任何人都可以在自己的网站上启用HTTPS加密,从而保护用户的隐私和安全。
-
Let’s Encrypt的证书使用ACME协议进行颁发和管理,该协议是一个开放标准,许多客户端和工具都支持它。颁发的证书可以使用最新的加密算法和密钥长度,并且支持所有现代Web浏览器。
-
使用Let’s Encrypt证书可以保证网站数据的加密传输,防止黑客窃取用户的个人信息,提升网站的安全性和可靠性。
-
比如:Vercel这个平台也是通过 Let’s Encrypt 来为其托管的项目提供 SSL 证书的。Vercel 的架构允许开发者将其前端应用和后端服务一起部署,而 Vercel 可以通过 Let’s Encrypt 为这些服务自动申请 SSL 证书,让其变得更加安全。
Certbot是一个由Let’s Encrypt提供的免费、开源的自动化证书颁发工具,可以轻松地在服务器上安装、更新和管理Let’s Encrypt证书。Certbot可以与许多不同的Web服务器和操作系统集成,包括Apache、Nginx和Docker等。使用Certbot,您可以自动为您的网站配置SSL/TLS,使您的网站更加安全和可靠。
Ubuntu上的用法:
Certbot 是一个 Let’s Encrypt 提供的免费证书申请工具,可以用它来快速、简单地获得 Let’s Encrypt SSL 证书。以下是 Certbot 的基本使用方法:
- 安装 Certbot:可以按照 Certbot 的官方文档来安装 Certbot,不同的操作系统安装方式略有不同。例如,在 Ubuntu 系统上,使用以下命令来安装 Certbot:
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
这将安装 Certbot 工具和与 Nginx 服务器的插件。
- 申请证书:在安装 Certbot 后,你可以使用以下命令来申请 SSL 证书:
sudo certbot --nginx -d example.com
其中 example.com
是您要申请证书的域名。此命令将向 Let’s Encrypt 发出证书申请,并自动配置 Nginx 服务器以使用该证书。
- 自动续期证书:Let’s Encrypt 的 SSL 证书有效期只有 90 天,因此您需要定期续期证书。Certbot 可以自动续期证书,你可以使用以下命令启用自动续期功能:
sudo certbot renew --dry-run
此命令将在测试模式下运行,以确保自动续期功能正常工作。如果一切正常,你可以从 cron 任务中运行此命令以定期续期证书。
以上是 Certbot 的基本操作步骤,具体使用过程中,还可以根据您的需要和场景选择不同的插件和参数来进行配置。
注意 : 发生报错很大可能是域名没有备案被限制了! 或者是你的端口号80或433没有开启
Centos上的用法
Certbot 是一个开源工具,用于自动化获取和续订 Let’s Encrypt SSL 证书。以下是在 CentOS 上使用 Certbot 获取证书的步骤:
-
安装 EPEL 源:在 CentOS 上使用 Certbot 需要先安装 EPEL 源。可以通过以下命令安装 EPEL 源:
sudo yum install epel-release
-
安装 Certbot:使用以下命令安装 Certbot:
sudo yum install certbot python3-certbot-nginx
这将同时安装 Certbot 和 Certbot 插件,以便与 Nginx 一起使用。
-
获取证书:运行以下命令以获取证书:
sudo certbot --nginx -d example.com -d www.example.com
将 “example.com” 和 “www.example.com” 替换为你要申请证书的域名。该命令会通过 Nginx 配置自动配置 SSL 证书,并启用 HTTPS。
可能会出现下面的问题
这个错误提示是因为Certbot的Nginx插件未安装。可以通过以下命令安装:
sudo yum install certbot-nginx
上面提示让你输入你的邮箱, 方便证书申请成功或者到期通知
输入
y
输入
y
这个错误提示是因为在申请证书时同时使用了通配符域名和子域名,而 Let’s Encrypt 不支持在同一个证书中同时包含通配符域名和其对应的子域名。
可以尝试使用以下命令来申请两个单独的证书,一个包含通配符域名,一个包含子域名:
sudo certbot --nginx -d *.example.com sudo certbot --nginx -d www.example.com
根据错误信息,Certbot 无法找到与
www.zenytech.xyz
匹配的 Nginx 服务器块。你需要在 Nginx 配置文件中为该域名添加一个服务器块,并设置server_name
指令以匹配您的域名。需要执行以下步骤:-
打开 Nginx 配置文件,通常位于
/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
。先备份一份源文件 :
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
然后使用vi进行修改
vi /etc/nginx/nginx.conf
, 按i
键进入编辑 -
在文件中查找
server
块。如果找不到,请添加一个新的server
块。 -
在
server
块中添加以下内容:server_name www.zenytech.xyz;
退出按
Esc
键, 输入:wq
保存并退出 -
使用
nginx -t
命令检查配置文件语法是否正确 -
重新加载 Nginx:
sudo systemctl reload nginx
-
然后再次运行 Certbot 命令:
sudo certbot --nginx -d www.zenytech.xyz
如果你希望续订并更新证书,则选择2。如果你只是想重新安装现有证书,则选择1。选择取决于你是否需要新证书并是否想继续更新当前证书。这里选择1。
在Ubuntu上使用Certbot申请证书时,通常情况下Certbot会自动检测你的Nginx配置文件,并根据域名配置HTTPS支持。但是在某些情况下,如果你的Nginx配置文件比较复杂,Certbot可能无法正确检测并修改配置文件。这时,你需要手动修改Nginx配置文件,以便让Certbot能够正确地为你的域名申请证书。
在CentOS上也是一样,如果你的Nginx配置文件不够简单,那么可能需要手动修改配置文件以确保Certbot能够正确检测和修改配置。
已经成功地使用 Certbot 申请了证书并将其部署到您的 Nginx 服务器上。可以通过访问 https://www.zenytech.xyz 来检查证书是否正常工作。同时,Certbot 给出了一些支持的捐款链接,如果喜欢 Certbot,可以考虑向相关的组织进行捐赠以支持他们的工作。(学生党一般不考虑这个问题,不然我还要你免费的证书干嘛)
再试一下申请
sudo certbot --nginx -d *.zenytech.xyz
这个通配符的网站同样也需要修改Nginx中的配置
在 CentOS 上,Certbot 不会自动修改 Nginx 配置文件。因此,在申请通配符证书之前,你需要手动修改 Nginx 配置文件,以便包括这两个域名。而在 Ubuntu 上,Certbot 将自动修改 Nginx 配置文件。
输入
vi /etc/nginx/nginx.conf
, 按i
键进入编辑在 Nginx 配置文件中的 server_name 部分,可以这样写:
server_name zenytech.xyz *.zenytech.xyz;
按
Esc
退出, 输入:wq
退出vi编辑并保存然后再输入
sudo certbot --nginx -d *.zenytech.xyz
进行证书申请
哦豁, 发生报错: 错误提示表明 Let’s Encrypt CA 不支持当前选择的认证方式并满足证书颁发的要求,因此建议尝试使用支持 DNS 挑战的认证插件进行证书申请。DNS 挑战可以通过在域名 DNS 解析记录中添加特定的 TXT 记录来验证域名的所有权。可以尝试使用 Certbot 插件
certbot-dns-cloudflare
或certbot-dns-google
等来完成 DNS 挑战。在使用这些插件之前,你需要先进行相应的配置并且确保 DNS 解析已经生效。经查询:Certbot默认使用HTTP-01或TLS-ALPN-01验证方式,而这两种方式在使用通配符证书时并不可用。通配符证书只能使用DNS-01验证方式。
ok, 那么麻烦的话就先不申请了!
-
-
自动续订证书:Certbot 证书默认有效期为 90 天。为了确保你的网站始终使用有效的证书,建议设置自动续订。使用以下命令测试自动续订:
sudo certbot renew --dry-run
可能会发生以下问题:
发生了报错, 根据日志来看,LetsEncrypt试图使用HTTP-01的验证方式来验证证书,但是在尝试访问http://www.zenytech.xyz/.well-known/acme-challenge/JdKTFlJKPtaaea13iyZ9r2uZLn41rD5teaaSabKEVPc时,返回了403 Forbidden错误,导致验证失败。我尝试着用浏览器访问这个链接, 发现:
因为是使用国内的服务器,而且域名没备案, 所以被封禁了。。。。
因为阿里云新申请的域名,还没备案成功
阿里云的备案链接: https://beian.aliyun.com/order/index.htm?spm=a2c4g.36922.0.0.683a770eyvoiXC
如果测试成功,则将在证书到期之前自动更新证书。建议将该命令添加到 crontab 中,以在每次证书过期前自动续订证书:
sudo crontab -e
然后添加以下行:
0 0 1 * * certbot renew
这将在每个月的第一天检查证书是否需要更新,并在需要时自动更新它们。
可以使用以下命令检查证书的有效期:
sudo openssl x509 -noout -dates -in /etc/letsencrypt/live/xxxxxxxxx/fullchain.pem
注意替换域名:xxxxxxxx替换成你的域名
比如我的域名为www.zenytech.xyz
sudo openssl x509 -noout -dates -in /etc/letsencrypt/live/www.zenytech.xyz/fullchain.pem
该命令将显示证书的开始和过期日期。如果证书已过期,你需要重新申请证书。
上诉操作是申请SSL证书并为Nginx配置好,申请成功后, 可以试试使用域名进行访问你的Nginx服务(注意域名可能需要备案,不然会被封掉,访问不了),若能访问域名的话,你就会看到浏览器那栏是https的请求,说明证书能使用和进行加密了。
申请的证书都默认放在/etc/letsencrypt/live/
目录下
如果其他应用需要使用https安全加密,可以使用证书进行配置,注意证书是和域名进行绑定的,不是和服务器的IP地址绑定的.所以如果你是拿ip地址去访问,尽管有https,但浏览器还是提示不安全的连接
ok,以上就是我申请SSL证书的全过程!
Tips :
如果没有域名或者服务器, 可以去阿里云的免费试用那里领取使用(白嫖)
https://free.aliyun.com 可以领取一年0元的(top,xyz,love)域名试用,还有三个月的服务器试用。(白嫖不亏)学生的话,可以领取学生优惠, 能领取7个月的免费服务器
https://developer.aliyun.com/plan/student
需要的话自行探索!