用acme.sh给网站域名,申请免费ssl永久证书(自动续期)(代码片段)

the丶only the丶only     2022-12-05     779

关键词:

一:简介

申请ssl证书,即https有很多,有免费的,也有收费的。如第三方域名管理cloudflare也可以自动添加使用https,而且永久。

但是由于有些服务,需要在服务器使用自签证书,所以需要自己申请。免费的可以使用certbot,也可以是使用zeroSSL。

Cerbot可以参考我以前的文章:Certbot申请免费SSL证书

这里,介绍使用acme.sh生成免费的ssl证书,其完整实现了acme协议,并且由纯Shell脚本语言编写,没有过多的依赖项,安装和使用都非常方便。

对于zerossl官网,需要指出的是,用户可以在控制台直接申请证书,但免费用户最多只能申请3个,而使用ACME申请zeroSSL证书则没有数目限制。

acme.sh官方gitlhub地址: https://github.com/acmesh-official/acme.sh

二:安装acme.sh

安装过程不会污染任何功能和文件,所有的修改都限制在安装目录中:~/.acme.sh/。
以下安装方式,把 my@example.com 修改成自己的邮箱。

1:在线安装方式

安装很简单, 一个命令:

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

或者

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

这里的-s参数指定的邮箱可以关联到已有的zeroSSL账号。关联成功后,通过acme.sh生成的zeroSSL证书会在zeroSSL网站的控制面板上显示。

2:其他安装方式

用git仓库方式

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com

安装完成后,在账号home目录,会生成一个.acme.sh的隐藏目录。

三:颁发证书

注:安装完成后,需要退出当前命令终端,重新登录,才可以使用acme.sh命令

这里已我的网站域名 test.ywbj.cc 做为测试。

配置nginx

server 
    listen 80;
    server_name  test.ywbj.cc;
    
    root   /www/test.ywbj.cc;
    location / 
        index  index.html index.htm index.php;
    

配置域名目录为/www/test.ywbj.cc,在此目录创建一个index.html文件测试,然后重启nginx。
配置完,浏览器打开test.ywbj.cc,可以看到域名提示不安全,没有https.

1:http方式颁发证书给域名

一般情况下,都是这种。如果没有服务器,请使用dns手动。

单个域名

acme.sh --issue -d test.ywbj.cc -w /www/test.ywbj.cc

-d 需要签证的域名。
-w参数说明:
在验证域名的所有权时,具体来说,acme.sh会在网站的根目录下创建.well-known目录,然后再在其中生成验证文件。因此,-w参数指定的路径实际为域名之下,/.well-known位置对应的路径。用与验证此域名是属于你的。

下面图显示,已经成功颁发证书。

如果有多个域名,同一个证书中的多个域。

acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com

证书生成完后将放置在~/.acme.sh/example.com/

证书将每60天自动更新一次。

如下:这里显示的是我test.ywbj.cc的目录下。

2:手动 dns 方式颁发证书

手动 dns 方式, 手动在域名上添加一条 txt 解析记录, 验证域名所有权.

这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

acme.sh  --issue  --dns   -d mydomain.com \\
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

然后, acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可.

等待解析完成之后, 重新生成证书:

acme.sh  --renew   -d mydomain.com \\
  --yes-I-know-dns-manual-mode-enough-go-ahead-please

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.

四:将证书安装到 Apache/Nginx 等

1,nginx

生成证书后,需要将证书安装/复制到您的 Apache/Nginx 或其他服务器。必须使用此命令将证书安装到目标文件,请勿使用~/.acme.sh/文件夹中的证书文件,它们仅供内部使用,文件夹结构将来可能会更改。

证书目录,自己选择好,我这里安装目录为/etc/nginx/ssl/,所以执行以下命令。

acme.sh --install-cert -d test.ywbj.cc \\
--key-file       /etc/nginx/ssl//key.pem  \\
--fullchain-file /etc/nginx/ssl/cert.pem \\
--reloadcmd     "service nginx force-reload"

2:apache:

如果是apache的话,用以下命令即可

acme.sh --install-cert -d example.com \\
--cert-file      /path/to/certfile/in/apache/cert.pem  \\
--key-file       /path/to/keyfile/in/apache/key.pem  \\
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \\
--reloadcmd     "service apache2 force-reload"

五:配置nginx的ssl

更改nginx配置文件,加上监听443端口,和配置ssl_certificate和ssl_certificate_key到指定目录即可。

server 
    #listen 80;
    listen 443;
    server_name  test.ywbj.cc;

    root   /www/test.ywbj.cc;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / 
        index  index.html index.htm index.php;
    

