需要实现的效果
希望自己的NAS门户网站https链接前面都能有小锁,而不是提示”不安全网站”。尝试了很多方式去满足自己的需求,这里记录下对自己而言,行之有效的手工生成方式。攻略暂时仅供自己记录,如果有帮到屏幕前的您各位,就当缘分了,不足和遗漏之处欢迎指出,这边尽量完善,方便大家都能掌握生成SSL证书的思路。
网上有许多攻略是基于用户已经有SSL证书的前提下,偏重于记录如何给自己的服务配置SSL证书;本文的重点在于如何去获取这项”资源”,查漏补缺,大家阔以结合着看,兼听则明嘛。
提纲:
- 需要实现的效果
- 环境
- 网页手工生成SSL证书
- 命令行手工生成SSL证书
- 已解决的卡壳问题
- 遗留问题
- 参考链接
- ZeroSSL作为一个证书签发机构,免费版下支持最多生成三个域名的证书,如果有进阶需求,需要付费咯。
环境
- 操作系统:macOS Monterey
- 华硕路由器固件版本: 384.18
- Homebrew:3.6.5
- acme.sh:v3.0.5
- OpenSSL:3.0.5
- 群晖系统:7.1.1
操作步骤
网页手工生成SSL证书
创建ZeroSSL账号,点击”创建新证书”,按照要求生成证书文件,需要注意的是,这里验证,是需要到域名运营商后台,DNS解析里添加对应的解析信息。
这里需要注意的是,自己域名是在name.com上购买,域名服务器设置的是默认的n1.name.com
,所以笔者是在name.com的DNS管理记录中增加了下面这一条的校验信息,为了zeroSSL对域名的校验通过。
命令行手工生成SSL证书
上面那种只能生成三个证书,可自己至少有八个服务(而且都想配置二级域名,类似于https://video.xxx.com/
、https://nas.xxx.com/
)需要配置证书(当然是手工啦,jio本那种还要学习一下怎么自动化),那怎么办呢,网上有看到网友提供的代生成SSL证书服务(需要提供DNS API)——泛域名证书申请 https://ssl.ioiox.com/,可惜仅限于三个域名解析服务商(腾讯云 / 阿里云 / Cloudflare ),而笔者选择name.com服务商很显然不在其中,并且自己那时候还不知道怎么修改域名服务器(这样就可以用阿里云来解析),当然,如果那时候改成阿里云来解析域名,也就损失了下面自我探索的乐趣咯,有得有失吧。
所以那时只好狠下心来研究怎么用acme.sh来申请ZeroSSL泛域名证书。
安装acme.sh
1 | curl https://get.acme.sh | sh |
安装成功后可以输入acme.sh -v
查看acme的当前版本
1 | acme.sh -v |
原本是要用acme来执行命令签发ssl证书,这里有两个问题卡住了我,一个是命令(acme.sh --issue --dns dns_ali -d *.hutianhua.com
)报错,提示openssl的版本太低,某些函数因缺失或改变而导致命令执行不了,网上搜了下,大概是mac自带openssl和brew安装的openssl版本不一致;另一个问题,因为自己域名解析商选的是name.com,网上的攻略贴大多是以阿里云、华为云为例的代码,所以当时折腾了很久,才稍微明白了一点域名服务商、域名解析服务商、acme之间的关系。
所以在执行主线任务——用acme签发ssl证书——前,笔者需要先解决这两个”拦路虎”,有遇见类似问题的盆友可以参考下,没有遇见的盆友可以跳过这两步。
acme.sh 注册邮箱
1 | acme.sh --register-account -m xxx@qq.com --server zerossl |
【选看】更新openssl配置环境变量
=>关于mac自带的openssl和brew安装的openssl冲突 2021-09-29
1 | brew install openssl |
如果是使用的oh-my-zsh作为mac的终端,那么需要在文件.zshrc中配置openssl的路径;如果是默认的终端,就是在.bash_profile中配置,这里需要操作者灵活判断下。
1 | vi .zshrc |
然后在文件中加入下面的变量
1 | export PATH=/usr/local/bin:$PATH #这个很重要!!! |
查看下openssl的版本,是3.X.X就没问题了(截止发博文日哈,攻略一般有实效性,请灵活判断下),iMac自带的openssl@1就不对
1 | openssl version |
【选看】配置DNS API
acme.sh针对不同DNS运营商做出了不同定制化命令行How to use DNS API,这里以”name.com”为例子。
1.登陆https://www.name.com/zh-cn/account/settings/security打开NAME.COMAPI访问权限,账户设置 > 安全 > 安全设置 > NAME.COM API设置
2.登陆https://www.name.com/account/settings/api创建name.com的DNS API
在account.conf中保存用户名和令牌
1 | cd .acme.sh |
对单域名example.com
生成证书
1 | acme.sh --issue --dns dns_namecom -d example.com -d www.example.com |
对泛域名*.example.com
生成证书
1 | acme.sh --issue --dns dns_namecom -d 'example.com' -d '*.example.com' |
NAS配置证书
在.acme.sh/example.com下可以找到生成的证书
1.控制面板 > 安全性 > 证书 > 新增 > 新增新证书
点下一步,然后将生成的证书.key、.cer上传,点击保存,就可以了
2.控制面板 > 安全性 > 证书 > 设置
给自己NAS上的各种服务,都配置上SSL证书
大功告成,完结,撒花🎉~
已解决的卡壳问题
生成证书提示要加白名单
这里在name.com后台将本地IP加入白名单,并且开API安全令的开关,就可以了。
生成证书提示zsh: no matches found: *.example.com
域名注意要加单引号,自己参照示例写成了acme.sh --issue --dns dns_namecom -d example.com -d *.example.com
就会报这个错误,后来改成acme.sh --issue --dns dns_namecom -d 'example.com' -d '*.example.com'
就可以生成证书了。
遗留问题
ASUS路由器上的[Let’s Encrypt]到底能不能生成ssl证书呢?
自己的电信宽带实测80/443端口外网访问不到,可为什么看到网上有网友说可以生成证书呢?当时在这里折腾了很久,官方攻略提供了这种渠道(虽然那时候的自己并没有完全理解最后一句话的含义”请确保您的路由器可以通过 Internet 的 80端口发出网域验证和证书续订”);网上也有说可以用这种方式生成证书,但自己实测不行。
”头铁”硬是升级了路由器固件(原来的380没有这个功能)版本尝试(还导致原有的科学上网不能用,啊这是另外一个故事了),但这个[Let’s Encrypt]执行命令后长时间没有反应,就很尴尬,不知道是升级的固件问题,还是[Let’s Encrypt]的问题,又或者是宽带的问题,头大。
acme.sh怎么更新证书呢?
这个待第一次证书到期后,笔者再琢磨琢磨吧。
参考链接
- 使用acme.sh申请ZeroSSL泛域名证书 2021-06-09 重要
- 利用 acme.sh 申请 ZeroSSL 泛域名证书的图文教程 2022-09-16
- Mac下 .bash_profile 和 .zshrc 两者之间的区别 2019-01-14
- acme.sh 官方使用说明中文版|github
- acme.sh 如何使用DNS API|github
- openssl tags|github
- 关于mac自带的openssl和brew安装的openssl冲突 2021-09-29
- acme.sh安装ssl 2021-12-09
- 如何使用ASUS路由器的功能来创建HTTPS的有效证书? 2021-12-30
- Synology 服务状态
- [求助] 最近华硕的Let’s Encrypt服务停掉了吗 2020-2-25
- 梅林固件路由器部署SSL证书支持HTTPS访问 2019-02-28
- 群晖NAS应用程序设置独立门户域名教程 2019-04-17
- 使用acme.sh生成let’s encrypt泛域名证书 2020-04-03