摘要:在今年月份就已经推出泛域名证书支持了,以前我一直是使用的单域名证书,加上站点开启了支持,当新增网站应用时不得不为其多带带申请证书,十分不便。
Let"s Encrypt 在今年 3 月份就已经推出泛域名证书支持了,以前我一直是使用的单域名证书,加上站点开启了 HSTS 支持,当新增网站应用时不得不为其多带带申请证书,十分不便。
目前比较常用的为 Let"s Encrypt 生成证书的工具比较多,如
acme-tiny
certbot
acme.sh
这里我们将使用 acme.sh 这个工具来安装 Let"s Encrypt 证书。acme.sh 是一个非常优秀的证书生成工具,其 官网 更是有详细的中文文档支持 。
安装你可以通过下面的脚本来安装 acme.sh
curl https://get.acme.sh | sh
该操作需要服务器支持 socat 及 curl 模块。(apt install socat curl)
安装成功后,会在当前文件夹下生成 .acme.sh 文件夹。
生成证书acme.sh 实现了 acme 协议支持的所有验证协议,一般有两种方式验证: http 和 dns 验证。由于泛域名证书的解析目前仅支持 DNS 方式验证,下面我们将通过 DNS 方式来验证你的域名所有权。
acme.sh --issue --dns -d godruoyi.com -d *.godruoyi.com
这种方式会将相应的解析记录显示出来,然后你需要在你的域名管理面板中添加这条 txt 记录。并等待解析完成之后,重新用下面命令生成证书:
acme.sh --renew -d mydomain.com
注意第二次这里用的是 --renew,当然我们并不想这么麻烦,dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证。
根据你的域名服务商类型,选择对应的 DNS API。如
1、腾讯云
在 这里申请 API Token,获取到 ID 及 Token 后执行:
export DP_Id="id" export DP_Key="token"
2、阿里云
在 这里申请阿里云 Accesskey
获取到 KEY 及 Secret 后执行下面命令:
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
3、生成证书
在配置好上述设置后,就可通过
.acme.sh/acme.sh --issue --dns dns_dp -d godruoyi.com -d *.godruoyi.com
来生成证书,注意这里第一个域名为顶级域名,后面个为泛域名。
这种方式将自动为你的域名添加一条 txt 解析,验证成功后,这条解析记录会被删除,所以对你来说是无感的,就是要等 120秒。
证书生成成功后,默认保存在 .acme.sh/你的顶级域名 中。
配置 Nginx下面我们来为 Nginx 配置 SSL 证书支持。
1、移动下列证书到 /etc/nginx/ssl 文件夹,若无该文件夹,自行创建。
cp ~/.acme.sh/godruoyi.com/fullchain.cer /etc/nginx/ssl/fullchain.cer cp ~/.acme.sh/godruoyi.com/godruoyi.com.key /etc/nginx/ssl/godruoyi.key
2、新建 ssl-params.conf 并把它放到 Nginx 的 snippets 目录中。
下面的这些配置来自 提高安全性的最佳 Nginx 配置,建议参考。
# /etc/nginx/snippets/ssl-params.conf server_tokens off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 60m; ssl_session_tickets on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.4.4 8.8.8.8 valid=300s; resolver_timeout 10s; ssl_prefer_server_ciphers on; # 证书路径 绝对地址 ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/godruoyi.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; add_header Strict-Transport-Security "max-age=31536000;includeSubDomains;preload"; add_header X-Frame-Options deny; add_header X-Content-Type-Options nosniff; add_header x-xss-protection "1; mode=block"; add_header Content-Security-Policy "default-src "self"; script-src "self" "unsafe-inline" "unsafe-eval" blob: https:; connect-src "self" https:; img-src "self" data: https: blob:; style-src "unsafe-inline" https:; font-src https:";
3、接下来在 Nginx 主配置文件中开启 SSL 支持
# /etc/nginx/nginx.conf http { .... ssl_protocols TLSv1 TLSv1.1 TLSv1.2; }
完整的 Nginx 配置文件请参考 我的 Nginx 配置
4、配置虚拟主机
# /etc/nginx/sites-available/godruoyi.com server { listen 80 default_server; listen [::]:80 default_server; server_name godruoyi.com www.godruoyi.com; return 301 https://$server_name$request_uri; } server { # 注意我们设置该站点为默认站点,并移除了 nginx 默认的 default 配置 listen 443 ssl http2 fastopen=3 reuseport default_server; listen [::]:443 ssl http2 fastopen=3 reuseport default_server; server_name www.godruoyi.com godruoyi.com; # 引入 SSL 及 PHP 配置 include snippets/fastcgi-php.conf; include snippets/ssl-params.conf; root /home/godruoyi/websites/godruoyi.com/public; access_log /home/godruoyi/websites/godruoyi.com/storage/logs/nginx-access.log; error_log /home/godruoyi/websites/godruoyi.com/storage/logs/nginx-error.log error; index index.php; # 当访问域名是不 godruoyi.com 强制跳转到 https://godruoyi.com if ($host != "godruoyi.com" ) { rewrite ^/(.*)$ https://godruoyi.com/$1 permanent; } }
再来看一个 admin.godruoyi.com 的配置
# /etc/nginx/sites-available/admin.godruoyi.com server { listen 80; listen [::]:80; server_name admin.godruoyi.com; return 301 https://$server_name$request_uri; } server { # 如果多个域名配置在同一主机,这里只需要监听到 433 就可以了, # 不需要再添加 ssl http2 fastopen=3 reuseport default_server 之类的了 listen 443; listen [::]:443; root /home/godruoyi/websites/admin.godruoyi.com/public-admin; access_log /home/godruoyi/websites/admin.godruoyi.com/storage/logs/nginx-access.log; error_log /home/godruoyi/websites/admin.godruoyi.com/storage/logs/nginx-error.log error; server_name admin.godruoyi.com; index index.php; client_max_body_size 20M; include snippets/fastcgi-php.conf; include snippets/ssl-params.conf; if ($host != "admin.godruoyi.com" ) { rewrite ^/(.*)$ https://admin.godruoyi.com/$1 permanent; } }
4、虚拟主机配置完成,接下来为其配置软连接测试成功后就可以重启 Nginx 啦。
sudo ln -s /etc/nginx/sites-available/godruoyi.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/admin.godruoyi.com /etc/nginx/sites-enabled/ # 测试配置是否成功 sudo nginx -t sudo service nginx restart
以上所有配置你都可以在 这里 找到,别忘了点颗小星星哟
文章首发于 二楞的闲谈杂鱼
参考链接
腾讯云DNSPod API申请Let’s Encrypt泛域名证书
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39988.html
摘要:官网安装安装非常简单直接克隆就可以了生成通配符证书期间需要根据提示设置记录用作你对判断你是否拥有域名使用权其中换成你的一级域名即可参数说明表示安装模式,有安装模式和验证模式两种类型的插件。 官网:https://letsencrypt.org/ 安装Lets Encrypt 安装非常简单直接克隆就可以了 git clone https://github.com/letsencrypt/...
摘要:为了推广协议,电子前哨基金会成立了,提供免费证书。部署,包含申请域名部署应用,并开启服务。安装使用获取证书对于,使用的插件获取。 为了推广HTTPS协议,电子前哨基金会EFF成立了 Lets Encrypt,提供免费证书。 Lets Encrypt一个于2015年三季度推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS...
摘要:四操作步骤使用自动生成证书注意使用该命令,可以自动改变配置文件如果下图中没有合适的,需要指定证书对应的如下配置更新自动更新注意需要重新添加阿里云证书使用查看是否成功 一、参考链接 1. HTTP 协议入门, by 阮一峰2. HTTPS 升级指南, by 阮一峰3. let encrypt, getting start4. certbot5. SSL Server Test 二、环境...
阅读 1566·2021-09-26 09:46
阅读 2637·2021-09-07 09:59
阅读 2733·2021-09-07 09:59
阅读 1829·2019-08-30 14:20
阅读 906·2019-08-26 13:39
阅读 3120·2019-08-26 12:24
阅读 752·2019-08-26 11:55
阅读 1201·2019-08-23 16:49