Contents
前言
通常,我们在建站的时候,逃不过的一步就是需要对外提供https的访问。如果域名解析和CDN是使用cloudflare还好(相对国内的云供应商,cloudflare配置ssl方面的操作简直少得可怜),如果是通过国内云供应商的CDN、SLB等技术或者直接在云主机上建站,则必须面对申请ssl证书的问题。正常来讲,在腾讯云个人账号最多可以申请50张免费证书(以前是20张,2024年1月17号开始升级为50张,其中30张免费证书可绑定腾讯云域名;20张免费证书支持绑定全网域名,不过需要成为腾讯云V2会员),和阿里云都能蹭到20个免费的证书。目前腾讯的新申请的免费证书还是1年期(这个其实就是TrustAsia的1年期证书),如下:
但是阿里云的免费证书已经从2023年11月14号开始变成了3个月:
腾讯1年期的免费证书还有价值,但是阿里云3个月的免费证书就真的没意义了,不如直接用Let’s Encrypt自动续签(难道就是直接从TrustAsia的1年期变成Let’s Encrypt的3个月?)。
一般来说,如果源站是使用linux面板或者NPM,都支持Let’s Encrypt的到期自动续签功能,或者nginx + acme.sh脚本的方式自动续签。不过,最麻烦的地方不在源站,而在于已经上传到国内云供应商上的属于Let’s Encryp的自定义证书,比如我上传到腾讯云的Let’s Encryp证书:
到期时间4月6号,可没几天了,并且关联了12个资源(而且只是现在12个,以后指不定多少呢),我总不可能每3个月重新生成并上传一次,然后再更新12个关联资源吧,那不累死我。其实也正是因为这个问题,导致我最开始的时候都尽量用的腾讯云免费蹭的1年期证书,结果做试验把证书额度都耗光了(当时免费证书只有20个,不过就算现在的30个也不够我霍霍)。。。到最后又被逼回来面对这个问题(讲道理,当时的20个1年期证书,正常人用应该也够了,奈何我自己不正常)。
那么现在唯一要解决的问题,就是上传到云供应商上的Let’s Encrypt证书以及已经部署到关联资源(CDN,SLB,CLB等)上的Let’s Encrypt证书的到期续签问题,如果解决了这个问题,那么就真的实现了"ssl证书自由了",再也不用关心"ssl证书过期"这个问题了。并且,最好也能同时一站式解决其他方式部署Let’s Encrypt的证书续签问题就再好不过了,有没有这种方式呢?还真有,那就是OHTTPS提供的一站式解决方案。
OHTTPS
先来看OHTTPS的官方介绍:
从上图红框中的描述来看,刚好可以解决我头疼的问题(经过验证以后的确可以)。其实,本质上来讲,OHTTPS就是通过各种环境(linux面板,云供应商、云主机等)提供的合法访问方式(如API和SSH)去访问各种环境并更新证书,所以需要涉及到各种环境API的获取,我后面会介绍我常用的2种常用环境(宝塔面板和腾讯云CDN)的操作方式。
注册OHTTPS账号
访问OHTTPS官网:https://ohttps.com/,点击右上角的注册:
填写注册邮箱和密码,获取邮件验证码之后点击下方红框中的"注册":
然后进入添加域名步骤,建议直接添加泛域名,以我闲置的tangwudi.xyz域名为例,直接填写:
*.tangwudi.xyz
,然后点击右下方红框中的"下一步":验证域名有2种方式,一种是"免DNS授权模式",其实就是CNAME方式,将下方红框中的内容以CNAME方式添加到域名供应商的控制台中:
另一种"DNS授权"模式,就是直接提供以API方式登录到域名供应商的控制台:
第一种方式更安全,第二种方式更方便(如果是cloudflare,需使用globl api),大家根据自己的喜好进行选择即可。
注1:选择第一种方式,CNAME记录不要删除,否则会导致以后证书更新的时候失败。
注2:如果要使用国内云供应商提供的服务,必须是备案域名。
点击右下方红框中的"创建证书"后,进入第3步,申请证书:
申请成功以后,分别下载第1行的私钥文件和第3行的证书文件保存,然后点击右下方红框中的"管理证书":
然后正式进入OHTTPS的控制台:
注:上面下载的证书和私钥文件其实就是申请到的Let’s Encrypt的证书和私钥文件(有效期只有从创建时间算起3个月的时间),这2个文件在其他部署环境(linux面板,云供应商、云主机等)中导入自定义证书的时候都需要用到,所以需要保存好。
OHTTPS支持下图红框中的环境的统一部署及证书更新:
可以看到,除了支持的云供应商覆盖了我们常用的:阿里云、腾讯云、七牛云、百度云加速之外,还有宝塔面板、Docker、还有SSH(对应云主机)等,可以说实用性还是很广的。
下面以我现在常用的2个环境:宝塔面板和腾讯云为例演示部署过程。
部署OHTTPS节点-宝塔面板
配置宝塔面板
因为要让OHTTPS从公网上访问宝塔面板,为了安全起见还是要启用面板SSL,在"面板设置"-"安全设置"-"面板SSL配置":
将上一节保存的密钥和证书文件分别用文本编辑器打开,将内容分别复制到密钥框和证书框里,然后点击下方的保存:
然后进入"面板设置"-"API接口":
将"119.28.42.104"加入宝塔面板API的IP白名单中并把红框中的接口密钥记录下来:
注:API接口选项我是打开了的,但是不知道为什么,好像从8.0.5版本开始就有这个问题,打开了却显示没打开,但是如果你去点开关的话,又会提示已关闭,就是和显示的状态是相反的,搞不懂。
配置宝塔面板站点的SSL
在"网站"-"PHP"项目下选择需要配置SSL的站点,以站点"test.tangwudi.xyz"为例,选择"SSL"下的"当前证书",和启用面板ssl的时候一样,将前面保存的私钥和证书文件的内容分别粘贴到密钥框和证书框,并点击下方红框中的"保存并启用证书":
以后也可以在右方红框中的"证书夹"之中直接选择部署:
注:如果网站发布https的端口不是标准的443端口,需要在站点里的配置文件里修改,比如,我的https端口发布在55555端口,则修改如下(修改后记得点击最下方的保存):
在OHTTPS中添加宝塔面板站点
在宝塔面板完成了上一节相关的配置之后,就可以在OHTTPS里部署该宝塔节点了,进入OHTTPS控制台,点击"部署节点"-"添加节点":
在类型中选择"宝塔面板",并选择"网站SSL":
上图中的宝塔面板地址如实填写即可,注意如果是非标443端口需要在地址后面用:port的方式标明;API接口密钥填写上节中记录的密钥;网站名称如实填写,本例中就是"test.example.com",然后点击"下一步"进入关联证书界面并添加关联证书:
选择前面创建的证书并选择右下方红框中的"确定":
选择右下方红框中的"创建部署节点":
然后在"部署节点"中可以看到刚刚的网站节点已经部署完成:
部署OTTPS节点-腾讯云CDN
注:使用包括腾讯云在内的国内CDN的前提是域名已经备案,下文以"test.tangwudi.xyz"为例。
获取"SecretId"和"SecretKey"
就如上一节中添加宝塔面板节点需要API密钥,添加腾讯云CDN节点需要"SecretId"和"SecretKey",如何获取我这里就不赘述了,OHTTPS官网有详细教程,大家按照教程操作即可获得,教程地址如下:https://ohttps.com/docs/cloud/tcloud/ssl。
上传自定义证书到腾讯云
进入腾讯云的"控制台"-"SSL证书"-"上传证书":
在下图中将前面保存的Let’s Encrypt的证书通过点击上传或者复制粘贴证书和私钥内容到红框中,然后点击最下方红框中的"确定"以上传到腾讯云"我的证书"中:
然后可以看到在"上传证书"中已经可以看到刚才上传的证书了:
在腾讯云CDN中给加速域名配置https服务和关联证书
其他配置加速域名的步骤略过,这里只提一下相关https配置的界面,启用红框中的"HTTPS"服务并配置证书,如下图:
选择上一节上传的证书(我的闲置域名没有备案,这里用不了,这里就用我的备案域名来模拟一下界面),然后选择下方红框中的"确定":
最后点击最下方红框中的"提交所有配置":
注:不要忘记在域名供应商的dns控制台配置域名的CNAME指向腾讯云的加速地址,如果本来域名就是在腾讯云购买的就简单,点一下"一键部署"CNAME就行了,如下图:
在OHTTPS中添加腾讯云CDN节点
和前面的添加宝塔面板节点类似:
在类型中选择"腾讯云"以及"CDN",然后如下图注释填写相关信息,然后点击右下方红框中的"下一步":
后续步骤和前面添加宝塔面板节点一样:
然后在"部署节点"中可以看到刚刚的腾讯云CDN节点已经部署完成:
添加其他环境节点的方式我就不细说了,都是类似的,大家也可以参考官方相关的教程。
配置证书到期前自动更新时间
在OHTTPS控制台的"证书管理"界面,可以对证书的"到期前自动通知时间"、"到期前自动更新时间"、是否自动部署的参数进行设置,直接在"证书管理"界面,选择需要修改参数的证书最右边的红框中的"配置":
在配置界面中,可以直接修改证书到期前通知时间、证书到期前自动更新以及是否证书更新后是否自动部署(这个更新后自动部署应该是指CDN环境,因为CDN环境有单独的SSL证书的选项,宝塔面板只网站SSL和面板SSL两个选项,估计只能更新这两个)。需要统一部署的节点直接添加到右边红框中即可,完成所有配置后点击最下方红框中的"确认修改":
使用费用
OHTTPS并不是免费的,官方收费说明如下:
按一个节点,一年默认更新6次来计算(90天有效期,剩余30天更新,也就是60天更新一次),需要25✖️6÷100=1.5元。如果按照20个节点来算就是30元。而腾讯云申请最便宜的个人通配符证书的价格:
30元和1385元还是有点差距的,而且一般人也没有20个节点那么多吧。。我现在有多少个节点呢?
32条,按40个算的话(我还会增加),1.5✖️40=60元一年,也还可以接受。
后话
其实,腾讯云的50个免费证书额度(域名在腾讯云的有30个单域名证书,V2会员才有20个全单域名的证书)还是蛮良心的,我的备案域名是在腾讯云的DNSpod上,所以现在有30个1年期的免费域名,讲道理好好规划一下,一般人的其实也够了,不过如果是要做测试或者经常有新奇想法的,这30个就难说了。怕的是这30个证书如果大量使用,而且是在多个地点导入使用,那一年更换一次说不麻烦也不麻烦,说麻烦也麻烦,所以我觉得OHTTPS的优势是在这里,用很低的价格完成了所有位置证书的一站式管理和更新,比如我现在,用在家里作为家庭数据中心总出口反向代理的宝塔面板上站点的证书、腾讯云轻量主机上作为反向代理的宝塔面板上的站点证书,以及腾讯云的SSL证书和CDN域名证书的统一更新,所以才有32个之多。。
其实还有另外一个问题,腾讯云DNSpod上的域名申请的1年期免费单域名证书和用Let’s Encrypt使用DNSpod进行DNS鉴权而自动申请的证书都是亚洲诚信范围的证书,所以共享一个主域名下20个主机名的限制:
这导致了一个让我很尴尬的问题:当时我腾讯云上的20张免费1年期证书的额度用完的时候,我的宝塔面板上站点使用Let’s Encrypt也无法申请证书了,因为20张免费证书的额度已经用光了。其实现在哪怕腾讯云有30张免费证书也没用,因为亚洲诚信的一个主域名最多20张免费证书的限制,多余的10张免费证书额度只能用在腾讯云上的其他主域了(如果有的话)。
但是OHTTPS可以解决这一个问题,因为OHTTPS是直接从Let’s Encrypt申请的R3证书(R3是Let’s Encrypt证书链中的中间证书之一,用于验证服务器证书的可信性),所以不受亚洲诚信一个主域20个证书的限制:
其实OHTTPS的限制就是Let’s Encrypt的限制。
总之,腾讯云的1年期单域名免费证书还是很香的,如果站点数量少同时部署位置不多、管理成本不高的话,30个免费证书也够用了。至于多站点数量大以及多位置部署的场景,OHTTPS就可以发挥作用了。
另1:最近优化了一下OHTTPS上的部署节点,把宝塔面板相关的都删除掉了,因为我的宝塔面板上的站点都是作为腾讯云CDN的回源HOST来使用的,而腾讯云CDN在使用HTTPS回源的时候是不会检查源站证书的合法性的,所以利用这一点,我把宝塔面板上站点的SSL证书全都换成了15年时间的证书(直接用cloudflare自签的15年证书,当然,你也可以自己颁发更长时间的),一劳永逸,又省了1年几十元的OHTTPS自动更新费用。。。
另2:以前傻逼了,添加了那么多腾讯CDN部署节点,明明只需要腾讯CDN上的域名都指向同一个泛证书,然后只更新这个证书就行了。。。