SSL证书是什么?
SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。 因为配置在服务器上,也称为SSL服务器证书。 SSL 证书就是遵守 SSL协议 ,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。 SSL证书通过在客户端浏览器和 Web服务器 之间建立一条SSL安全通道(Secure socket layer (SSL)安全协议是由Netscape Communication公司设计开发。 该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。
SSL证书分类
现在SSL证书已经成为建站必不可少的一部分,基本上所有的站点都使用了https协议。在申请SSL证书的时候,我们了解到,证书有:单域名SSL证书、通配符SSL证书、多域SSL证书、多域通配符SSL证书。
单域名SSL证书最实惠,但缺点是他并不包含任何子域名。而通配符SSL证书则包含了单个域、其所有相关页面以及无限数量的第一级子域,但是他不包含二级子域名。但这也对个人站点够用了,很少会有个人站点同时用到多个二级子域名。
如何申请通配符SSL证书
本文使用acme.sh
申请和安装泛域名SSL证书。
一、环境配置:
- centos7.6
- nginx1.21
- 阿里云域名服务商
二、安装acme.sh
1.安装socat
模块。
安装过程需要服务器已安装socat
模块,没有安装的执行以下命令进行安装。
yum install socat
2.安装amce.sh
bash 代码:curl https://get.acme.sh | sh
# 或者:
wget -O - https://get.acme.sh | sh
1.如果在执行后长时间没有反应,请ctrl+c
后重新执行命令。acme.sh 安装在 ~/.acme.sh 目录下。
2.如果在安装后提示command not found
则需要重新加载环境变量source ~/.bashrc
或source ~/.bash_profile
然后再执行下一步操作。
以下是安装acme.sh
时的一些高级选项及说明
--home是要安装的自定义目录acme.sh。默认情况下,它安装到~/.acme.sh
--config-home是一个可写文件夹,acme.sh 会将所有文件(包括证书/密钥、配置)写入那里。默认情况下,它在--home
--cert-home是一个自定义目录,用于保存您颁发的证书。默认情况下,它保存在--config-home.
--accountemail 是用于注册 Let's Encrypt 帐户的电子邮件,您将在此处收到续订通知电子邮件。
--accountkey是保存您的帐户私钥的文件。默认情况下,它保存在--config-home.
--user-agent 是用于发送到 Let's Encrypt 的用户代理标头值。
--nocron在没有 cronjob 的情况下安装 acme.sh
三、申请证书
通常申请证书有两种方式
1.http
方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
bash 代码:acme.sh --issue -d example.com --webroot /wwwroot/example.com/
只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.
如果你用的apache
服务器, acme.sh
还可以智能的从 apache的配置中自动完成验证, 你不需要指定网站根目录:
acme.sh --issue -d mydomain.com --apache
如果你用的nginx
服务器, 或者反代, acme.sh
还可以智能的从nginx
的配置中自动完成验证, 你不需要指定网站根目录:
acme.sh --issue -d mydomain.com --nginx
注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.
2. 手动dns
方式, 手动在域名上添加一条 txt 解析记录, 验证域名所有权.
这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置Automatic DNS API
,使用这种方式acme.sh
将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
acme.sh --issue -d example.com -d "*.example.com" --dns \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
然后, acme.sh
会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条txt记录即可.
等待解析完成之后, 重新生成证书:
bash 代码:acme.sh --renew -d example.com -d "*.example.com" \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
3.DNS API方式
自动 DNS 验证方式需要使用域名解析服务商的 DNS API,像腾讯云(DNSPos)和阿里云都提供DNS API
功能。
如果你用的是腾讯云 DNSPod,在右上角头像下拉中选择API 密钥,点击“DNSPos Token”创建密钥:
如果你用的是阿里云,在右上角头像下拉中选择AccessKey 管理,创建密钥:
创建好密钥后,使用如下命令把它们的Id
和Token
或Secret
放到环境变量中
# 腾讯云
export DP_Id="Id"
export DP_Key="Token"
# 阿里云
export Ali_Key="AccessKeyId"
export Ali_Secret="AccessKeySecret"
然后再执行以下命令申请证书
bash 代码:# 腾讯云
acme.sh --issue --dns dns_dp -d example.com -d *.example.com
# 阿里云
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
四、安装证书
在~/.acme.sh/example.com/
目录生成的证书文件中,我们主要需要用到两个文件:*.cer
和*.key
。
注意事项:
- 证书生成成功后,默认保存在
~/.acme.sh/example.com/
目录中。请不要直接使用~/.acme.sh/
目录下的文件,这里面的文件都是内部使用的,而且目录结构可能会变化,我们需要把证书复制到需要用的地方去。 - cer当作pem使用,只需要更改后缀即可。
- 官方中文说明文档:https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
- 官方项目地址:https://github.com/acmesh-official/acme.sh/