智传网优云课堂,专注分享IT技术
与IT技术爱好者一起共同学习进步

nginx配置https(自动续签受信任的免费证书)

1. 前言

本教程申请的是Let’s Encrypt 免费证书。Let’s Encrypt 是国外一个公共的免费 SSL 项目,由 Linux 基金会托管。它的支持者都是大公司,比如 Mozilla、Cisco、Akamai、IdenTrust 和 EFF 等著名的组织,并由这些机构发起的项目,目的就是加速 HTTPS的普及,它是免费的并且可以支持自动续签的,目前 Facebook等企业也在参与项目中。目前主流的浏览器都认可的证书。

本文适用于拥有Linux操作权限并且已经搭建好了nginx站点的用户。

2. 先确保你的DNS A记录设置正确

即进入你的DNS解析商,通常是域名的服务商。把域和IP通过A记录映射好。

3. 安装certbot组件

先安装epel,官方额外的软件yum源仓库。

[root@zcwyou ~]# yum install -y epel-release

安装python2-certbot-nginx组件,本教程用的就是这个软件,它在epel仓库里,所以需要上面的步骤。


[root@zcwyou ~]# yum install python2-certbot-nginx -y

看到下图这样的界面就证明安装成功。

安装python2-certbot-nginx组件

4. 申请证书

执行以下命令全自动安装和配置虚拟站点

[root@zcwyou ~]# sudo certbot --nginx

输入邮箱信息
输入邮箱信息

输入A同意
输入A同意

输入Y同意接收广告信息,本人没有试过N,按理解应该可以拒绝。
输入Y同意接收广告信息

假如你本机上有多个虚拟站点,请选择你要加密的网站,直接按回车表示加密本地所有的网站。
选择你要加密的网站

是否允许强制重定向HTTPS,意思是当用户访问http://linux.zcwyou.com时,服务器会做301跳转,重定向到https://linux.zcwyou.com,1表示强制,2表示不强制
是否允许强制重定向HTTPS

它会自动修改你的虚拟站点配置文件:
/etc/nginx/conf.d/xxx.conf

它会增加以下内容:

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/linux.zcwyou.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/linux.zcwyou.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

server {
    if ($host = linux.zcwyou.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name linux.zcwyou.com;
    return 404; # managed by Certbot


}

如果你想自己配置文件,可以只下载证书文件

[root@zcwyou ~]# sudo certbot --nginx certonly

然后自行修改虚拟站点文件/etc/nginx/conf.d/xxx.conf

查看证书情况,假设你的网站为www/xxx/com:
https://www.ssllabs.com/ssltest/analyze.html?d=www/xxx/com()

SSL证书存储位置:

/etc/letsencrypt
/etc/letsencrypt/live/linux.zcwyou.com/fullchain.pem
/etc/letsencrypt/live/linux.zcwyou.com/privkey.pem

nginx重新加载配置:

[root@zcwyou ~]# nginx -s reload

5. 测试证书

如果一切顺利,你的网站应该可以支持https了。
测试网页的https

6. 测试证书续签

免费的SSL证书只有90天有效期,尝试运行证书更新程序,仅仅是测试,不会实际更新证书文件。

[root@zcwyou ~]# certbot renew --dry-run

执行过程如下,留意最后的Congratulations,表示测试成功。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Processing /etc/letsencrypt/renewal/zcwyou.com.conf
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for linux.zcwyou.com
http-01 challenge for www.zcwyou.com
http-01 challenge for zcwyou.com
Waiting for verification...
Cleaning up challenges
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/zcwyou.com/fullchain.pem
DRY RUN: simulating 'certbot renew' close to cert expiry
(The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/zcwyou.com/fullchain.pem (success)
DRY RUN: simulating 'certbot renew' close to cert expiry
(The test certificates above have not been saved.)

更新证书测试成功

7. 执行证书续签

手动更新证书,证书快到期时记得执行更新数字证书,当然你可以创建计划任务自动更新。

[root@zcwyou ~]# certbot renew

手动更新ssl证书

计划任务自动更新证书:

[root@zcwyou ~]# crontab -e

自动使用vi编辑器,按键盘上的i进入vi插入模式,复制粘帖以下命令

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew 

粘帖后,按ESC键,然后输入:wq保存退出vi编辑器
添加自动更新证书的计划任务

至此,免费的HTTPS证书已经申请完毕,配置也完成了。

赞(0)
未经允许不得转载:Linux入门学习到精通 » nginx配置https(自动续签受信任的免费证书)
分享到: 更多 (0)

学习QQ群:557371664

关注微信公众号自助视频学习

评论 抢沙发

评论前必须登录!