重启nginx,在浏览器再次输入https://test.ywbj.cc/,可以看到已经成功。
查看详细,可以看到是ZeroSSL颁发的证书,有效期为3个月。

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心。你也可以更改这个。

安装证书时,已经自动在crontab定时任务添加了任务。

crontan -l查看定时任务,可以看到acme.sh的定时任务。

crontan -l

2 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

到这里,nginx的ssl自签证书就已经完成了。

六:acme.sh其他命令(扩展)

1:查看已安装证书信息

acme.sh --info -d example.com
# 会输出如下内容:
DOMAIN_CONF=/root/.acme.sh/example.com/example.com.conf
Le_Domain=example.com
Le_Alt=no
Le_Webroot=dns_ali
Le_PreHook=
Le_PostHook=
Le_RenewHook=
Le_API=https://acme-v02.api.letsencrypt.org/directory
Le_Keylength=
Le_OrderFinalize=https://acme-v02.api.letsencrypt.org/acme/finalize/23xxxx150/781xxxx4310
Le_LinkOrder=https://acme-v02.api.letsencrypt.org/acme/order/233xxx150/781xxxx4310
Le_LinkCert=https://acme-v02.api.letsencrypt.org/acme/cert/04cbd28xxxxxx349ecaea8d07
Le_CertCreateTime=1649358725
Le_CertCreateTimeStr=Thu Apr  7 19:12:05 UTC 2022
Le_NextRenewTimeStr=Mon Jun  6 19:12:05 UTC 2022
Le_NextRenewTime=1654456325
Le_RealCertPath=
Le_RealCACertPath=
Le_RealKeyPath=/etc/acme/example.com/privkey.pem
Le_ReloadCmd=service nginx force-reload
Le_RealFullChainPath=/etc/acme/example.com/chain.pem

2:更新 acme.sh

#升级 acme.sh 到最新版 :

acme.sh --upgrade

#如果你不想手动升级, 可以开启自动升级,之后, acme.sh 就会自动保持更新了.
acme.sh  --upgrade  --auto-upgrade

#你也可以随时关闭自动更新:
acme.sh --upgrade  --auto-upgrade  0

3:颁发ECC证书

单域ECC证书

acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256

SAN多域ECC证书

acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256

keylength上面的参数。

有效值为:
ec-256(prime256v1,“ECDSA P-256”)
ec-384(secp384r1,“ECDSA P-384”)
ec-521(secp521r1,“ECDSA P-521”,Let’s Encrypt 尚不支持。)

4:更新证书

自己更新证书

#强制更新证书:
acme.sh --renew -d example.com --force

#或者,对于 ECC 证书:
acme.sh --renew -d example.com --force --ecc

要停止更新证书,您可以执行以下操作从更新列表中删除证书:

acme.sh --remove -d example.com [--ecc]

证书/密钥文件不会从磁盘中删除。

您可以自己删除相应的目录(例如~/.acme.sh/example.com)。

centos7配置acme(自动续期域名ssl证书)

参考技术A安装创建一个bash:免费申请证书:https://freessl.cn/acme-deploy结果如图:复制acme.sh框内命令到服务器命令行执行,获取到证书在/root/.acme.sh/ 查看详情

letsencrypt泛域名证书申请,使用acme,结合阿里云域名管理

...Secret将ID和Secret修改到dns_ali.sh文件里第三步:快速签发泛域名SSL证书cd/root/.acme.sh./acme.sh--issue-dontato.com-d*.ontato.com--dnsdns_ali签发完成后会提示证书所在路径第四步:nginx配置时证书路径使用以上签发后路径(此处不详述) 查看详情

使用acme.sh进行ssl申请和自动续约(代码片段)

...)在凌晨0点检查所有证书生成证书的方式主要有三种网站文件方式,适合 查看详情

let'sencrypt快速颁发及自动续签泛域名证书实践指南

...Linux基金会(LinuxFoundation)进行日常管理维护,它为1.8亿个网站提供TLS证书的非盈利性证书颁发机构,通过它我们可以免费申请网站证书,并您的网站上启用HTTPS(SSL/TLS)提供支持。前置需求:参考来源Let\'sEncrypt网站:https://letsencrypt.org/AC... 查看详情

https免费泛域名证书申请(代码片段)

acme.sh 实现了 acme 协议,可以从letsencrypt生成免费的证书.主要步骤:安装 acme.sh生成证书copy证书到nginx/apache或者其他服务更新证书更新 acme.sh出错怎么办,如何调试下面为作者自己搭建时步骤的详细介绍,也可以直接参考acmesh-... 查看详情

