CentOS7-Nginx配置Let's-Encrypt-SSL证书
时间:2022-07-26
本文章向大家介绍CentOS7-Nginx配置Let's-Encrypt-SSL证书,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Let’s-Encrypt
为http站点添加https支持,需要从证书发行机构获取SSL/TLS 证书。常见的免费证书有两种:
- Let’s-Encrypt,本文即将介绍,Let’s-Encrypt大法好。
- caddy,原生支持 HTTP/2,自动创建 Let’s Encrypt 证书,非常简单易用。
安装
yum install epel-release -y
yum install certbot -y
配置
certbot certonly --webroot -w /www/html -d suncle.me -d www.suncle.me
-
--webroot
表示以webroot模式运行,此处我们不选择standalone模式 -
-w /www/html
表示站点根目录在/www/html -
-d suncle.me -d www.suncle.me
表示为@主机和www主机生成共同的证书
按照提示操作成功后,提示:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/suncle.me/fullchain.pem. Your cert will
expire on 2017-06-28. 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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
证书自动更新
Let’s Encrypt 只有3个月的有效期,所以我们需要定时去更新证书。
可以通过运行:certbot renew --dry-run
来测试自动生成是否能够正常运行。如果正确执行,我们就可以通过以下命令更新证书:
certbot renew
如果要达到自动更新证书,可以借助crontab
或者systemd
定时执行上面的更新命令。Let’s Encrypt官方建议一天更新两次最好。因为证书没有到期之前是不会更新,因此即使一天执行两次也不会有什么影响。
# 每天3:00和19:00点更新证书
0 3,19 * * * certbot renew
具体执行时间可以参考以下crontab格式进行修改:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
配置Nginx SSL证书
修改/usr/local/nginx/nginx.conf文件如下(最好先备份)
# Nginx以root用户启动
user root;
# Nginx开启的进程数
worker_processes 2;
events {
# Nginx连接的最大个数
worker_connections 65535;
}
http {
# 如果路径中出现通配符,mime.types可配置多个文件
include mime.types;
# 默认文件类型
default_type application/octet-stream;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 记录访问日志
access_log logs/access.log main;
# 开启sendfile,提升文件传输效率
sendfile on;
# 死链判断:客户端连接保持活动的超时时间
keepalive_timeout 65;
#设置非安全连接永久跳转到安全连接
server{
listen 80;
server_name www.suncle.me suncle.net blog.suncle.net;
#告诉浏览器有效期内只准用 https 访问
add_header Strict-Transport-Security max-age=15768000;
#永久重定向到 https 站点
return 301 https://$server_name$request_uri;
}
server {
#启用 https, 使用 http/2 协议, nginx 1.9.11 启用 http/2 会有bug, 已在 1.9.12 版本中修复.
listen 443 ssl http2;
server_name www.suncle.me suncle.net blog.suncle.net;
#告诉浏览器当前页面禁止被frame
add_header X-Frame-Options DENY;
#告诉浏览器不要猜测mime类型
add_header X-Content-Type-Options nosniff;
root /www/html;
#证书路径
ssl_certificate /etc/letsencrypt/live/suncle.me/fullchain.pem;
#私钥路径
ssl_certificate_key /etc/letsencrypt/live/suncle.me/privkey.pem;
#安全链接可选的加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#可选的加密算法,顺序很重要,越靠前的优先级越高.
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
#在 SSLv3 或 TLSv1 握手过程一般使用客户端的首选算法,如果启用下面的配置,则会使用服务器端的首选算法.
ssl_prefer_server_ciphers on;
#储存SSL会话的缓存类型和大小
ssl_session_cache shared:SSL:10m;
#缓存有效期
ssl_session_timeout 60m;
}
}
以上配置文件nginx.conf中需要修改的字段主要有:
- server_name www.suncle.me suncle.net blog.suncle.net;
- ssl_certificate /etc/letsencrypt/live/suncle.me/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/suncle.me/privkey.pem;
listen 443 ssl http2;
这一句中,如果Nginx编译安装的时候没有安装ngx_http_v2_module
模块,则需要先安装。或者不采用http2协议,直接listen 443 ssl
即可
保存配置,检查是否报错,重启Nginx
/usr/local/nginx/nginx -t
/usr/local/nginx/nginx -s reload
Nginx 的 SSL 证书到此配置完成。
参考
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php进程(线程)通信基础之System V共享内存简单实例分析
- Laravel5.1 框架数据库查询构建器用法实例详解
- php swoole多进程/多线程用法示例【基于php7nts版】
- PHP JWT初识及其简单示例
- PHP保存Base64图片base64_decode的问题整理
- php实现小程序支付完整版
- Laravel5.1 框架路由基础详解
- Laravel框架实现抢红包功能示例
- Laravel5.1 框架模型创建与使用方法实例分析
- php实现单笔转账到支付宝功能
- PHP发送邮件确认验证注册功能示例【修改别人邮件类】
- PHP实现微信退款功能
- 从零开始玩转PerfDogService---------初探篇
- php+laravel依赖注入知识点总结
- PHP获取当前系统时间的办法小结