SLL证书是什么?
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
curl https://get.acme.sh | sh
# 或者:
wget -O - https://get.acme.sh | sh
[info class=‘alert-primary text-dark’]1,如果在执行后长时间没有反应,请ctrltc 后重新执行命令。acme.sh 安装在~/:acme.sh 目录下。
2.如果在安装居提示 command not found 則需要重新加载环境变量 source ~/.bashrc 或source ~/.bash_profile 然后再执行下一步操作。[/info]以下是安装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
方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
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记录即可.
等待解析完成之后, 重新生成证书:
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"
然后再执行以下命令申请证书
# 腾讯云
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使用,只需要更改后缀即可。
官方中文说明文档:点击前往
官方项目地址:点击前往