nginx申请+配置免费的https

in 技术 with 0 comment

要上就上最好的那个

Let’s Encrypt是目前最知名的开源SSL证书。工程师和开发者中使用 Let’s Encrypt 证书较多。通过官方申请的Let’s Encrypt 证书需要3个月续签一次。国内,又拍云和Let’s Encrypt 联合推出了免费SSL证书。

建议直接去官方申请,又拍云上申请的可以出现 免费申请成功的证书只能部署在又拍云服务上,无法部署在其他服务器上

申请https

官方推荐Certbot

Certbot是EFF的工具,可通过Let's Encrypt获取证书并(可选)自动启用服务器上的HTTPS。它也可以充当任何其他使用ACME协议的CA的客户端。

下载Certbot

git clone https://github.com/certbot/certbot.git #克隆cerbot
cd certbot
./certbot-auto --help #使用帮助

生成https证书

./certbot-auto certonly --webroot --agree-tos -v -t --email 邮箱地址 -w 网站根目录 -d 网站域名

这里 默认会自动生成到 /网站根目录/.well-known/acme-challenge 文件夹,然后 shell 脚本会对应的访问 网站域名/.well-known/acme-challenge 是否存在来确定你对网站的所属权,如果返回正常就确认了你对这个网站的所有权,就能顺利生成,完成后这个目录会被清空。

注意:确保你当前的用户对网站根目录有访问权限

如果上面的步骤正常 shell 脚本会展示如下信息:

- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/网站域名/fullchain.pem
...

openssl 工具生成 dhparams

openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048

配置 Nginx

打开 nginx server 配置文件加入如下设置:

listen 443

ssl_certificate /etc/letsencrypt/live/网站域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/网站域名/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparams.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

重启nginx,不出意外就能以https访问了。

强制https

https 默认是监听 443 端口的,没开启 https 访问的话一般默认是 80 端口。如果你确定网站 80 端口上的站点都支持 https 的话加入下面的配件可以自动重定向到 https

server {
    listen 80;
    server_name your.domain.com;
    return 301 https://$server_name$request_uri;
}

证书更新

开头说了证书需要3个月续签一次,刚好 Let’s encrypt 旗下还有一个 Let’s monitor 免费服务,注册账号添加需要监控的域名,系统会在证书马上到期时发出提醒邮件,非常方便。收到邮件后去后台执行 renew 即可,如果提示成功就表示 renew 成功。

./certbot-auto renew
Responses