背景
小程序的项目调外部接口只能通过https,不允许http,于是就把服务器上的nginx配置了证书,一直拖延到现在都没上https,这次拖不下去了,整吧。
1 证书申请
CA 的证书提供商有许多个,有收费的有免费的,Let’s Encrypt 就是其中之一的免费提供商,它提供 90 天的免费授权,90 天后可以免费续签。要从 Let's Encript 获取某个域名的证书,需要证明你对该域名拥有控制权,对于该证明你可以使用某个使用 ACME 协议的软件来实现,而 Certbot 就是官方出的一个 ACME 客户端。
1.1 certbot安装
apt install certbot
1.2 配置申请证书过程中回调的url
向别人申请CA证书,对方就需要验证你提交的信息是否正确,Let’s Encrypt的验证是通过【你的域名】/.well-known/acme-challenge/*确认的,所以要在服务器上提供一个/.well-known/acme-challenge/访问路径,具体操作就是在nginx配置中添加如下代码:
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /root/application/nresource; #这里需要与后文 --webroot -w 后面配置的路径一致
}
1.3 certbot命令申请证书
certbot certonly --webroot -w /root/application/nresource -d 你的域名
过程中需要输入邮箱,如果成功,在/etc/letsencrypt/live/你的域名目录下会有几个证书文件

2 配置nginx.conf
申请到证书后把证书相关的配置在nginx.conf中加上
server {
listen 80;
listen 443 ssl;
server_name 你的域名;
ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/你的域名/chain.pem;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
我这里把80和443放在一个配置了,你也可以分开配置,把80端口转发到443
3 已安装的nginx开启ssl模块
第二步配置完nginx.conf重启nginx报错[emerg] 1988079#0: the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:56
,这是因为nginx没有开启ssl模块
3.1 查看nginx是否开启ssl模块
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.18.0
built by gcc 9.3.0 (Ubuntu 9.3.0-10ubuntu2)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module
已开启ssl模块的nginx的回显带有--with-http_ssl_module --with-http_v2_module
,如果没有--with-http_ssl_module --with-http_v2_module
则代表nginx没有安装ssl模块
3.2 nginx开启ssl模块
下载更高版本
的nginx源码,这里遇到个坑,我第一次下载的源码是和已安装的nginx同版本的,在make那一步出了问题,最后换了一个高版本的源码make才成功的
wget http://nginx.org/download/nginx-1.18.0.tar.gz
解压、make:
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make成功后不要make install,而是只替换原有的nginx二进制文件
//备份原版本的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
//替换原有的nginx二进制文件
cp ./objs/nginx /usr/local/nginx/sbin/

3.3 重启nginx
/usr/local/nginx/sbin/nginx -s reload
,执行这个命令后——还是不行,要先stop再start才行,/usr/local/nginx/sbin/nginx -s stop
,/usr/local/nginx/sbin/nginx
4 CA证书自动续期(未验证)
Certbot是申请的Let’s Encrypt的免费证书,有效期3个月,到期之后我们可以再次续期,达到永久免费的效果。
配置cron任务,每两个月自动运行 Certbot:0 2 1 1 1/2 certbot renew --quiet
5 天坑降临,又被轻而易举的填了
配置完证书后用小程序发起https请求,居然报错,小程序认为certbot申请的证书是无效的,只能再换证书了,最终选择的是腾讯云签发的证书。
关注元页斋
公众号,发送关键词即可获得相应资源的下载链接和提取码
版权声明:本文归作者所有,如需转载,请保留原文链接,如有侵权,请在评论区留言联系管理员删除,管理员收到后会24小时内反馈(软件定制开发、广告合作、版权等其他事宜也可关注本站微信公众号“元页斋”,发送消息说明情况,管理员会尽快与您联系)