介绍
5202年了,大部分网站都使用https协议,利用ssl/tls加密通信信息。特点验证服务器身份和保证数据完整性,SEO收录友好。SSL证书是https网站身份证明,比如我们的身份证、驾驶证。需要先向受认证的证书颁发机构CA(Certificate Authority)申请,然后将下发的证书部署在相应服务器上,保证网站可以https访问。就像我们提交资料给某些机构,对方发放证书,我们拿着对应证书放到一个地方,证明这个地方归属与你。直观网站有小绿锁提示访问安全。
拿本站证书举例,有域名、颁发机构、有效期、公钥。
证书路径,系统、浏览器有内置信任的根证书。另外还有自签证书,自己设定有效期,但要自己添加证书到可信任。
区别
按验证级别区分,域名验证(DV)、组织验证(OV)和扩展验证(EV)。DV 验证域名提供基本加密;OV 验证组织身份,适合小型企业;EV 提供最高信任级别,适用于电子商务和金融网站。
按域名数量区分,单域名证书,比如你申请了xx.com证书,访问https://xx.com证书是信任的,但https://api.xx.com不跟证书绑定,会提示不安全。其他多域名、泛域名/通配符域名*.xx.com绑定主域名下的所有域名,不用一个个单独申请。
证书颁发机构CA
付费机构有DigiCert、Sectigo(原Comodo)、CFCA、 TrustAsia亚洲诚信等。
免费的Let’s Encrypt、ZeroSSL、SSL.com、Google Public CA、Actalis等。已备案域名可以申请腾讯云/阿里云1年单域名证书。常用CA对比如下表。
| CA | 最长有效期 | 域名数量 | 泛域名 | ECC链 | 测试服务器 |
|---|---|---|---|---|---|
| Let’s Encrypt | 90 | 100 | 支持 | 全部 | 有 |
| ZeroSSL | 90 | 100 | 支持 | 全部 | 无 |
| 90 | 100 | 支持 | 部分 | 有 | |
| Actalis | 90 | 2 | 不 | 部分 | 无 |
| SSL | 104 | 2 | 不 | 部分 | 无 |
Let’s Encrypt有速率限制,每个账户下每个证书每小时最多可验证失败 5 次。如果连续失败换测试地址或者其他机构。
申请
上面提到域名验证(DV)。我们准备拿某域名申请证书,让证书机构审核,首先要证明服务器和证书有关。如果服务器80、443端口可以访问,就能用http(s)验证,使用工具访问到网页里的特定文件,机构审核通过生成对应证书。
如果这两个端口无法访问,就另外使用dns验证。验证要提供的资料,这里就是对应域名下的TXT记录,先添加TXT记录,机构审核有对应记录通过后颁发。手动每次自己添加太累,用相关dns服务商api自助添加TXT记录、申请、保存证书。
CF对应token申请。

Let’s Encrypt生成有cert.pem、key.pem、fullchain.pem,服务器最好选择fullchain.pem完整证书链,key.pem证书私钥。如果网页申请下载证书到本地。但证书90天后失效,最好部署个自动续期的服务。证书没及时更新时提示不安全。
域名托管在cloudflare可用通用SSl,自动添加续期。只要开启小黄云设置proxied。另外SSL/TLS下 Origin Server能创建最高15年证书。
申请证书挺多方式,在线的https://ohttps.com/ 或者工具如certbot、acme.sh、certimate等。选一个自己顺手方便的。
我是安装acme,国内访问不了用源码安装。安装时在目录下生成
.acme.sh文件夹存放配置和证书,创建别名,添加定时任务续期证书。
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m [email protected]
部署
现在如lucky、caddy等提供http服务又能申请续期证书。
lucky设置如下图。
nginx添加对应conf文件。其他软件添加证书和配置。
server {
listen 443 ssl http2; # 监听443端口,http2协议
server_name www.example.com; # 域名
ssl_certificate /path/to/ssl_certificate.pem; # 证书,有些是csr格式
ssl_certificate_key /path/to/ssl_certificate_key.key; # 证书私钥
# https相关设置
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html; # 对应网页路径
index index.html index.htm;
}
}