通过acme.sh申请zerossl免费泛域名证书(代码片段)

...oSSL这类免费证书意义不大,——都去阿里云、腾讯云申请免费一年证书好了。安装acme.sh是shell脚本,我们从github下载回来并安装。执行以下脚本curlhttps://get.acme.sh|sh-semail=youremail@xx.com国内因为众所周知的关系,... 查看详情

通过acme.sh申请zerossl免费泛域名证书(代码片段)

...oSSL这类免费证书意义不大,——都去阿里云、腾讯云申请免费一年证书好了。安装acme.sh是shell脚本,我们从github下载回来并安装。执行以下脚本curlhttps://get.acme.sh|sh-semail=youremail@xx.com国内因为众所周知的关系,... 查看详情

let'sencrypt证书申请及配置

...自动化和开放的证书颁发机构(CA),简单的说,就是为网站提供免费的SSL/TLS证书。Let\'sEncrypt生成证书的工具很多,certbot是官方推荐的签发工具,也可以通过在线服务申请,例如:在线一站式服务管理方便,但可能需要绑定业... 查看详情

acme.sh及https证书实践

...台兼容性和安全性,并打分。crt.sh这个工具可以按通配符域名查询所有证书的详情原理非对称加密的典型应用,另一个是PGP加密。首先建立TCP连接,然后通过DH密钥交换算法交换密钥,具体是先协商SSL参数,然后服务端发送公钥... 查看详情

https之acme.sh申请证书(代码片段)

...程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。  Let‘sEncrypt由互联网安全研究小组(缩写ISRG)提供服务。主要赞助商包括电子前哨基金会、Moz 查看详情

二级域名能不能申请ssl证书

...了解,现在很多企业因为业务上的需要,会同时建设多个网站(其中不乏有二级域名的网站),那么在申请SSL证书的时候就需要考虑到多个域名的情况。二级域名是支持SSL证书申请的,为了给大家节约成本,这里推荐两款适合保... 查看详情

如何使用let'sencrypt永久免费ssl证书

免费SSL证书并不是适合所有的网站,和付费SSL证书还是有很大区别的,具体区别如下:1、验证类型免费SSL证书只有域名验证性型(DVSSL证书),而付费SSL证书有域名验证型(DVSSL证书)、企业验证型(OVSSL证书)、组织验证型(EV... 查看详情

certbot给网站域名申请免费ssl证书及nginx配置(代码片段)

Certbot官网:https://certbot.eff.org/前提是自己已经安装好nginx,并配置好自己的域名。1.安装snap官网要求用snap工具安装,那就先安装相关依赖包,和snap软件。yum-yinstallepel-release #安装依赖yum-yinstallsnapd #安装snapsystem... 查看详情

centos7配置let’sencrypt支持免费泛域名证书(代码片段)

Let’sEncrypt从2018年开始支持泛域名证书,有效期3个月,目前仅支持acme方式申请,暂不支持certbot。1、安装acme.shcurlhttps://get.acme.sh|sh 2、请求证书(泛域名以*.s-b.me为例)cd/.acme.sh./acme.sh--issue-d*.s-b.me-ds-b.me--dns--yes-I-know-dns-manual- 查看详情

ssl证书绑定多个域名是否合理,怎样申请域名证书

当今网站的信息安全遭受一定的威胁,因为网站没有安全防护,所以信息安全就遭受一定的影响。所以,为了给网站更好的安全防护,很多企业都会给网站配置ssl证书。ssl是一种安全证书,能够为网站的信息... 查看详情

如何给网站免费添加https加密

免费添加https加密申请免费的SSL证书就可以了,一般不建议大家使用免费的SSL证书,因为它和付费的SSL证书有很多差别:1、验证类型免费SSL证书只有域名验证性型(DVSSL证书),而付费SSL证书有域名验证型(DVSSL证书)、企业验... 查看详情

手把手申请及自动更新https免费证书,亲测有效!

...acme.sh脚本可实现自动更新https证书。以阿里云为例,申请域名为me2you.online泛域名1、安装curlhttps://get.acme.sh|sh2、运行命令后在当前用户目录下生成目录.acme.sh,并自动增加crontab内容。3、acme.sh建议使用DNS验证方式,在阿里云的账... 查看详情

给网站配置免费的htts证书(代码片段)

...自思否:https://segmentfault.com/a/1190000015231137 https 的网站搜索引擎 会优先收录,所以就抽时间记录下配置博客的过程,各种找资料,终于给我找到了一篇好的指引 ACME使用 LetEncrypt 证书作为博客的 https ... 查看详情