004-零失败快速搞定通配符SSL证书

栏目: 编程工具 · 发布时间: 5年前

内容简介:部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。Let’s Encrypt是一个国外的非盈利的CA证书机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。由Linux基金会托管,许多国内外互联网大厂都对其进行赞助,目前主流浏览器均已信任Let’s Encrypt发放的证书。

这是坚持技术写作计划(含翻译)的第四篇,定个小目标999,每周最少2篇。

过去几年中,我们一直主张站点采用 HTTPS,以提升其安全性。去年的时候,我们还通过将更大的 HTTP 页面标记为‘不安全’以帮助用户。

不过从 2018 年 7 月开始,随着 Chrome 68 的发布,浏览器会将所有 HTTP 网站标记为‘不安全’。

引用自 chrome 68 发布说明

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

004-零失败快速搞定通配符SSL证书

什么是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证书保护这些子域名。

但是目前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值(图中打码部分)

004-零失败快速搞定通配符SSL证书

$ export DP_Id="你的ID"
$ export DP_Key="你的Token"
$ acme.sh --issue --dns dns_dp -d example.com -d *.example.com
# 如果 使用了DNS别名,还需要增加 --challenge-alias 别名域名 参数
# 为了防止dns不生效,脚本会暂停2分钟,并倒计时(Sleep 120 seconds for the txt records to take effect),等待即可
# 如果成功会出现 Cert success. 字样
# 不建议直接用~/.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 <IP DNS resolver>;

    ....
}

检查HTTPS得分

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

参考资料

招聘小广告

山东济南的小伙伴欢迎投简历啊 加入我们 , 一起搞事情。

长期招聘,Java程序员,大数据工程师,运维工程师,前端工程师。

谢谢支持

004-零失败快速搞定通配符SSL证书 支付宝

004-零失败快速搞定通配符SSL证书 微信


以上所述就是小编给大家介绍的《004-零失败快速搞定通配符SSL证书》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Designing for Emotion

Designing for Emotion

Aarron Walter / Happy Cog / 2011-10-18 / USD 18.00

Make your users fall in love with your site via the precepts packed into this brief, charming book by MailChimp user experience design lead Aarron Walter. From classic psychology to case studies, high......一起来看看 《Designing for Emotion》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具