当前位置: 首页 > news >正文

nginx中ssl证书的获取与配置

目录

  1. 准备工作:安装 Nginx

  2. 获取 SSL/TLS 证书

    • 使用 Let's Encrypt 证书(推荐)

    • 创建自签名证书

  3. 配置 Nginx 启用 SSL/TLS

  4. 强化 SSL/TLS 安全性

  5. 验证配置

  6. 定期更新证书


1. 准备工作:安装 Nginx

如果你还没有安装 Nginx,请按照以下步骤安装 Nginx:

1.1 安装 EPEL 仓库

sudo yum install epel-release -y

1.2 安装 Nginx

sudo yum install nginx -y

1.3 启动并设置 Nginx 开机启动

sudo systemctl start nginx
sudo systemctl enable nginx

1.4 检查 Nginx 是否正常运行

访问 http://your_server_ip,你应该能看到 Nginx 的默认欢迎页面。如果没有,使用以下命令检查 Nginx 状态:

sudo systemctl status nginx

2. 获取 SSL/TLS 证书

SSL/TLS 证书是启用 HTTPS 加密连接所必需的。我们可以使用免费的 Let's Encrypt 证书,也可以选择使用 自签名证书

2.1 扩展使用 Let's Encrypt 免费证书(推荐)

Let's Encrypt 提供免费的 SSL/TLS 证书,且能够自动续期。我们将使用 Certbot 工具来自动获取并配置证书。

2.1.1 安装 Certbot

首先,安装 CertbotNginx 插件

sudo yum install epel-release -y
sudo yum install certbot python2-certbot-nginx -y
2.1.2 获取 SSL 证书

使用以下命令从 Let's Encrypt 获取证书:

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
如果 Nginx 已安装但配置文件路径不同 
certbot --nginx --nginx-server-root /usr/local/nginx/conf/ -d why003.com -d www.why003.com输入邮箱地址同意服务Y是否分享邮箱Y​

请确保将 yourdomain.com 替换为您的实际域名。Certbot 会自动配置 Nginx 使用 SSL 并启用 HTTPS。Certbot 会自动修改 Nginx 配置,获取证书并重新加载 Nginx 服务。

2.1.3 配置自动续期 

Let's Encrypt 证书有效期为 90 天,因此需要定期续期。您可以设置自动续期任务:

sudo crontab -e

添加以下行来每天检查并自动续期证书:

0 0 * * * /usr/bin/certbot renew --quiet

2.2 创建自签名证书(仅用于测试)

如果您只是在开发或测试环境中使用 SSL,可以生成自签名证书。请按照以下步骤生成并配置自签名证书。

