SSL证书

该标签下共有 1 篇文章

使用 Certbot 向 Let's Encrypt 免费申请及自动部署 HTTPS 证书

HTTP 报文是以明文形式传输的,会被各种浏览器标记为不安全。 HTTPS 则提供了一个加密传输的通道,相比较更为安全可靠。但专业的证书要钱,不过有个免费的Let's Encrypt,使用 Certbot 方便快捷,记录下大致的过程。 1. 安装必要工具 sudo apt update # Certbot 是 Let's Encrypt 提供的证书管理工具 sudo apt install certbot # python3-certbot-nginx 是专门针对 Nginx 的插件,其可以自动修改 Nginx 配置文件 sudo apt install python3-certbot-nginx 2. 获取并安装证书 # 如果多个域名,可以执行多次,或直接在后面增加 -d 域名,但会被归属到第一个 -d 的域名中,实际不影响任何安全 sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 执行上述语句后,会有交互确认: # 1. 邮箱输入:输入你的邮箱用于过期提醒。 # 2. 服务条款:同意即可。Y # 3. 重定向 HTTP 到 HTTPS:Certbot 会询问是否将 HTTP 流量重定向到 HTTPS。 选择 2 (Redirect) 或 Yes(强烈推荐)。这会让 Nginx 自动把所有 http:// 请求转为 https:// # 执行成功后,Certbot 会在 /etc/letsencrypt/live/yourdomain.com/ 下生成相应的证书文件,并自动修改 Nginx 配置文件,添加 SSL 监听端口和证书路径。 # 可自行查看 Nginx 相关配置文件并确认重载。 3. 查看所有证书 sudo certbot certificates # 一般会显示证书名称、域名信息、过期时间、证书路径等信息 # Saving debug log to /var/log/letsencrypt/letsencrypt.log # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Found the following certs: # Certificate Name: yourdomain.com # Domains: yourdomain.com www.yourdomain.com # Expiry Date: 2024-01-05 12:00:00+00:00 (VALID: 89 days) # Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem # Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem # Certificate Name: another-domain.com # Domains: another-domain.com # Expiry Date: 2024-01-05 08:30:00+00:00 (VALID: 64 days) # Certificate Path: /etc/letsencrypt/live/another-domain.com/fullchain.pem # Private Key Path: /etc/letsencrypt/live/another-domain.com/privkey.pem # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4. 测试自动续期 # Let's Encrypt 证书有效期为 90 天。 sudo certbot renew --dry-run # 如果输出显示 "Congratulations, all renewals succeeded",则自动续期配置正常。 5. 删除证书 # 推荐,交互式删除,根据列出的信息,选择需要删除的证书即可。 sudo certbot delete 6. Django 安全强化配置(参考) # settings.py # 强制所有请求使用 HTTPS SECURE_SSL_REDIRECT = True # 如果 Django 运行在反向代理(如 Nginx)后面,需要信任代理的 Header # 否则 Django 无法识别请求原本是 HTTP 还是 HTTPS SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # 设置 HSTS (HTTP Strict Transport Security),增强安全性 # 单位是秒,例如 31536000 表示一年 SECURE_HSTS_SECONDS = 31536000 SECURE_HSTS_INCLUDE_SUBDOMAINS = True SECURE_HSTS_PRELOAD = True # 确保 Session ID 和 CSRF Token 只在 HTTPS 下传输 SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True # 防止 JavaScript 访问 Cookie (防 XSS) SESSION_COOKIE_HTTPONLY = True CSRF_COOKIE_HTTPONLY = True  

广告
长条广告