推荐项目allinssl,该项目可以自动续期SSL证书,一键部署,证书监控等。教程:SSL证书免费申请!!!

安装前准备

操作系统:centos 7.9

web服务器:nginx 1.18.0

背景

阿里云或者腾讯云都可以申请免费的单域名ssl证书,但是泛域名证书的价格都很贵。本文介绍如何使用工具自己生成泛域名ssl证书,但是证书只有3个月有效期,需要定期生成。有很多平台也可以免费申请泛域名的ssl证书,原理是一样的,感兴趣也可以试试。

目前使用量最大的免费SSL证书就是Let’s Encrypt,自2018-03开始,Let’s Encrypt官方发布上线了免费的SSL泛域名证书。acme.sh实现了acme协议,可以从Let’s Encrypt生成免费的证书,自动创建cron任务, 每天零点自动检测所有的证书,如果发现证书快过期了,需要更新,则acme.sh会自动更新证书,安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录中。

安装ACME

CentOS系统,使用下面的命令先进行依赖下载和更新。

yum update && yum install curl -y && yum install cron -y && yum install socat -y

接着使用下面的命令安装 acme.sh

下载可能失败,可以多试几次

curl https://gitee.com/neilpang/acme.sh | sh
wget https://gitee.com/neilpang/acme.sh/repository/archive/master.zip
unzip master.zip

cd acme.sh-master

./acme.sh --install \
--email my@example.com

https://gitee.com/neilpang/acme.sh

https://new-developer.aliyun.com/article/1193074

普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:

  1. 把 acme.sh 安装到你的 home 目录下:

~/.acme.sh/

并创建 一个 shell 的 alias, 例如 .bashrc,方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

  1. 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

    如果看到输出下图所示的内容,则表示acme.sh已经成功安装!如果是root用户登录的centos系统,则可以进入到/root/.acme目录看到安装的acme.sh

[Sat Mar 25 20:58:58 CST 2023] Installing to /root/.acme.sh
[Sat Mar 25 20:58:58 CST 2023] Installed to /root/.acme.sh/acme.sh
[Sat Mar 25 20:58:58 CST 2023] Installing alias to '/root/.bashrc'
[Sat Mar 25 20:58:58 CST 2023] OK, Close and reopen your terminal to start using acme.sh
[Sat Mar 25 20:58:58 CST 2023] Installing alias to '/root/.cshrc'
[Sat Mar 25 20:58:58 CST 2023] Installing alias to '/root/.tcshrc'
[Sat Mar 25 20:58:58 CST 2023] Installing cron job
54 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
[Sat Mar 25 20:58:58 CST 2023] Good, bash is found, so change the shebang to use bash as preferred.
[Sat Mar 25 20:58:59 CST 2023] OK
[Sat Mar 25 20:58:59 CST 2023] Install success!

设置默认CA 为 Let's Encrypt

acme.sh --set-default-ca --server letsencrypt

至此,acme已经安装完成。

生成证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.

http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

例如我的域名是vvhz.com,我的nginx配置webroot目录为/home/soft/nginx/web/

nginx对应的配置为

server {
    listen 80; # 监听80端口
    server_name vvhz.com www.vvhz.com;  # 自己的域名
    #把http的域名请求转成https
    return 301 https://$host$request_uri;
}

server {
        listen 443;
        server_name vvhz.com www.vvhz.com;
        client_max_body_size 100m;
        ssl_certificate /home/soft/nginx/cert/vvhz.com/vvhz.com_bundle.crt;
        ssl_certificate_key /home/soft/nginx/cert/vvhz.com/vvhz.com.key;

    #### 主要是这一段配置,用来验证域名所有权
    location ^~ /.well-known/ { # 用于ssl证书生成,webroot的配置
        allow all;
        root /home/soft/nginx/web/;
        default_type "text/plain";
        try_files $uri =404; # 找不到文件返回404
    }


    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8099/;
    }
}

对应的执行命令为

./acme.sh --issue -d vvhz.com --webroot /home/soft/nginx/web/

看到下面的输出表示证书已成功生成,在输出的证书目录下可以找到对应的证书。

acme_1.jpg上传证书

这里只介绍如何上传到DnsPod,其他平台一样的道理。

登录DnsPod控制台:https://www.dnspod.cn/

点击SSL证书,找到上传证书

将证书目录下的fullchain.cer的内容拷贝到签名证书输入框内,将vvhz.com.key的内容拷贝到签名私钥输入框内,点击确定即可。

acme_2.jpg在证书列表可以看到我们刚上传的证书!

acme_3.jpg

参考资料:

文章作者: Z
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 微博客
喜欢就支持一下吧