2.2.1 生成自签名证书
  1. 生成密钥文件和证书签名请求(CSR)

    sudo mkdir -p /etc/ssl/private
    sudo mkdir -p /etc/ssl/certs
    或
    mkdir -p /usr/local/nginx/ssl/private
    mkdir -p /usr/local/nginx/ssl/certs
    ​
    ​
    openssl genpkey -algorithm RSA -out /usr/local/nginx/ssl/private/nginx-selfsigned.key -pkeyopt rsa_keygen_bits:2048 标准安全
    生成这个文件ginx-selfsigned.key RSA私钥文件
    ​
    openssl req -new -key /usr/local/nginx/ssl/private/nginx-selfsigned.key -out /usr/local/nginx/ssl/certs/nginx-selfsigned.csr 证书请求文件 可以寻找CA签发证书
    ================================证书签发时会弹出的对话框
    ​
    其他字段说明(一般在用 openssl req -new -key ... 生成 CSR 时会问)
    ​Country Name (2 letter code): 国家代码(必须 2 位,例如 CN、US)
    ​State or Province Name: 省/州全名,例如 Beijing
    ​Locality Name: 城市,例如 Beijing
    ​Organization Name: 公司或组织名,例如 MyCompany Ltd
    ​Organizational Unit Name: 部门名,例如 IT Department(可留空)
    ​Common Name (e.g. server FQDN): 你的域名,例如 example.com
    ​Email Address: 邮箱地址,例如 admin@example.com密码 空

    系统会提示你输入一些信息,如国家、组织等。

  2. 生成自签名证书:CRT文件

    openssl x509 -req -days 365 -in  /usr/local/nginx/ssl/certs/nginx-selfsigned.csr -signkey  /usr/local/nginx/ssl/private/nginx-selfsigned.key -out  /usr/local/nginx/ssl/certs/nginx-selfsigned.crt
  3. 验证证书生成是否成功

    证书应该已经保存在 /usr/local/nginx/ssl/certs/nginx-selfsigned.crt(自签名证书),密钥文件保存在 /usr/local/nginx/ssl/private/nginx-selfsigned.key`(私钥)。

    在nginx这边配置 引导这两个文件


3. 配置 Nginx 启用 SSL/TLS

3.1 编辑 Nginx 配置文件

编辑 Nginx 配置文件并启用 SSL:

vim  /usr/local/nginx/conf/nginx.conf

3.2 配置 SSL 证书路径

在 Nginx 配置中添加以下内容:

server {listen 443 ssl;server_name benet.com www.benet.com;
​ssl_certificate /usr/local/nginx/ssl/certs/nginx-selfsigned.crt;ssl_certificate_key /usr/local/nginx/ssl/private/nginx-selfsigned.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;ssl_prefer_server_ciphers on;
​location / {root /usr/share/nginx/html;index index.html;}
}

解释:

  • listen 443 ssl;:告诉 Nginx 监听 HTTPS(端口 443)。

  • ssl_certificatessl_certificate_key:指定 SSL 证书和密钥的路径。

  • ssl_protocols TLSv1.2 TLSv1.3;:只启用 TLS 1.2 和 TLS 1.3,禁用 SSL 和 TLS 1.0/1.1。

  • ssl_ciphers:定义加密套件。可以根据安全需求选择合适的加密方法。

  • ssl_prefer_server_ciphers on;:强制服务器优先选择加密套件。

  • 如果报错替换为兼容性更好的密码套件配置:ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

3.3 配置 HTTP 到 HTTPS 重定向

为了确保所有 HTTP 流量都转到 HTTPS,您可以添加以下内容:

server {listen 80;server_name benet.com www.benet.com;return 301 https://$host$request_uri;
}

这将使得访问 HTTP(端口 80)的请求自动重定向到 HTTPS。

3.4 配置 HTTP/2(可选)

如果您想启用 HTTP/2,可以添加 http2

server {listen 443 ssl http2;...
}

###

4. 扩展强化 SSL/TLS 安全性

为了提升 SSL/TLS 配置的安全性,我们可以实施一些最佳实践。

4.1 禁用弱加密协议

推荐仅启用 TLS 1.2 和 TLS 1.3,禁用所有过时的协议,如 SSLv3 和 TLS 1.0/1.1。

ssl_protocols TLSv1.2 TLSv1.3;

4.2 启用 HTTP Strict Transport Security (HSTS)

HSTS 强制浏览器只能通过 HTTPS 访问网站。以下配置将设置最长为一年(31536000 秒)的 HSTS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

4.3 启用更强的 Diffie-Hellman 参数

为了确保安全,使用一个更强的 Diffie-Hellman 参数。生成一个 2048 位的 DH 参数文件:

sudo openssl dhparam -out /usr/local/nginx/ssl/certs/dhparam.pem 2048

然后在 Nginx 配置中引用它:

ssl_dhparam /usr/local/nginx/ssl/certs/dhparam.pem;

4.4 配置加密套件

配置一个现代、安全的加密套件,并禁用已知的弱加密算法。例如:

ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

5. 验证配置

5.1 检查 Nginx 配置

在重新加载 Nginx 之前,检查配置是否有效:

sudo nginx -t

5.2 重启 Nginx

如果没有错误,重启 Nginx 以应用更改:

sudo systemctl restart nginx

5.3 测试 HTTPS 配置

使用浏览器访问 https://benet.com,检查 SSL 是否正常工作。你应该看到浏览器地址栏中的绿色锁图标,表示安全连接。

也可以使用 curl 命令测试:

curl -I https://benet.com

文章转载自:

http://vLnAJUgf.nhgfz.cn
http://VhqQqnIH.nhgfz.cn
http://eBqAaYi1.nhgfz.cn
http://RRkA9ObH.nhgfz.cn
http://ld54pSa6.nhgfz.cn
http://ow1YFh2Q.nhgfz.cn
http://BuAoW4t8.nhgfz.cn
http://gOCXfbSD.nhgfz.cn
http://I6xufU2t.nhgfz.cn
http://7bYqyUck.nhgfz.cn
http://n4BWy1AL.nhgfz.cn
http://rVI4HUSx.nhgfz.cn
http://PNymrlJG.nhgfz.cn
http://aLAOetNT.nhgfz.cn
http://J3WpC5KF.nhgfz.cn
http://frIFK56g.nhgfz.cn
http://SJWHeBie.nhgfz.cn
http://aOF1SzAN.nhgfz.cn
http://fdkzaqJe.nhgfz.cn
http://LMDebqqd.nhgfz.cn
http://iW6vteYu.nhgfz.cn
http://j9Vrm2Nz.nhgfz.cn
http://Dsrhif6r.nhgfz.cn
http://zrFWq2sp.nhgfz.cn
http://dmlDDw4D.nhgfz.cn
http://YSbyZvaK.nhgfz.cn
http://FyWUZoUD.nhgfz.cn
http://OLNfqZKr.nhgfz.cn
http://uNOpBiWt.nhgfz.cn
http://zmMUGYAp.nhgfz.cn
http://www.dtcms.com/a/376266.html

相关文章:

  • 云平台得大模型使用以及调用
  • 手写简单的int类型顺序表
  • Spring Boot 深入剖析:BootstrapRegistry 与 BeanDefinitionRegistry 的对比
  • [rStar] 解决方案节点 | `BaseNode` | `MCTSNode`
  • 鸿蒙:@Builder 和 @BuilderParam正确使用方法
  • 美图云修-一站式AI修图软件
  • 从齿轮到智能:机器人如何重塑我们的世界【科普类】
  • F12中返回的id里preview和response内容不一致的问题
  • 【CSS 3D 交互】实现精美翻牌效果:从原理到实战
  • vue二次封装ant-design-vue的table,识别columns中的自定义插槽
  • vue方法汇总
  • GPU硬件架构和配置的理解
  • C++类和对象初识
  • 笔记:乐鑫 (Espressif) 的生态策略与开发者悖论
  • SELinux策略:域转换与类型继承
  • 【VLMs篇】06:Cosmos-Reason1:从物理常识到具身推理
  • 图漾相机 FM851-E2 相关资料
  • 资产管理什么软件好
  • npm 安装命令中关于 @ 的讲解,如:npm install @vue-office/docx vue-demi
  • PowerBI 没实现的的联动同步下钻,QuickBI 实现了
  • k8s+jenkins+harbor构建Devops平台
  • 【中文教材】35. 证券市场指数
  • 36.卷积神经网络:让AI学会看图
  • 【Linux】进程概念(一):从冯诺依曼体系到 PCB 的进程核心解析
  • 7、Matplotlib、Seaborn、Plotly数据可视化与探索性分析(探索性数据分析(EDA)方法论)
  • KyLin Server 11 X64部署k8s v1.34.0
  • 【Redis】双写一致性及数据持久化
  • UE5全场景应用与核心优势解析 , 川翔云电脑渲染支持
  • 用deepseek对GPU服务器进行压力测试
  • day27|前端框架学习