手把手教你免费申请支持通配符的 SSL 证书

手把手教你免费申请支持通配符的 SSL 证书_第1张图片


得益于 Google 等大厂的消灭 HTTP 运动和 Let’s Encrypt 非盈利组织的努力,越来越多的站点开始迁移到 HTTPS,下图是 Let’s Encrypt 的统计数据。

手把手教你免费申请支持通配符的 SSL 证书_第2张图片


什么是 Let’s Encrypt

部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发。大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。

Let’s Encrypt 是一个国外的非盈利的 CA 证书机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的 SSL/TLS 证书。

由 Linux 基金会托管,许多国内外互联网大厂都对其进行赞助,目前主流浏览器均已信任 Let’s Encrypt 发放的证书。

注意:Let’s Encrypt 颁发的都是 DV 证书,不提供 OV、EV 证书。

本文主要讲解如何免费申请和使用 Let’s Encrypt 颁发支持通配符的 SSL 证书。


通配符证书

通配符 SSL 证书旨在保护主域名以及旗下不限数量的子域,即用户可通过单个通配符 SSL 证书可保护任意数量的子域名。如果用户拥有多个子域名平台,可通过通配符 SSL 证书保护这些子域名。

但是目前 Let’s Encrypt 只支持同级子域名通配符。例如 *.demo.com 只支持 xx.demo.com 这类的,而不支持 xx.xx.demo.com。

而要支持二级通配符需要再次颁发二级通配符证书,类似 
*.demo.demo.com

注意:这种的二级通配符,要求一级域名是固定的。意思是不支持 *.*.demo.com。

使用 acme.sh 简化证书颁发操作


官方建议使用 Certbot 来申请证书 ,但是很长一段时期 Certbot 并不支持通配符证书申请(现在已经支持),而且对于证书自动续期支持的也不是很友好。

  • 安装 acme.sh

$ curl https://get.acme.sh | sh# 或者$ wget -O -  https://get.acme.sh | sh# 或者$ git clone https://github.com/Neilpang/acme.sh.git$ ./acme.sh/acme.sh --install


  • 通过 DNS API 申请通配符证书


acme.sh 功能很强大,此处只介绍使用 Dns API 自动化申请通配符证书。目前支持包含阿里和 DNSPod 在内的 60 家 DNS 服务商。(参见 Currently acme.sh supports)

如果你的 DNS 服务商不提供 API 或 acme.sh 暂未支持,又或者处于安全方面的考虑,不想将重要的域名的 API 权限暴露给 acme.sh,可以申请一个测试域名,然后在重要域名上设置 CNAME(参见 DNS alias mode)。

假设您的域名在 DNSPod 托管,登陆 DNSPod 后台,依次打开 用户中心 ->安全设置 -> API Token -> 查看 -> 创建 API Token -> 输入任意 Token 名称 -> 确定 -> 保存 ID 和 Token 值(图中打码部分)。

手把手教你免费申请支持通配符的 SSL 证书_第3张图片

# 如果使用了 DNS 别名,还需要增加 --challenge-alias 别名域名 参数。# 为了防止 DNS 不生效,脚本会暂停 2 分钟,并倒计时(Sleep 120 seconds for the txt records to take effect),等待即可。# 如果成功会出现 Cert success. 字样。
$ export DP_Id="你的ID"$ export DP_Key="你的Token"$ acme.sh --issue --dns dns_dp -d example.com -d *.example.com
# 不建议直接用 ~/.acme.sh 下的证书,参考 https://github.com/Neilpang/acme.sh/wiki/说明#3-copy安装-证书。# 需要使用 --installcert 复制到指定目录。
$ acme.sh --installcert \-d example.com -d *.example.com \ --key-file /etc/letsencrypt/live/example.com/privkey.pem \ --fullchain-file /etc/letsencrypt/live/example.com/fullchain.pem \ --reloadcmd "service nginx reload"


优化 HTTPS 配置

本文以 Mozilla SSL Configuration Generator 生成的 Nginx 为例,同样也可以生成 Apache 和 IIS 的。

server {    listen 80 default_server;    listen [::]:80 default_server;        # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.    return 301 https://$host$request_uri;}
server { listen 443 ssl http2; listen [::]:443 ssl http2; # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits # openssl dhparam -out /etc/letsencrypt/live/example.com/ 2048 ssl_dhparam /etc/letsencrypt/live/example.com/dhparam.pem; # intermediate configuration. tweak to your needs. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months) add_header Strict-Transport-Security max-age=15768000; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on;
## verify chain of trust of OCSP response using Root CA and Intermediate certs # ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
    resolver ;     ....}


检查 HTTPS 得分

访问 https://www.ssllabs.com/ssltest/ 提交自己域名,进行评分。


参考资料

  • Chrome 将不再标记 HTTPS 页面为安全站点

  • Let’s Encrypt Stats

  • About Let’s Encrypt

  • Mozilla SSL Configuration Generator

  • DV型、OV型、EV型证书的主要区别

  • Neilpang/acme.sh#Wiki#安装说明

  • Neilpang/acme.sh#Wiki#How to Install

  • Neilpang/acme.sh#Wiki#How to use DNS API

来源:安家的博客
原文:http://t.cn/EaW06eA题图:来自谷歌图片搜索 
版权:本文版权归原作者所有


你可能感兴趣的:(手把手教你免费申请支持通配符的 SSL 证书)