您当前所在位置:首页攻略如何申请免费SSL/TLS证书

如何申请免费SSL/TLS证书

更新:2024-05-28 15:39:14编辑:游戏资讯归类:攻略

对于经济拮据的人而言,白嫖一切可能的资源是至关重要的。在申请免费SSL/TLS证书方面,常见的途径有:

  • 一、许多大型云服务平台限定免费证书额度,比如阿里云每年提供20个证书的申请额度。然而,不支持泛域名,需一年后重新申请并部署;
  • 二、一些网络服务商如Cloudflare提供自动化的证书服务,只需在其官网进行简单配置。但使用这种方式会受到流量转发的影响,在一些网络覆盖不好的区域网站性能会受限;
  • 三、直接从免费证书颁发机构(CA)那里申请。通过脚本可实现获取、安装和续期SSL/TLS证书的全自动化。但这种方式需要具备一定的操作门槛。

本文将着重介绍这第三种方式。

免费 CA 选择

在选择免费CA时,常见的有Let’s Encrypt和ZeroSSL。这两者的区别可以自行查询,基本上都能够满足普通用户的需求,选择哪一个更依赖于申请过程是否顺利。

以Let’s Encrypt举例进行简单介绍。Let’s Encrypt由 Internet Security Research Group (ISRG) 发起的公益项目,于2016年推出,并得到Mozilla、Cisco、Akamai、Linux Foundation、Google、Microsoft、OVH和其他一些组织支持。该项目的主要目标是促进HTTPS协议的普及。Let’s Encrypt使用ACME协议来验证您对给定域名的控制权并向您颁发证书,也就是说,要获得Let’s Encrypt证书,需要选择一个ACME客户端。

这里以acme.sh为例。acme.sh实现了ACME协议, 默认CA是ZeroSSL。然而在申请时出现了一直报Order status is processing, lets sleep and retry, 多次重试后报504的情况,不得其解。因此我将默认CA设置为Let’s Encrypt: acme.sh --set-default-ca --server letsencrypt

申请并部署证书

安装acme.sh

不清楚使用docker模式安装是否会自动续期,因此我直接在宿主机上安装: curl https://get.acme.sh | sh -s email=xxx@xxx 。直接安装会自动创建cronjob,每天自动检测所有的证书,如果快过期了需要更新,则会自动更新证书。

如前所述,设置默认CA: acme.sh --set-default-ca --server letsencrypt

申请

在证书申请过程中,acme.sh需要确认域名属于您本人,有两种验证方式:http和dns。

  • http mode: 支持自动更新证书,但不支持泛域名。
  • dns mode:支持泛域名,但如果不同时配置Automatic DNS API,则无法自动更新证书,每次都需要手动重新解析验证域名所有权。因此,如果您有多个二级域名需要绑定证书,要么使用上述http mode的指令,要么向DNS服务商获取API Access(可能需要满足一些要求)。请参阅acme.sh支持的dns服务商列表。

这里我们以http mode为例。

首先设置好DNS解析记录,将待申请证书的域名A记录到服务器IP。然后使用以下脚本申请证书,acme.sh会同时进行域名验证。

acme.sh --issue -d demo.com -d www.demo.com -d admin.demo.com --webroot /srv/www/html/

只需要指定域名,并指定对应的网站根目录,acme.sh会自动生成验证文件,并放到网站根目录,然后自动完成验证,最后会删除验证文件。

如果使用的是直接在宿主机上安装的nginx服务器,甚至不需要指定网站根目录。acme.sh可以根据nginx配置文件智能地自动完成验证: acme.sh --issue -d demo.com ... --nginx 上述脚本的前提是acme.sh能够调用nginx指令,否则会报nginx command is not found的错误。因此如果nginx是以docker方式安装的,这种方式将无法成功。在这种情况下,还是需要使用--webroot的方式,只需将nginx根目录映射出来即可。 如下: docker run --name ngix -v /srv/www/html:/usr/share/nginx/html:ro -v /srv/www/nginx.conf:/etc/nginx/nginx.conf:ro -p 80:80 -p 443:443 --network inner_net --restart=always -d --label=sh.acme.autoload.domain=anything nginx:stable-alpine

注意脚本中的label,用于后续部署证书时acme.sh定位该容器。这里的anything可以替换为任意字符。

域名验证无误的话,acme.sh会去CA那里获取证书,并下载到本地。一个主域名及其多个子域名同时申请的话,CA只为它们签发一张证书。

部署

还是以nginx docker容器为例。

# 容器查找label的值 export DEPLOY_DOCKER_CONTAINER_LABEL=sh.acme.autoload.domain=anything # 容器中的目标文件路径 export DEPLOY_DOCKER_CONTAINER_KEY_FILE="/etc/nginx/ssl/demo.com/key.pem" export DEPLOY_DOCKER_CONTAINER_CERT_FILE="/etc/nginx/ssl/demo.com/cert.pem" export DEPLOY_DOCKER_CONTAINER_CA_FILE="/etc/nginx/ssl/demo.com/ca.pem" export DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE="/etc/nginx/ssl/demo.com/full.pem" # 这个命令用于重新加载容器中的服务 export DEPLOY_DOCKER_CONTAINER_RELOAD_CMD="nginx -s reload" # 指定acme.sh—issue时第一个[二级]域名或其执行结果产生的目录名 acme.sh --deploy --deploy-hook docker -d demo.com

我目前还不清楚自动更新证书时是否会自动将新证书拷贝至容器内,我推测应该会的,这些临时环境变量应该会以当前申请的域名配置项的形式固化到磁盘中。

配置nginx.conf

在http部分加入下面的设置:

server { listen 443 ssl; # 二级域名配置相同,本文略过 server_name demo.com; root /usr/share/nginx/html; # 上一步证书拷贝的地址 ssl_certificate /etc/nginx/ssl/demo.com/cert.pem; ssl_certificate_key /etc/nginx/ssl/demo.com/key.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; #默认加密套件 ssl_ciphers HIGH:!aNULL:!MD5; #表示优先使用服务端加密套件。默认开启 ssl_prefer_server_ciphers on; location / { index index.html index.htm; } }

吊销证书

如果因某种原因需要吊销证书,可以执行如下脚本:

acme.sh --revoke -d demo.com -d www.demo.com -d admin.demo.com

我目前还不清楚在一个主域名及其多个子域名共用一张证书的情况下,是否可只给部分域名吊销证书。

以上就是电脑114游戏给大家带来的关于如何申请免费SSL/TLS证书全部内容,更多攻略请关注电脑114游戏。

电脑114游戏-好玩游戏攻略集合版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

一耽漫画 正版2024 Charter开发流程及重要性