acme.sh免费申请、部署Let's Encrypt泛域名SSL证书

为什么要申请、部署免费的泛域名SSL证书?
  • 泛域名对于自身业务的区分更加明了。例如shop.test.com,api.test.com,financial.test.com。
  • 对于部分开发环境更加友好。微信小程序的接口网址必须要求备案和https,那对于独立开发者而言,一个域名加上一台配置尚可的服务器,在泛域名SSL证书的加持下,效率没得说。
  • 付费的泛域名SSL证书价格普遍不低,对于个人用户而言,用免费的泛域名SSL它不香吗?
本文以阿里云的域名解析和云服务器为例讲解如何操作实现,linux系统为centos7,web服务采用apache。

一、准备工作

(一)获取AccessKey和AccessSecret

登录阿里云的RAM访问控制后台,根据阿里云的安全建议,在没有普通访问控制用户的情况下,新建一名用户,给其分配“管理云解析(DNS)”的权限,获取其AccessKey和AccessSecret并记录下来,而不是继续使用“超级管理员”的AccessKey和AccessSecret。
image.png

(二)apache的mod_ssl模块(已经安装好mod_ssl的可以略过这一步)

确保apache的mod_ssl模块功能正常。如果没有安装mod_ssl模块,安装:

yum -y install mod_ssl

实在不放心就再确认一下有没有相关路径:

rpm -ql mod_ssl

对比一下输出是否是以下这些:
/etc/httpd/conf.d/ssl.conf //配置文件,需要指明我们的证书所在位置,下面要用到
/etc/httpd/conf.modules.d/00-ssl.conf
/usr/lib64/httpd/modules/mod_ssl.so
/usr/libexec/httpd-ssl-pass-dialog
/var/cache/httpd/ssl

二、acme.sh

acme.sh 实现了 acme 协议, 可以从 Let’s Encrypt 自动生成免费证书。主要步骤:安装 acme.sh、生成证书 、安装证书(copy 证书到 nginx/apache 或者其他服务)。Let’s Encrypt Wildcard 免费泛域名SSL证书有效期依然为三个月,acme.sh会自动续期。

(一)安装acme.sh
curl  https://get.acme.sh | sh

或者

wget -O- https://get.acme.sh | sh

提醒一下,网络有时会抽风,导致安装失败,提示:

hubusercontent.com:443; Connection refused

不用担心,多试几次就好了。
安装成功后,acme.sh自动创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

(二)生成证书

依次执行以下命令

# 替换成从阿里云后台获取的密钥
export Ali_Key="刚才记录的AccessKey"
export Ali_Secret="刚才记录的AccessSecret"
# 把test.com换成自己的域名
~/.acme.sh/acme.sh --issue --dns dns_ali -d test.com -d *.test.com

其他的DNS解析API的用法请参考https://github.com/acmesh-official/acme.sh/wiki/dnsapi
以上命令执行后脚本会自动去验证域名,而你只需静静等待即可。这里执行过程中如果报错,确认一下是否在阿里云的RAM访问控制后台分配了“管理云解析(DNS)”的权限。
证书申请成功
证书保存路径

(三)安装证书

这里的“安装”,可以理解为将上一步生成的证书从原来的路径复制到指定的路径下,并在复制后自动重新启动apache。至于为什么要这么做,后面再说。

  • 新建/etc/letsencrypt/test.com/目录(不一定非要这个名字的目录,这里只为演示方便),并在该目录下新建
    cert.pem、key.pem、fullchain.pem文件。
  • 打开/etc/httpd/conf.d/ssl.conf,添加virtualhost:
vim /etc/httpd/conf.d/ssl.conf
<VirtualHost *:443>

DocumentRoot "/var/www/html"
ServerName test.com:443

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM

SSLHonorCipherOrder on

SSLCertificateFile /etc/letsencrypt/test.com/cert.pem

SSLCertificateKeyFile /etc/letsencrypt/test.com/key.pem

SSLCertificateChainFile /etc/letsencrypt/test.com/fullchain.pem

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>
  • 执行以下命令(将test.com替换为你自己的域名):
~/.acme.sh/acme.sh --install-cert -d test.com --cert-file /etc/letsencrypt/test.com/cert.pem --key-file /etc/letsencrypt/test.com/key.pem --fullchain-file /etc/letsencrypt/test.com/fullchain.pem --reloadcmd "service httpd force-reload"

为什么要把生成的证书移动到另一个路径下?因为原来的路径的目录结构可能会发生改变,所以在ssl.conf文件中将证书的路径指向一个固定路径,而acme.sh的–install-cert方法完成证书复制的同时也重新启动了httpd服务使得新的SSL证书在web服务中生效。
好了,至此我们已经成功完成了Let’s Encrypt免费泛域名SSL证书的申请和部署。

三、参考资料

  1. Github/acmesh-official/acme.sh
  2. Let’s Encrypt Wildcard 免费泛域名SSL证书一键申请与SSL使用教程
  3. 使用 acme.sh 申请 Let’s Encrypt 泛域名SSL证书详细教程
  4. How to install ACME.SH certificates after they are generated?
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值