孟繁永 IT小常识 阿里云不再提供一年期限的免费域名SSL证书的应对策略

阿里云不再提供一年期限的免费域名SSL证书的应对策略

毫无疑问,当然是用Let’s Encrypt

那么就开始搞吧,事实上真的很简单。只是首先要搞清楚自己的部署环境,我用的是基于yeszao/dnmp改写的一个环境,大体上一样,可以直接看yeszao/dnmp。

首先我把域名解析到我的服务器,如果是一个新的域名,则在得到ssl证书之前,给该域名的站点conf中只配置80端口,443端口等后续得到了数字证书以后再添加或解除注释,免得没有ssl的文件nginx无法启动。

然后在该域名的站点的conf中添加

location ^~ /.well-known/acme-challenge/ {
      default_type "text/plain";
      root /www/acme-challenge/;
    }

注意,上面root后面对应的地址是基于dnmp的env配置的映射地址,也就是dnmp目录下的www中再新建一个acme-challenge,如果dnmp在/,则实际目录地址是/dnmp/www/acme-challenge,这个地址在下一步用的到。

添加以上规则后,重启nginx。

然后就可以使用命令创建证书了:

sudo certbot certonly --webroot -w /dnmp/www/acme-challenge/ -d "*.isbn.ink" -d isbn.ink

命令也可以明确–server参数

sudo certbot certonly --webroot -w /dnmp/www/acme-challenge/ -d "*.isbn.ink" -d isbn.ink --server https://acme-v02.api.letsencrypt.org/directory

certbot如何安装请看https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal&tab=standard

按提示执行完就行了,甚至都自动创建好了更新任务,任务查看命令:systemctl list-timers

NEXT                        LEFT               LAST                        PASSED       UNIT                           ACTIVATES                       
Fri 2024-01-26 14:11:00 CST 19min left         n/a                         n/a          snap.certbot.renew.timer       snap.certbot.renew.service

ssl证书文件默认会放在/etc/letsencrypt下面,那么结合dnmp的env配置项:

NGINX_SSL_CERTIFICATE_DIR=/etc/letsencrypt

如果有其他站点需要用到NGINX_SSL_CERTIFICATE_DIR的默认配置./services/nginx/ssl,那么还有个办法,即使用ln到/etc/letsencrypt/live:

ln -s /etc/letsencrypt/live /dnmp/services/nginx/ssl

那么,在站点的conf文件中,对443部分的设置如下:

server {
    listen 443 ssl;
    server_name isbn.ink;
    charset utf8;
    #ssl on;
    ssl_certificate   /ssl/live/isbn.ink/fullchain.pem;
    ssl_certificate_key  /ssl/live/isbn.ink/privkey.pem;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    root   /www/localhost;
    index  index.php index.html index.htm;

    location / {
        if (!-e $request_filename) {
            rewrite (.*) /index.php;
        }
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_pass   php80:9000;
        include        fastcgi-php.conf;
        include        fastcgi_params;
    }

}

可以看到我把live放到了conf中,而没有放在NGINX_SSL_CERTIFICATE_DIR设置中,因为live/isbn.ink/fullchain.pem是个软地址,实际文件是指向../../archive/isbn.ink/fullchain1.pem的,这里用了两层父目录,站点域名一层,live占了一层,所以ssl的映射目录只能设置为/etc/letsencrypt。

1 thought on “阿里云不再提供一年期限的免费域名SSL证书的应对策略”

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

Related Post