背景

最近在我的云服务器上部署了一个公司内部项目的测试环境,在访问S3存储的时候似乎需要HTTPS,所以研究一下怎么申请SSL证书。一番调研后决定使用acme.sh,部署服务后可以免费生成SSL证书并且可以自动续期,不用再手动替换证书。

安装acme.sh

官方文档参考:说明 · acmesh-official/acme.sh Wiki (github.com)

下面命令二选一,一个不行试试另一个,email替换成自己的邮箱

curl https://get.acme.sh | sh -s email=my@example.com

wget -O -  https://get.acme.sh | sh -s email=my@example.com

如果想升级版本

acme.sh --upgrade

生成证书

生成证书有两种验证(验证这个域名是你的)方式,如果域名已经绑定了可以公网访问的服务器,使用HTTP验证比较方便。如果只是单纯有个域名想申请证书,使用DNS验证 (我验证下HTTP验证方式无法给泛域名生成证书,如果想给泛域名生成证书 "*.example.com" ,使用DNS验证)

一、HTTP验证

使用Nginx验证

这是我比较推荐的方式,一般Nginx大家都有,不过我之前都是用Docker装的Nginx,这里需要直接在Linux装Nginx才行。

这里顺便说一下Nginx安装吧:

# Ubuntu
sudo apt update
sudo apt install nginx

# CentOS
sudo yum install nginx  # 对于较旧的系统
sudo dnf install nginx  # 对于较新的系统

nginx -v	# 查看nginx版本

sudo systemctl start nginx	  # 启动nginx服务

## nginx相关文件夹位于 /etc/nginx,可在此修改配置

使用nginx生成证书(域名替换成自己的)

sh /root/.acme.sh/acme.sh --issue -d mydomain.com --nginx

使用Apache验证

sh /root/.acme.sh/acme.sh --issue -d mydomain.com --apache

网站根目录验证

需要指定域名, 并指定域名所在的网站根目录 (不太明白这里的根目录,没有试验成功)

sh /root/.acme.sh/acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

二、DNS验证

登录DNSPod API 密钥 - DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS

我正好买的腾讯云的域名,创建一个腾讯云API秘钥(其他服务商的域名没操作过,可以参考: 将阿里云域名解析转入 DNSPod - DNSPod 服务与支持

将上面创建的秘钥填入命令(域名替换成自己的)

export Tencent_SecretId="123"
export Tencent_SecretKey="123"

sh /root/.acme.sh/acme.sh --issue --dns dns_tencent -d example.com -d *.example.com   # 可以指定多个子域名,也可以配置泛域名

执行成功后如下图

安装证书

证书生成后,需要配置到Apache或Nginx中,才可以正常使用HTTPS

官方不推荐直接使用 ~/.acme.sh文件夹下生成的证书文件,我们需要执行下列命令将证书文件copy出来

/path_to 替换成自定义的路径,注意替换域名

## Apache
sh /root/.acme.sh/acme.sh --install-cert -d example.com \
--cert-file      /path_to/cert.pem  \
--key-file       /path_to/key.pem  \
--fullchain-file /path_to/fullchain.pem \
--reloadcmd     "service apache2 force-reload"


## Nginx
sh /root/.acme.sh/acme.sh --install-cert -d example.com \
--key-file       /path_to/key.pem  \
--fullchain-file /path_to/cert.pem \
--reloadcmd     "service nginx force-reload"

修改Nginx配置

/etc/nginx/nginx.conf 将下图两处改为上面自定义的文件位置

systemctl restart nginx 重启Nginx即可使用HTTPS访问,目前证书是60天更新一次,不过更新是自动的,不需要再人工操作。

Apache配置请自行探索

文章作者: 像柔风
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 像柔风的个人博客
默认分类 HTTPS SSL ACME
喜欢就支持一下吧