使用Nginx结合CertBot配置HTTPS协议

简介: Nginx结合CertBot配置HTTPS协议,同时简单介绍cron定时规则

HTTPS 和 Let’s Encrypt、Certbot 的关系

其实 HTTPS 只是 HTTP 的一个拓展,是在 HTTP 的基础上利用 SSL/TLS 来加密数据包的。服务器会给客户端发送一个 Server certificates(服务证书),这个里面包含有服务器的一些信息,如域名、公司信息、序列号和签名信息组成等,这个证书可以个人生成,也可以由权威机构签发,当然个人的就不受大众信任,而权威机构签发的证书则会被信任。

而 CA 的证书提供商有许多个,有收费的有免费的,Let’s Encrypt 就是其中之一的免费提供商,它提供 90 天的免费授权,90 天后可以免费续签。要从 Let's Encript 获取某个域名的证书,需要证明你对该域名拥有控制权,对于该证明你可以使用某个使用 ACME 协议的软件来实现,而 Certbot 就是官方出的一个 ACME 客户端。

Certbot 安装

官网: https://certbot.eff.org

官方安装文档: https://certbot.eff.org/lets-encrypt/centosrhel7-nginx

Certbot 打包在 EPEL Enterprise Linux(企业版 Linux 的扩展包)上。使用 Certbot,必须先开启 EPEL 仓库。
在 RHEL 或 Oracle Linux 中,还要必须开启可选频道。可以执行如下命令安装 Certbot

sudo yum install epel-release
sudo yum install certbot

其实到这步 certbot 就算安装好了

生成证书

我们需要配置 Nginx 来做服务器域名验证,因为 CertBot 的 standalone 模式虽然可以配置好服务器,但是每次 90 天到期续签的时候,需要让服务停止一下,再启动。因此我们改用 Webroot 配置模式来验证,Webroot 配置模式下 CertBot 会生成一个随机文件,然后 CertBot 服务器通过 HTTP 的方式访问我们服务器上的这个文件进行验证。所以我们需要配置好 Nginx,以便 CertBot 服务器可以访问到这个随机文件。

修改 Nginx 配置,新增一个 server 模块:

    server {
        listen       80;
        server_name  your.domain.com; #这里填你要验证的域名

        location ^~ /.well-known/acme-challenge/ {
            default_type "text/plain";
            root     /usr/share/nginx/html/; #这里需要与后文 --webroot -w 后面配置的路径一致
        }
    }

ok,重启 Nginx

sudo service nginx reload

然后执行

sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d your.domain.com

记得替换 your.domain.com 为你自己的域名。

如果看到有提示:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/your.domain.com/fullchain.pem. Your cert
   will expire on 20XX-09-23. To obtain a new or tweaked version of
   this certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

证书生成成功!

接着可以开始启用 443 端口

修改 Nginx 的配置文件,新建一个 443 端口的 server 配置:

server {
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;

    ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/your.domain.com/chain.pem;

    // ... other settings ...
}

记得替换 your.domain.com 为你自己的域名哦。

重启 Nginx

sudo service nginx reload

这时候的网站基本完成免费 HTTPS 证书的设置。成功!

删除证书

如果因为种种原因不小心生成了多余的证书,他会存在于我们的服务器中,导致无用的冗余。可是官方其实并没有提供取消授权的方式,我们可以在本地删除授权证书,并且不再续签,便可以释放该证书了,我们需要进入对应的文件夹内,查看自己已经生成的证书域名文件夹,然后依次删除就好,记得替换 your.domain.com 为你要删除的域名哦:

cd /etc/letsencrypt/live/
ls
sudo rm -rf /etc/letsencrypt/live/your.domain.com/ 
sudo rm -rf /etc/letsencrypt/archive/your.domain.com/
sudo rm /etc/letsencrypt/renewal/your.domain.com.conf

设置自动更新

由于这个免费证书的时效只有 90 天,所以我们需要设置自动更新,帮我们自动更新证书的时效。
自动更新可以使用 Linux 系统的 cron 定时任务功能,CentOS 可以使用 crontab 命令

我们先命令行模拟证书更新:

sudo certbot renew --dry-run

如果有提示下面的内容,表示模拟更新成功

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/your.domain.com.conf
-------------------------------------------------------------------------------
** 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/your.domain.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)

那么,我们就可以使用crontab -e的命令来启用自动任务,命令行:

sudo crontab -e

然后会打开打开定时任务配置文件,我们可以按i进入编辑模式,然后输入:

30 2 * * * /usr/bin/certbot renew  >> /var/log/le-renew.log

上面的执行时间为:每天凌晨2点30分执行renew任务。

现在可以在命令行执行/usr/bin/certbot renew >> /var/log/le-renew.log看看是否执行正常,如果一切OK,那么配置就成功了!大发!

定时任务时间设置

关于定时任务时间的设置,这里可以简单介绍下,定时任务格式如下:

 * * * * * command
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令
* * * * * command
    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令

在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 /< integer > 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理

使用实例

实例1:每1分钟执行一次command

* * * * * command

实例2:每小时的第3和第15分钟执行

3,15 * * * * command

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * command

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

实例13:每月的4号与每周一到周三的11点重启smb

0 11 4 * mon-wed /etc/init.d/smb restart

实例14:一月一号的4点重启smb

0 4 1 jan * /etc/init.d/smb restart

实例15:每小时执行/etc/cron.hourly目录内的脚本

01   *   *   *   *     root run-parts /etc/cron.hourly
相关文章
|
1月前
|
应用服务中间件 nginx
Nginx进程配置指令详解
Nginx进程配置指令主要包括:`worker_processes`设置工作进程数;`worker_cpu_affinity`绑定CPU核心;`worker_rlimit_nofile`设置最大文件描述符数量;`worker_priority`设置进程优先级;`worker_connections`设置最大连接数;`daemon`控制守护进程模式;`master_process`启用主进程模式;`pid`设置PID文件路径;`user`指定用户和组;`error_log`配置错误日志。这些指令在`nginx.conf`中配置,用于优化和控制Nginx的运行行为。
95 10
|
3月前
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
165 4
|
5月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
316 61
|
5月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
351 60
|
5月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
436 60
|
4月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
308 3
|
4月前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
196 5
|
5月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
5月前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
121 11
|
5月前
|
缓存 安全 网络协议
HTTPS协议的历史发展
HTTPS协议的历史发展
174 8
下一篇
oss创建bucket