使用通配型SSL证书比较好管理,一次性搞定;之前一直用TrustAsia的DV域名型通配型SSL证书,一年要2000元,想换个便宜的,但又担心遇到不靠谱的SSL证书,求推荐。
(Sectigo Comodo的通配型SSL证书怎样?这个好像挺便宜的)
jerkzhang
Let’s Encrypt、Zerossl等都可以通过acme.sh或者certbot去自动化申请、自动化部署、自动化续费免费的通配型SSL证书。
Let’s Encrypt、Zerossl等都是有免费通配型证书支持acme.sh去自动化申请部署的。
注意一点:通配型SSL证书是只能通过dns验证的方式申请。
所以,首先去你的DNS服务商获取可以管理DNS记录权限的TOKEN ID和秘钥;阿里云万网、腾讯云的DNSPOD、CloudFlare等都有这类访问令牌,提前创建这样的ID与秘钥,后面会用上。可如下找到创建秘钥的地方:
阿里云控制台 - 访问控制 RAM - 用户管理
腾讯云DNSPOD管理控制台 - 秘钥管理
秘钥创建完以后,记得给这个token和秘钥进行权限设置。例如,阿里云万网DNS设置的token赋权,截图如下:
之后,acme.sh自动化程序,就会自动通过你提供的令牌进行创建DNS记录,从而申请ssl证书过程中自动验证,验证成功后,用于验证的DNS记录会被自动删除。
准备工作做完了,开始具体自动化部署吧。acme.sh和certbot都可以,我最终还是选择了acme.sh,因为需要安装的东西少一些,以及关于acme.sh的教程相对多一点,最核心还是acme.sh足以满足我的需求了。可能需要设置自动更新,因为acme.sh的版本更新很快。设置自动更新不难,是否是默认自动更新我也不确定,这个以后再说吧,先来安装acme.sh吧。
1、安装acme.sh
直接从官网下载即可。
curl https://get.acme.sh | sh -s email=service@zhuanfou.com
如果报错关于curl的ssl相关的错误,可以让curl不检验ssl直接下载,加-k参数即可,如下:
curl https://get.acme.sh -k | sh -s email=service@zhuanfou.com
至于email是什么,换成你自己的email即可,不设置email也行。
在上述安装好以后,系统会自动被acme.sh加入一个定时运行检查ssl证书是否过期,如过期自动更新的定时任务。一般的这类免费自动部署的SSL证书,都是3个月的有效期,acme.sh会自动在第60天的时候,自动更新证书的有效期,这些都是acme.sh去自动做的事,你不需要管它,如果不放心,安装成功后,你可以运行“crontab -l”命令,你就会看见被新增了一条定时检查证书是否即将过期的cron定时任务。大概如下,你看看即可,不需要额外操作:
crontab -l 以下是输出: 39 18 * * * "/home/用户名/.acme.sh"/acme.sh --cron --home "/home/用户名/.acme.sh" > /dev/null
2、把DNS平台的TOKEN和秘钥加入配置中
安装好acme.sh后,如下目录就是acme.sh的安装目录。
$ cd ~/.acme.sh/ $ ls account.conf acme.sh.env deploy http.header acme.sh ca dnsapi notify
上面的account.conf就是配置文件,打开后大概会如下所示:
#LOG_FILE="/home/用户名/.acme.sh/acme.sh.log" #LOG_LEVEL=1 #AUTO_UPGRADE="1" #NO_TIMESTAMP=1 ACCOUNT_EMAIL='service@zhuanfou.com' UPGRADE_HASH='sfadfasfafdafdsafdafa'
这时编辑上述文件,再开头添加上DNS的token和key即可,在文件开头添加后,大概如下所示:
export Ali_Key="sdfsaf...xxxxxxxxxx" export Ali_Secret="klfasldfka...xxxxxxxxx" #LOG_FILE="/home/用户名/.acme.sh/acme.sh.log" #LOG_LEVEL=1 #AUTO_UPGRADE="1" #NO_TIMESTAMP=1 ACCOUNT_EMAIL='service@zhuanfou.com' UPGRADE_HASH='sfadfasfafdafdsafdafa'
如果是阿里云的DNS的token,就如上加入:
export Ali_Key="sdfsaf...xxxxxxxxxx" export Ali_Secret="klfasldfka...xxxxxxxxx"
如果是腾讯云DNSPOD的token,就加入:
export DP_Id="sdfsaf...xxxxxxxxxx" export DP_Key="klfasldfka...xxxxxxxxx"
如果是CloudFlare的token,就加入:
export CF_Token="sdfsaf...xxxxxxxxxx" export CF_Account_ID="klfasldfka...xxxxxxxxx"
不过CloudFlare的操作界面可以自动勾选自动颁发ssl证书,所以未必需要再手动去设置了。使用acme.sh的另一个好处就是,比certbot支持更多平台的dns api,其他的DNS平台设置,可以参考这篇,目前支持主流的158个DNS平台。
3、使用acme.sh申请通配型SSL证书
以zhuanfou.com申请通配型SSL证书为例。
acme.sh --issue --dns dns_ali -d zhuanfou.com -d *.zhuanfou.com
因为我用的是阿里云的dns,所以我的--dns参数的内容是dns_ali;
如果你用的是腾讯云的DNSPOD,那么--dns参数的内容就是dns_dp;
如果你用的是CloudFlare,那么--dns参数内容就是dns_cf。
如果想申请不只一个域名的通配型ssl证书,也就是多域名证书,比如我同时想申请zhuanfou.com和mengso.com的通配型域名证书。
那就如下:
acme.sh --issue --dns dns_ali -d zhuanfou.com -d *.zhuanfou.com -d mengso.com -d *.mengso.com
此外还需要注意一下是否要强制申请的通配型SSL证书具体是哪家的;
以前默认的通配型SSL证书,是Let’s Encrypt这家的;目前默认的通配型ssl证书是ZeroSSL这家的。两家没什么区别,就是不同家的而已。我之前没有指定,就自动生成成ZeroSSL这家了。
如果要强制指定生成Let’s Encrypt这家的,再上述命令后,继续加配置参数如下:
--server letsencrypt
完整的命令就是:
acme.sh --issue --server letsencrypt --dns dns_ali -d zhuanfou.com -d *.zhuanfou.com
同理,如果要强制指定使用Zerossl这家的通配型SSL证书,那就:
--server zerossl
大差不差,看了一下,最近好像网上的呼声是更推荐使用zerossl这家的渠道。
申请会需要一点时间的,耐心等着即可;申请成功后,大致会输出如下:
[Thu Feb 15 10:07:14 CST 2024] Your cert is in: /home/用户名/.acme.sh/zhuanfou.com_ecc/zhuanfou.com.cer [Thu Feb 15 10:07:14 CST 2024] Your cert key is in: /home/用户名/.acme.sh/zhuanfou.com_ecc/zhuanfou.com.key [Thu Feb 15 10:07:14 CST 2024] The intermediate CA cert is in: /home/用户名/.acme.sh/zhuanfou.com_ecc/ca.cer [Thu Feb 15 10:07:14 CST 2024] And the full chain certs is there: /home/用户名/.acme.sh/zhuanfou.com_ecc/fullchain.cer
4、使用acme.sh去部署
不要去直接复制上面生成的证书文件,应该使用acme.sh命令去自动化部署。你可以单独设置一个文件夹去存放证书文件,也就是让acme.sh把证书文件部署到你指定的文件夹下,我自定义的文件夹叫“freessl”,你也可以自定义其他名称和路径:
acme.sh --install-cert -d zhuanfou.com \ --key-file /home/用户名/freessl/zhuanfou.com.key \ --fullchain-file /home/用户名/freessl/zhuanfou.com.pem \ --reloadcmd "部署成功后运行命令"
因为我是nginx使用ssl证书,所以我只需要key-file和fullchain-file即可。如果你是apache,你可能需要cert-file文件,那你就在上面加一条:
acme.sh --install-cert -d zhuanfou.com \ --cert-file /home/用户名/freessl/zhuanfou_com_cert.pem \ --key-file /home/用户名/freessl/zhuanfou.com.key \ --fullchain-file /home/用户名/freessl/zhuanfou.com.pem \ --reloadcmd "部署成功后运行命令"
而上述的reloadcmd就是部署成功后该运行的命令,正常来说nginx要重启就如下:
acme.sh --install-cert -d zhuanfou.com \ --key-file /home/用户名/freessl/zhuanfou.com.key \ --fullchain-file /home/用户名/freessl/zhuanfou.com.pem \ --reloadcmd "service nginx force-reload"
但是我的nginx的重新加载命令不是这样的,而是“sudo nginx -s reload”,那就改成适合我自己的:
acme.sh --install-cert -d zhuanfou.com \ --key-file /home/用户名/freessl/zhuanfou.com.key \ --fullchain-file /home/用户名/freessl/zhuanfou.com.pem \ --reloadcmd "sudo nginx -s reload"
备注,我已经对于nginx赋权了,我的nginx使用sudo时是不需要输入管理员密码的。这些自动化运行的程序还是要注意一下运行权限的,这个自己要留下心即可。
但是,我希望实现更多的操作,比如,更新证书以后,我希望自动推送证书到七牛云等CDN的ssl证书配置中去;以及我希望更新证书后,我收到一条短信通知或者pushdeer渠道发来的通知。这里面有很多自定义的事情可以做的。因此,我没有采用直接reloadcmd命令为单纯的重新加载命令,我把这个命令改成了运行某个绝对路径下python脚本文件。示例如下:
acme.sh --install-cert -d zhuanfou.com \ --key-file /home/用户名/freessl/zhuanfou.com.key \ --fullchain-file /home/用户名/freessl/zhuanfou.com.pem \ --reloadcmd "python /home/用户名/ssl_reload.py"
我在自定义的ssl_reload.py命令中可以使用os.system("sudo nginx -s reload")的方式来实现重新加载nginx,此外通知啊、推送ssl证书到七牛云、又拍云等,都可以通过python脚本层面去实现。
jerkzhang
感谢之前回答中推荐的trustocean,用了很久,不过最近trustocean挂了,当初立了一个flag说道“我也囤积了300张trustocean的免费证书,感觉够用几十年了,我先用着吧,先不急着换野卡了。这个免费资源真不错”,结果没几年就不得不换野卡了,野卡目前不仅支持RSA,也支持ECC了似乎。反正我要求不高,就要个通配的泛域名证书我就满足了,于是就开始了更换AlphaSSL的过程了,记录如下。
申请免费的一年的AlphaSSL,我找了很久也没找到如何免费申请,也并不知道这个口子是如何撕开的,反正目前找到的是萌咖站点有渠道能用24.99元就签发到一年期的AlphaSSL。虽然不是免费,但这已经是能找到性价比最高的了。
比如你的域名是xxx.com,你要申请的通配域名是*.xxx.com
步骤1:准备好admin@xxx.com
虽然不准备admin@xxx.com也可以操作,但是最好还是使用自己的admin@xxx.com;利用腾讯邮箱企业版或者网易企业邮箱,即可免费有自己域名后缀的企业邮箱。
步骤2:利用第三方工具生成csr和key文件
通过csr在线生成工具,填好后,即可生成对应的csr和key文件。
填表单的时候,注意申请的域名填写“*.xxx.com”,
邮箱名填写admin开头的那个邮箱“admin@xxx.com”即可。
其他的看着填即可。
可以勾选中后发送生成的CSR文件到上面输入的邮箱的选项,之后会把两个生成的文件发到你邮箱去的,收到的文件名会类似如下:
star.xxx.com_csr.txt 这就是csr文件,可改名为xxx.csr star.xxx.com_key.txt 这就是以后的私钥,可改文件名为private.key
步骤3:通过萌咖站点的api进行签发证书
打开萌咖的签发证书的页面。如下图所示,填写csr文件内容和token,token的购买链接点这里,打开后点击“购买服务”;因为是私人弄的,全自动发货的,所以有失败的可能性,无售后服务。(该站点为何能用极低的价格买到五十倍左右于此的商品,我无法理解,抱着试试的态度,我个人是成功签发了一年期的通配的泛域名整数,至于能否顺利用1年,等1年后再来更新这个帖子吧)
步骤4:admin@xxx.com会收到邮件,按指示操作即可
admin@xxx.com会收到第一封邮件,里面有个超链接,打开后,点击“I APPROVE”按钮即可,接下过几分钟你会收到第二封邮件,第二封邮件中就会有签发的证书内容。
把证书内容copy下来,放到一个文本文件中,保存成“public.pem”即可。
步骤5:补全证书链
把刚才保存的的“public.pem”打开后,在末尾添加如下内容后再保存一下。(备注:以下补全的证书链只到2027年10月12日有效,后续可以再搜一下,或者去网上找自动补全的应用)
-----BEGIN CERTIFICATE----- MIIEijCCA3KgAwIBAgIQfU1CqStDHX5kU+fBmo1YdzANBgkqhkiG9w0BAQsFADBX MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UE CxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTIyMTAx MjAzNDk0M1oXDTI3MTAxMjAwMDAwMFowTDELMAkGA1UEBhMCQkUxGTAXBgNVBAoT EEdsb2JhbFNpZ24gbnYtc2ExIjAgBgNVBAMTGUFscGhhU1NMIENBIC0gU0hBMjU2 IC0gRzQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtJCmVZhWIPzOH A3jP1QwkuDFT8/+DImyZlSt85UpZwq7G0Sqd+n8gLlHIZypQkad5VkT7OLU+MI78 lC7LVwxpU19ExlaWL67ANyWG8XHx3AJFQoZhuDbvUeNzRQyQs6XS5wN6uDlF0Bf1 AtCUQWrGGLGYwyC1xTrzgrFKpESsIXMqklUGTsh8i7DKZhRUVfgrPLJUkbbLUrLY 42+KRCiwfSvBloC5PgDYnj3oMZ1aTe3Wfk3l1I4D3RKaJ4PU1qHXhHJOge2bjGIG l6MsaBN+BB2sr6EnxX0xnMIbew2oIfOFoLqs47vh/GH4JN0qql2WBHfDPVDm3b+G QxY6N/LXAgMBAAGjggFbMIIBVzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYI KwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYE FE/LrKjC76vdg29rv86YPVxYJXYVMB8GA1UdIwQYMBaAFGB7ZhpFDZfKiVAvfQTN NKj//P1LMHoGCCsGAQUFBwEBBG4wbDAtBggrBgEFBQcwAYYhaHR0cDovL29jc3Au Z2xvYmFsc2lnbi5jb20vcm9vdHIxMDsGCCsGAQUFBzAChi9odHRwOi8vc2VjdXJl Lmdsb2JhbHNpZ24uY29tL2NhY2VydC9yb290LXIxLmNydDAzBgNVHR8ELDAqMCig JqAkhiJodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL3Jvb3QuY3JsMCEGA1UdIAQa MBgwCAYGZ4EMAQIBMAwGCisGAQQBoDIKAQMwDQYJKoZIhvcNAQELBQADggEBABol 9nNkiECpWQenQ7oVP1FhvRX/LWTdzXpdMmp/SELnEJhoOe+366E0dt8tWGg+ezAc DPeGYPmp83nAVLeDpji7Nqu8ldB8+G/B6U9GB8i2DDIAqSsFEvcMbWb5gZ2/DmRN cifGi9FKAuFu2wyft4s4DHwzL2CJ2zjMlUOM3RaE1cxuOs+Om6MCD9G7vnkAtSiC /OOfHO902f4yI2a48K+gKaAf3lISFXjd32pwQ21LpM3ueIGydaJ+1/z8nv+C7SUT 5bHoz7cYU27LUvh1n2WSNnC6/QwFSoP6gNKa4POO/oO13xjhrLRHJ/04cKMbRALt JWQkPacJ8SJVhB2R7BI= -----END CERTIFICATE-----
到此应该算完成了。
如果需要crt文件,可以根据csr文件(之前上面我把csr文件定义为了xxx.csr文件)
生成的方式如下(如果本地没有安装openssl,就自己去安装吧):
openssl x509 -req -days 365 -in xxx.csr -signkey privite.key -out public.crt
生成结果是“public.crt”文件。
nginx配置ssl可能还需要一个dhparam.pem,那就自己去生成一个即可:
openssl dhparam -out dhparam.pem 2048
冯纪忠雄
如果我没记错的话,安信的Sectigo以前就是叫“Comodo”,这个的名声还是有的,也很便宜,值得一试,从淘宝上去找人买,可以做到260-265元买到一年的通配型SSL;另外还有一个品牌叫AlphaSSL,也是通配符的,价格更便宜,130元一年。
不过上述我自己都没试过,2000元的TrustAsia个人认为是云主机厂商和SSL证书商家的一种割韭菜的手法吧,TrustAsia其实挺好的,基本上每个云主机或云服务厂商都会提供免费的TrustAsia的单域名SSL证书,用习惯了也就会有品牌认同感了,自然而言就会优先考虑TrustAsia的付费SSL证书。这也算TrustAsia的一种商业模式吧。
如果追求便宜,那就考虑Sectigo/Comodo、AlphaSSL、RapidSSL等这些比较便宜的通配符SSL证书吧。
后来我才知道,淘宝上卖野卡AlphaSSL的其实都是网上免费生成的,哈哈被坑了。原来竟然有免费的通配SSL证书。不过我不是看好免费的野卡,我比较看好另外一个回答中的白拿3个月的通配SSL证书。(链接地址)
野卡AlphaSSL虽然是有被吊销的可能,但正常情况下被吊销的可能很小。
Only Mystery
Sectigo SSL(原COMODO CA) 的代理商 TrustOcean有泛域名通配符免费推广计划,100*域名&未计量的子域名在90天内完全免费,凭借CSR文件可以无限免费续签。
我这囤积了大概3000多张。可以自行前往trustocean.com去签,我也可以直接帮你。
官网也有直接购买的,但是价格在小1k左右。
其次是AlphaSSL也就是俗称的野卡。这一家SSL通配符只需要24/一年。我昨天还刚好才签了两本,
出来的证书效果是my.cloudraft.cn这个样子。
官网售价比较高,但是走萌咖大佬的API签发只需要24就能到手。
谈谈利弊时间。
Sectigo支持ECC证书。而野卡只有RSA。
TrustAsia嘛。那个是赛门铁克自家CA的大中华地区总代。付费证书满满的资本恶臭味。并不是太划算。
喷火的尾巴
安信Sectigo Comodo的SSL通配型证书确实是比较便宜的,有时淘宝上可以找到200多元的Sectigo Comodo安信的SSL通配型证书,但是我不确定是否是真的,看过的,但没试过。
华为云上应该有些便宜的通配型SSL证书,但是也是1000出头,我觉得安信的Sectigo Comodo通配型SSL证书是一个值得试一试的选择方案。