编辑
2022-11-23
服务器相关
00
请注意,本文编写于 729 天前,最后修改于 729 天前,其中某些信息可能已经过时。

目录

准备工作
开始安装
一、安装acme.sh
二、生成证书
三、安装或copy证书到nginx目录
四、生成 dhparam.pem 文件
五、配置nginx
六、证书更新
七、设置软件自动更新
其他
疑难杂症处理
在Nginx中如果强制重定向http到https的话是无法进行证书 自动更新,需要注释掉nginx的配置后方可更新
在某些网站无法静态文件的时候需要在nginx增加以下配置

acme.sh 制作ssl证书

使用acme.sh可以非常方便的给自己服务器上配置的网站制作一个ssl证书,并且支持自动续期,默认有效期是三个月 该方法仅限于 linux系统centos下

准备工作

服务器环境:linux-centos 8 开放端口:443端口 阿里云安全组开启443访问 腾讯云安全组开启443访问 服务器防火墙开启443访问 切换到`root`用户

开始安装

一、安装acme.sh

curl https://get.acme.sh | sh

这个命令后会将acme.sh安装到~/.acme.sh/目录下 重新载入~/.bashrc

~/.bashrc

二、生成证书

acme.sh --issue -d www.your-domin.com --webroot /srv/your-domin.com/

这个命令的意思是用http方式将www.your-domin.com生成一个证书,/srv/your-domin.com/是你的网站根目录。(这个过程中acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后又自动删除验证文件.)

三、安装或copy证书到nginx目录

默认生成的证书都放在安装目录下: ~/.acme.sh/,这个目录一般来说不能让nginx或Apache直接使用。所以我们需要将证书放到一个指定的目录,习惯是放在/etc/nginx/ssl/目录下。acme提供了--installcert来安装证书,只需指定目标位置, 然后证书文件会被copy到相应的位置。

先确保存在/etc/nginx/conf/ssl/目录

如果不存在则执行以下命令 mkdir /etc/nginx/conf/ssl

copy证书并指定nginx reload命令

acme.sh --installcert -d www.your-domin.com \ --key-file /etc/nginx/conf/ssl/www.your-domin.com.key \ --fullchain-file /etc/nginx/conf/ssl/fullchain.cer \ --reloadcmd "service nginx force-reload"

service nginx force-reload是为了在让acme自动更新时候能够重启nginx使得证书生效。执行完命令可以在/etc/nginx/ssl/看到多了www.your-domin.com.key和www.your-domin.com.cer的文件。

四、生成 dhparam.pem 文件

openssl dhparam -out /etc/nginx/conf/ssl/dhparam.pem 2048

这一步不是必须,但最好加上,后面配置好后会通过ssllabs.com 来验证一下,如果这一步ssl_dhparam 未配置,将导致 ssllabs.com 的评分降到 B。A+是最好。

五、配置nginx

证书已安装完毕,接下来就是让nginx来使用这个证书了。由于我这个服务器有几个站点,而目前只是一个站点配置了证书,因此只修改当前站点的conf即可

server { listen 80; server_name www.your-domin.com; listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; ssl_certificate /etc/nginx/ssl/www.your-domin.com.cer; ssl_certificate_key /etc/nginx/ssl/www.your-domin.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ... }

ssl_prefer_server_ciphers on; 这个配置能提高证书的评分。 ssl_dhparam /etc/nginx/ssl/dhparam.pem; 能提高证书评分,这个文件是在第四步时生成的,若没有做则不需要写这句。 nginx -t验证一下nginx配置是否正确,然后systemctl restart nginx重启一下nginx,就可以用https://www.your-domin.com测试一下你的站点啦。

六、证书更新

Let's Encrypt 的证书有效期是 90 天的,需要定期重新申请,不过acme在安装的时候就已经设置了自动更新,所以这一步不用关心,很省心。 这里了解一下acme.sh的自动更新:安装acme时会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书. 查看任务

# crontab -l 47 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

手动renew一下证书可以通过这个命令

手动renew一下证书可以通过这个命令 acme.sh --renew -d test.hansonvip.com --force

七、设置软件自动更新

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.所以为了省心省力,最好还是设置一下软件的自动更新,执行下面的命令就可以了。

acme.sh --upgrade --auto-upgrade

其他

在这个网站可以验证一下你的证书级别,根据我上面的配置可以评级为A。 https://www.ssllabs.com/ssltest/analyze.html?d=vipserver.hansonvip.com

疑难杂症处理

在Nginx中如果强制重定向http到https的话是无法进行证书 自动更新,需要注释掉nginx的配置后方可更新

在某些网站无法静态文件的时候需要在nginx增加以下配置

location /.well-known/acme-challenge/ { alias /home/vipClent/.well-known/acme-challenge/; try_files $uri =404; }

本文作者:SnailBoy

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!