使用Lnmp来管理Http证书
经过一年多的运行,https又出毛病了, 2020年12月31日到期
记录一下过程, 新的https证书使用的是lnmp来管理的,
更新,如果到期了,手动删除再重新添加一下
Lnmp vhost del
Lnmp vhost add
文章来源:http://qii404.me/2017/12/05/https-your-site.html
2020年更新内容—-
发现有网址提示证书过期,那么重新执行一下以下的代码, 不必重新安装
./certbot-auto renew 如果有问题根据提示进行操作 ./certbot-auto renew –no-bootstrap
1. 重新安装
2. 删除 /etc/letsencrypt/ 里 larchive live目录中的证书
3. 重新生成证书
4. 重启nginx -s reload
证书的有效期是90天,建议在证书到期前的30天续签证书
创建定时任务,自动续期
默认证书有效期是3个月,所以需要续期
创建定时任务
sudo crontab -e
我的certbot-auto的所在目录为/home/ubuntu/soft/;
在最后添加
0 3 1 * * /home/ubuntu/soft/certbot-auto renew –renew-hook “sudo nginx -s reload”
sudo crontab -l
查看一下是否存在刚才添加的定时命令。如果存在的话,那么每月1日的凌晨3点就会执行一次所有域名的续期操作。
更新:当https证书存在问题的时候,nginx的证书一定要配置好,不然可能导致无法上网 https无法启用
简单几步, 让你的网站、个人博客支持HTTPS访问, 让你看到熟悉的绿色小锁
前两天,用4G访问自己的博客的时候,发现右下角出现了那个可恶的”流量球”,相信大家肯定有见过的,显而易见,这是运营商劫持了我的流量,并且给网站注入了一些内容,以此来推销他们的套餐. 作为一个有理想的咸鱼,怎么能让运营商如此肆意妄为?于是乎,开始了我的博客https改造之路.
实现原理
使用 Let’s Encrypt 提供的免费证书, 放到自己博客服务器中, 并且在nginx配置好证书路径, 这样使用浏览器访问的时候就会见到熟悉的绿色小锁头了. 需要注意证书必须颁发给某个域名, 所以ip地址无效.
Tips: 如果是 GitHub Pages 搭建的博客, 由于Pages的服务器我们无法控制, 所以只能通过其他方式实现, 文章结尾会专门说明.
实现步骤
1. 证书申请
1.1 安装工具certbot, 实际上就是一个bash文件, 他会帮你执行复杂的操作
git clone https://github.com/certbot/certbot
cd certbot
chmod +x certbot-auto
# certbot-auto 即为自动化脚本工具, 他会判断你的服务是nginx还是apache, 然后执行对应逻辑
./certbot-auto –help
1.2 生成证书
由于我的服务器是在运行中, 所以我只需要生成证书, 然后手动配置即可
# webroot代表webroot根目录模式, certonly代表只生成证书 邮箱亲测没啥大用, 域名一定要和自己要申请证书的域名一致
./certbot-auto certonly –webroot –agree-tos -v -t –email 你的邮箱 -w 服务器根目录 -d 你要申请的域名
# 实际如下 用 qii404.me 域名做测试, 实际需换为你的域名
./certbot-auto certonly –webroot –agree-tos -v -t –email qii404@126.com -w /usr/share/nginx/html/ -d qii404.me
然后会在/etc/letsencrypt/目录下生成如下目录结构
/etc/letsencrypt/
├── accounts
│ └── acme-v01.api.letsencrypt.org
│ └── directory
├── archive
│ └── qii04.me
│ ├── cert1.pem
│ ├── chain1.pem
│ ├── fullchain1.pem
│ └── privkey1.pem
├── csr
│ └── 0000_csr-certbot.pem
├── keys
│ └── 0000_key-certbot.pem
├── live
│ └── qii04.me
│ ├── cert.pem -> ../../archive/qii04.me/cert1.pem
│ ├── chain.pem -> ../../archive/qii04.me/chain1.pem
│ ├── dhparams.pem
│ ├── fullchain.pem -> ../../archive/qii04.me/fullchain1.pem
│ ├── privkey.pem -> ../../archive/qii04.me/privkey1.pem
│ └── README
├── renewal
│ └── qii04.me.conf
└── renewal-hooks
├── deploy
├── post
└── pre
你所需要的证书其实是在/etc/letsencrypt/live/qii404.me/目录中的
fullchain.pem可以看作是证书公钥, privkey.pem是证书私钥, 是我们下面需要使用到的两个文件.
2. 证书配置
需要配置nginx, 使其支持https即443端口的访问, 同时需要把证书路径配置进去, 才能生效.
编辑/etc/nginx/sites-enabled/default配置文件, 当然路径可能和我的不一样,也可能直接写在了/etc/nginx/nginx.conf里,将下面的443 server部分追加到配置中即可(和80端口的server并列的位置)。当然环境不同,直接复制可能会导致location部分有问题,最简单的办法是复制你自己80端口的server中location配置一份,替换下面443中的location配置即可。
# https 443端口配置
server{
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
# 此处需要改为你的代码root目录 和80端口root一致即可
root /usr/share/nginx/html;
index index.php index.html index.htm
# 打开ssl传输
ssl on;
# 配置公钥路径
ssl_certificate “/etc/letsencrypt/live/qii404.me/fullchain.pem”;
# 配置私钥路径
ssl_certificate_key “/etc/letsencrypt/live/qii404.me/privkey.pem”;
# 下面因人而异,直接把80端口的所有location配置复制到此处即可
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
80和443共存结构如下
# 80端口配置
server{
listen 80;
root xxx;
location / {
xxx;
}
}
# https 443端口配置
server{
listen 443;
root xxx;
ssl on;
# 配置公钥路径
ssl_certificate “/etc/letsencrypt/live/qii404.me/fullchain.pem”;
# 配置私钥路径
ssl_certificate_key “/etc/letsencrypt/live/qii404.me/privkey.pem”;
location / {
xxx;
}
}
3. 重启 nginx
sudo service nginx restart
HTTPS验证
重启nginx之后, 再次访问你的网站地址, https://你的域名, 如 https://qii404.me, 看看会不会出现小绿锁头吧~