序言
一直用的cloudflare的免费证书,看同事聊到证书续签的事,想到用了这么久的https还没自己弄过,就动手实践一下。
0x01 服务器环境
~# lsb_release -a :
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
0x02 申请Let's Encrypt 证书
百度了一下,申请免费证书有好多方法:阿里云、腾讯云、certbot,这里随缘找个教程,用的是certbot。
#1.安装证书工具
apt-get install letsencrypt
#2.申请证书
#分别对两个域名申请不同的证书,等下测试配置http转https的两种方式
certbot certonly --webroot -w /var/www/cert -d cert.foxyu.cn
certbot certonly --webroot -w /var/www/cert2 -d cert2.foxyu.cn
参数解析:
certbot certonly 表示使用 certbot 工具申请证书,并只申请证书,不进行其他操作;
--webroot 表示使用 Webroot 模式,即通过在 Web 根目录下放置临时文件来验证域名的拥有权;
-w /var/www/cert 表示 Web服务1 的根目录路径;
-d cert.foxyu.cn 表示要申请证书的域名,如果想要申请同时包含www.foxyu.cn和cert.foxyu.cn域名的证书,可以使用 -d www.foxyu.cn -d cert.foxyu.cn
#注意
需要注意的是,在使用 certbot 申请证书之前,需要确保已经正确配置了 DNS 解析,并将域名指向了正确的服务器 IP 地址。
输入你的邮箱,用于接收紧急通知和恢复。
第二步是否同意他们的服务条款(Agree)。第三步是否要接收他们的广告邮件(No)
这里第一次的时候报错了,因为这个域名无法正常访问,刚加的子域名,还没配置。
重新排查后保证域名的http服务可以正常访问,重新执行申请命令:
申请成功,申请的证书保存在/etc/letsencrypt/live/域名目录下:
证书文件为: fullchain.pem 密钥文件为:privkey.pem 。
0x03 nginx配置证书
直接在Nginx引用这两个文件就可以了
查看证书,https配置成功:
0x04 配置http跳转https
4.1 重定向
将HTTP 请求进行重定向到 HTTPS,如果客户端请求的是 HTTP,则服务器会返回 301 状态码,让客户端重新以 HTTPS 方式请求。
注意:
-
这种方式客户端有一个301跳转
-
如果有代理服务器,则这种方式只要求客户端和反向代理服务器之间建立的是普通的 HTTP 连接即可。
效果:
4.2 代理
将 HTTP 请求通过反向代理转发到 HTTPS 服务器上,如果客户端请求的是 HTTP,则服务器会将请求通过代理转发到后端的 HTTPS 服务器上,然后返回代理服务器收到的响应。
注意:
-
这种方式客户无感,没有一个跳转的步骤
-
但是要求反向代理服务器和后端的 HTTPS 服务器都需要正确配置 SSL 证书,否则客户端将无法与后端的 HTTPS 服务器建立加密连接,导致请求失败。不过正常证书都是配置在反向代理服务器上,转发到后端的时候就不使用https了。
server {
listen 80;
server_name cert.foxyu.cn;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name cert.foxyu.cn;
ssl_certificate /etc/letsencrypt/live/cert.foxyu.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cert.foxyu.cn/privkey.pem;
# Other SSL configuration options...
location / {
# Other location configuration options...
}
}
4.3 HSTS-依赖于浏览器
HTTP Strict-Transport-Security(通常简称为 HSTS)响应标头用来通知浏览器应该只通过 HTTPS 访问该站点,并且以后使用 HTTP 访问该站点的所有尝试都应自动重定向到 HTTPS。
0x05 CF VS letsencrypt
结语
Let's Encrypt 申请的证书只有 90 天的有效期,90天一过就需要重新申请证书。
自动续签脚本的现在懒得写了,网上教程很多,等到时候这两个证书过期了再来弄,毕竟遇到问题解决问题是学习的最快方式。
原文始发于微信公众号(横戈安全团队):免费申请HTTPS证书和配置
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论