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”创建密钥:

3FF20576-0DAC-4349-AF5D-1BF6CBCB298A.webp

如果你用的是阿里云,在右上角头像下拉中选择 AccessKey 管理 ,创建密钥:

4C1799CD-EC67-4F54-A355-82E4D00E18B3.webp

创建好密钥后,使用如下命令把它们的IdTokenSecret放到环境变量中

# 腾讯云
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使用,只需要更改后缀即可。
官方中文说明文档:点击前往
官方项目地址:点击前往

THE END