本地开发环境中的 SSL

在仅使用 HTTPS 的浏览器、SameSite cookie 和现实的开发条件下,使用真实的 SSL 证书在本地工作非常重要。 Let's Encrypt在这方面做出了开创性的工作——在certbotCloudflare 的帮助下,创建和更新通配符证书变得快速而简单。这使您可以通过本地网络中或通过 VPN 的任何设备(智能手机、VM 等)访问加密的 Web 项目。


我们首先在 Cloudflare 注册一个开发者域名,例如 vielhuber.dev:

我们现在让这个域名指向它自己的本地 IP 地址(例如 192.168.0.2) 展示。为此,请创建以下 DNS A 记录(重要提示:代理状态必须设置为 灰色/仅 DNS 被设置):

类型姓名内容
一个@192.168.0.2
一个*192.168.0.2

为了验证通配符证书,需要自动设置 TXT 记录。为此,我们现在创建一个 API 令牌(配置文件 > API 令牌 > 创建令牌 > 模板:编辑区域 DNS)并选择域:

最后,我们设置certbot:

sudo apt install certbot python3-certbot-dns-cloudflare
pip install --upgrade pyOpenSSL cryptography certbot certbot-dns-cloudflare

现在我们存入之前生成的 API 令牌:

mkdir -p ~/.secrets/certbot
nano ~/.secrets/certbot/cloudflare.ini
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN_WITH_EDIT_ZONE_DNS_PERMISSIONS
chmod 600 ~/.secrets/certbot/cloudflare.ini

最后,我们请求证书:

certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
  --dns-cloudflare-propagation-seconds 60 \
  -d '*.vielhuber.dev' -d vielhuber.dev \
  --agree-tos \
  --email david@vielhuber.de \
  --non-interactive

自动续订也设置得很快。为了防止 certbot 每 12 小时随机自动运行一次,我们首先停用标准脚本并添加我们自己的:

sudo mv /etc/cron.d/certbot /etc/cron.d/certbot.disabled
( crontab -l 2>/dev/null; echo "0 12 * * * certbot renew --quiet" ) | crontab -
certbot renew --dry-run

这就是所需要的:要集成到 Apache,您需要参考您在项目中的 Apache 配置中刚刚创建的证书(例如 /etc/apache2/sites-available/project-xy.conf):

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/vielhuber.dev/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/vielhuber.dev/privkey.pem

Apache 重启后(sudo systemctl reload apache2)证书已经生效,您可以使用 https://project-xy.vielhuber.dev.

只需稍加努力,您就可以构建一个具有真实通配符证书的本地开发环境,它不仅切合实际,而且还可以与现代浏览器、API 和设备无缝协作。得益于 DNS-01 验证,您不需要可公开访问的服务器或手动证书请求 - 一切都是自动化、安全和可靠的。

背部