你还在让你的网站裸奔在网络上吗? 在这里我们将搭建免费版 HTTPS, 免费的, 免费的, 免费的, 重要的事情说三遍, 申请来源为 letsencrypt,
超文本传输协议 HTTP 协议被用于在 web 浏览器和网站服务器之间传递信息, HTTP 协议以明文方式发送内容, 如果攻击者截取了客户端与服务器之间的传输报文, 将能直接获取到其中信息,
为了解决 HTTP 协议的这一缺陷, 需要使用另一种协议: 安全套接字层超文本传输协议 HTTPS, 为了数据传输的安全,
HTTPS 在 HTTP 的基础上加入了 SSL 协议, SSL 依靠证书来验证服务器的身份, 并为客户端和服务器之间的通信加密.
阅读目录
下载 certbot
查看 certbot
申请 https 证书 (证书有效期 3 个月, 过期需要重新申请)
方式一: 使用 DNS 方式验证, 该方式需要你能配置域名, 我个人喜欢这种方式
方式二: 使用插件方式
配置 nginx 支持 https
使用 shell 脚本与定时任务定时续期证书
方式一的续期
方式二的续期
1, 下载 certbot
这里使用 Git 下载, 还没有安装 Git 的 查看如何安装
切换目录
cd /usr/local
克隆 Git 仓库
Git clone https://github.com/certbot/certbot.git
克隆完成将会在 / usr/loca/ 出现 certbot 目录
2,
查看 certbot
切换到 certbot 目录
cd /usr/local/certbot
如果目录是这样的说明安装成功了
certbot 常用命令 查看官方文档 https://github.com/certbot/certbot
3, 申请 https 证书 (证书有效期 3 个月, 过期需要重新申请)
查看当前证书, 第一次执行将会安装一些依赖, 中途有一次确认询问, 输入 Y 即可
./certbot-auto certificates
3.1 方式一: 使用 DNS 方式验证, 该方式需要你能配置域名, 我个人喜欢这种方式
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d 你的域名 --manual --preferred-challenges dns-01 certonly 如:
配置泛域名
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.nl166.com --manual --preferred-challenges dns-01 certonly
配置制定域名
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d API.nl166.com --manual --preferred-challenges dns-01 certonly
配置二级泛域名
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.API.nl166.com --manual --preferred-challenges dns-01 certonly
如上图所示, 第一次会让你输入一个邮箱, 按要求输入就可以了, 到时候会发送一个邮件给你, 需要点击确认邮箱, 所以务必填写真实邮箱, 然后按要求确认就可, 不确认是执行不下去的.
接下来会让你验证域名, 按要求解析个 TXT 类型的记录
保存确认以后再回到服务器中确认
上面这两个文件就是配置 https 用到的证书了
3.2 方式二: 使用插件方式
我们先看看官方怎么说的
这里我使用的是 nginx(申请完会自动帮你重启 nginx) 这种方式配置不了泛域名, 只能一个一个添加
./certbot-auto --nginx -d api2.nl166.com
解决上述报错, 请注意,/usr/local/nginx 请替换为你的 nginx 实际安装位置 安装 LNMP
- ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
- ln -s /usr/local/nginx/conf/ /etc/nginx
再次执行申请
中途会询问你请选择是否将 HTTP 流量重定向到 HTTPS, 删除 HTTP 访问. 可根据自己的需求选择, 我这里是 c 取消选择 (实际上这一步可以直接不理, 经测试, 这一步没有选择前, 访问网址 https 已经可以访问了.)
如果想省略询问这一步, 可以添加 certonly 该种方式只会生成证书, 不做其余操作, 证书配置需要自己手动添加 如下:
./certbot-auto certonly --nginx -d api2.nl166.com
如上图所示, 如果你配置了监听 443 端口的 server, 他会帮你自动找到对应域名的配置文件, 并添加下面两行, 还把我格式打乱了,} 号与上面 {的缩进不对应了, 不过不影响功能, 这里不知道会不会根据 nginx 的版本选择是否添加 ssl on;
因为我这个 nginx 版本是不需要这个的, 较低版本需要添加 ssl on; 才能开启 https 访问.
如没有监听该域名的 443 端口, 则会在如下位置添加信息
其他方式请自行摸索
4, 配置 nginx 支持 https
查看 nginx 是否支持配置 https
/usr/local/nginx/sbin/nginx -V
如果还没有 --with-http_ssl_module 模块则需要添加模块 查看如何给 nginx 升级或增加模块
- # HTTPS server
- #
- server {
- listen 443 ssl;
- server_name api2.nl166.com;
- root /data/Web/im.nl166.com;
- location / {
- index index.PHP;
- }
- #auth_basic "hello world";
- #auth_basic_user_file /usr/local/nginx/conf/auth/nl166.auth;
- location ~ \.PHP$ {
- include fastcgi_params;
- fastcgi_pass unix:/tmp/PHP-fcgi.sock;
- fastcgi_index index.PHP;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- }
- location ~ .*.(SVN|Git|cvs) {
- deny all;
- }
- ssl_certificate /etc/letsencrypt/live/api2.nl166.com/fullchain.pem; # managed by Certbot
- ssl_certificate_key /etc/letsencrypt/live/api2.nl166.com/privkey.pem; # managed by Certbot
- }
nginx 配置 https 很简单, 只需要复制上面代码到监听 80 端口的 server 同级.
ssl_certificate 跟 ssl_certificate 分别对应自己的证书文件, 其他配置跟普通 http 的配置一样修改为自己对应信息.
较低版本需要增加 ssl on; 才能开启 https 访问.
5, 使用 shell 脚本与定时任务定时续期证书
注意: 为避免遇到操作次数的限制, 加入 --dry-run 参数, 可以避免操作限制, 等执行无误后, 再去掉进行真实的 renew 操作.
5.1 方式一的续期
其中域名为 / etc/letsencrypt/renewal / 目录下的 ****.conf ,**** 就是你要填写的域名, 比如我生成的时候是 *.nl166.com, 但是在实际生成的时候是没有 * 号的
home/certbot-sh/au.sh 替换成你自己更新 DNS 的脚本
如下:
./certbot-auto renew --cert-name nl166.com --manual-auth-hook /data/shell/crontab/auto_update_httpscert.sh --dry-run
把更新命令放到一个文件, 我这里是放在了 / data/shell/crontab/auto_update_httpscert.sh 内容如下 , 原来的 auto_update_httpscert.sh 更改到 / data/shell/cnl_update_httpscert.sh
增加系统定时任务
- crontab -e
- #每个星期天凌晨 5 点执行更新 https 证书操作
- 0 5 * * 0 sh /data/shell/crontab/auto_update_httpscert.sh
5.2 方式二的续期
如下:
./certbot-auto certonly --renew-by-default --nginx -d api2.nl166.com --dry-run
增加系统定时任务操作参考方式一
来源: https://www.cnblogs.com/chennl/p/10177353.html