文章目录

  • Linux自建证书并配置Nginx HTTPS
    • 1. 准备工作
    • 2. 安装必要的工具
    • 3. 自建证书脚本
      • 3.1 创建CA根证书(可选,用于自签名证书链)
      • 3.2 创建服务器证书脚本
    • 4. 证书文件说明
    • 5. 配置Nginx使用HTTPS
      • 5.1 创建证书存放目录
      • 5.2 配置Nginx站点
      • 5.3 启用站点配置
      • 5.4 测试Nginx配置
    • 6. 客户端安装CA证书(可选)
      • Windows:
      • Linux:
      • macOS:
    • 7. 验证HTTPS配置
    • 8. 自动续期脚本(可选)
    • 9. 常见问题解决
      • 9.1 浏览器不信任证书
      • 9.2 Nginx启动失败
      • 9.3 混合内容警告
    • 10. 安全建议

Linux自建证书并配置Nginx HTTPS

1. 准备工作

在开始之前,请确保:

  • 已安装Linux服务器(本指南以Ubuntu/Debian为例)
  • 已安装Nginx
  • 拥有root或sudo权限
  • 服务器已开放443端口(HTTPS默认端口)

2. 安装必要的工具

sudo apt update
sudo apt install -y nginx openssl

3. 自建证书脚本

3.1 创建CA根证书(可选,用于自签名证书链)

#!/bin/bash# 创建CA私钥
openssl genrsa -out ca.key 2048# 创建CA根证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \-subj "/C=CN/ST=Beijing/L=Beijing/O=YourOrg/OU=IT/CN=YourOrg Root CA"

3.2 创建服务器证书脚本

#!/bin/bashDOMAIN="yourdomain.com"  # 替换为你的域名
EMAIL="admin@yourdomain.com"  # 替换为你的邮箱# 创建私钥
openssl genrsa -out $DOMAIN.key 2048# 创建证书签名请求(CSR)
openssl req -new -key $DOMAIN.key -out $DOMAIN.csr \-subj "/C=CN/ST=Beijing/L=Beijing/O=YourOrg/OU=IT/CN=$DOMAIN"# 创建扩展配置文件
cat > $DOMAIN.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names[alt_names]
DNS.1 = $DOMAIN
DNS.2 = www.$DOMAIN
EOF# 使用CA签发证书(如果是自签名,使用下面的命令)
openssl x509 -req -in $DOMAIN.csr -CA ca.crt -CAkey ca.key -CAcreateserial \-out $DOMAIN.crt -days 365 -sha256 -extfile $DOMAIN.ext# 如果是完全自签名证书(没有CA),使用这个命令替代上面的
# openssl x509 -req -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt -days 365 -sha256 -extfile $DOMAIN.ext

将上述脚本保存为create_cert.sh,然后执行:

chmod +x create_cert.sh
./create_cert.sh

4. 证书文件说明

执行完成后,你会得到以下文件:

  • ca.key - CA私钥(如果创建了CA)
  • ca.crt - CA根证书(如果创建了CA)
  • yourdomain.com.key - 服务器私钥
  • yourdomain.com.csr - 证书签名请求(可删除)
  • yourdomain.com.crt - 服务器证书
  • yourdomain.com.ext - 扩展配置文件(可删除)

5. 配置Nginx使用HTTPS

5.1 创建证书存放目录

sudo mkdir -p /etc/nginx/ssl
sudo cp yourdomain.com.crt /etc/nginx/ssl/
sudo cp yourdomain.com.key /etc/nginx/ssl/
sudo chmod 600 /etc/nginx/ssl/*

5.2 配置Nginx站点

编辑或创建Nginx配置文件:

sudo nano /etc/nginx/sites-available/yourdomain.com

添加以下内容:

server {listen 80;server_name yourdomain.com www.yourdomain.com;return 301 https://$host$request_uri;
}server {listen 443 ssl http2;server_name yourdomain.com www.yourdomain.com;ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;# SSL配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 启用HSTSadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 其他配置root /var/www/yourdomain.com/html;index index.html index.htm;location / {try_files $uri $uri/ =404;}# 其他location配置...
}

5.3 启用站点配置

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

5.4 测试Nginx配置

sudo nginx -t

如果没有错误,重新加载Nginx:

sudo systemctl reload nginx

6. 客户端安装CA证书(可选)

如果你使用了自建的CA根证书,需要在客户端安装ca.crt以信任你的自签名证书:

Windows:

  1. 双击ca.crt文件
  2. 选择"安装证书"
  3. 选择"本地计算机"
  4. 选择"将所有证书放入下列存储",浏览选择"受信任的根证书颁发机构"
  5. 完成安装

Linux:

sudo cp ca.crt /usr/local/share/ca-certificates/yourorg-ca.crt
sudo update-ca-certificates

macOS:

  1. 双击ca.crt文件
  2. 在钥匙串访问中,找到该证书
  3. 右键选择"获取信息"
  4. 在"信任"部分,将"使用此证书时"设置为"始终信任"

7. 验证HTTPS配置

  • 使用浏览器访问 https://yourdomain.com,检查是否能够正常访问(可能会有安全警告,因为使用的是自签名证书)
  • 使用命令行验证:
    curl -vI https://yourdomain.com
    

8. 自动续期脚本(可选)

由于自签名证书通常有效期较短,可以设置一个自动续期脚本:

#!/bin/bash# 续期证书脚本
DOMAIN="yourdomain.com"
CERT_DIR="/etc/nginx/ssl"
SCRIPT_DIR="/path/to/your/script"# 备份旧证书
cp $CERT_DIR/$DOMAIN.crt $CERT_DIR/$DOMAIN.crt.bak
cp $CERT_DIR/$DOMAIN.key $CERT_DIR/$DOMAIN.key.bak# 生成新证书
cd $SCRIPT_DIR
./create_cert.sh# 复制新证书
cp $DOMAIN.crt $CERT_DIR/
cp $DOMAIN.key $CERT_DIR/# 重新加载Nginx
systemctl reload nginx# 记录日志
echo "$(date): Certificate renewed for $DOMAIN" >> /var/log/cert_renewal.log

然后添加到crontab中每月执行一次:

sudo crontab -e

添加以下行:

0 0 1 * * /path/to/renew_cert.sh

9. 常见问题解决

9.1 浏览器不信任证书

  • 确保已安装CA根证书(如果使用了CA)
  • 检查证书是否过期
  • 确保证书中的域名与访问的域名完全匹配

9.2 Nginx启动失败

  • 使用sudo nginx -t检查配置语法
  • 检查证书文件路径是否正确
  • 确保证书文件权限正确(nginx用户可读)

9.3 混合内容警告

  • 确保网页中所有资源(图片、CSS、JS等)都使用HTTPS链接
  • 可以使用内容安全策略(CSP)来强制HTTPS

10. 安全建议

  1. 定期更换私钥和证书(建议每3-6个月)
  2. 保持私钥的机密性(权限设置为600)
  3. 考虑使用Let’s Encrypt等免费CA获取浏览器信任的证书
  4. 启用OCSP Stapling以提高性能和安全
  5. 定期检查SSL配置的安全性(可以使用SSL Labs测试)

通过以上步骤,你已经成功在Linux服务器上创建了自签名证书,并为Nginx配置了HTTPS。对于生产环境,建议考虑使用受信任的CA颁发的证书(如Let’s Encrypt)以获得更好的兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914949.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914949.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914949.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 RAGFlow报错 `peewee.OperationalError: (1045)`:MySQL 容器密码错误排查手记

文章目录 🕵️‍♂️ 深度排查过程 🔧 完美解决方案:同步真实密码 ✅ 验证结果 📌 经验总结与最佳实践 问题现象: 部署 ragflow 时遭遇以下错误,且访问前端页面无响应: peewee.OperationalError: (1045, "Access denied for user root@192.168.48.6")关键线…

lwIP WebSocket 客户端 TCP PCB 泄漏问题分析与解决

在嵌入式开发中&#xff0c;使用 lwIP 实现 WebSocket 客户端时&#xff0c;偶尔会遇到反复连接导致 TCP PCB&#xff08;Protocol Control Block&#xff09;泄漏&#xff0c;最终连接数达到上限&#xff08;如 4&#xff09;后无法再建立新连接的问题。本文将结合实际案例&am…

k8s之Attach 和 Mount

Attach 和 Mount 一、核心概念对比操作Attach&#xff08;挂载设备&#xff09;Mount&#xff08;挂载文件系统&#xff09;定义将存储卷&#xff08;如 EBS、NFS 等&#xff09;连接到宿主机将已 Attach 的存储设备映射为宿主机上的文件系统路径执行者云提供商驱动&#xff08…

API Gateway HTTP API 控制客户端访问 IP 源

前言 在 API Gateway REST API 中我们可以配置 Resource policy 来实现对特定客户端 IP 地址的限制. 然而 HTTP API 并不提供这个功能, 不过我们可以用 Lambda 搓一个 Authorizer 实现等效的功能. 创建 Lambda authorizer import json import os import ipaddressdef lambda…

Linux搭建LAMP环境(CentOS 7 与 Ubuntu 双系统教程)

Linux搭建LAMP环境 一、LAMP 环境核心概念 定义&#xff1a;由 Linux、Apache、MySQL、PHP 四大组件组成的开源 Web 应用平台本质&#xff1a;四个独立开源软件的组合体&#xff0c;因长期协同使用形成高度兼容性&#xff0c;成为动态网站和服务器的主流解决方案 二、LAMP 四大…

c# 开机自动启动程序

以下是两种实现C#软件开机自启动的常用方法&#xff0c;根据需求选择适合的方案&#xff1a; 方法1&#xff1a;通过注册表实现&#xff08;需管理员权限&#xff09; using Microsoft.Win32; using System.Diagnostics;public static class AutoStartManager {/// <summa…

C语言---动态内存管理

为什么要有动态内存分配我们在学习动态内存管理之前&#xff0c;一直都是通过开辟变量&#xff0c;或者是开辟数组的方式来在内存的栈区开辟空间的&#xff0c;但是这样的开辟方式有局限性&#xff0c;因为一旦开辟之后&#xff0c;它们的大小就无法改变&#xff0c;就缺少了很…

C++标准库(std)详解

C标准库&#xff08;std&#xff09;详解——目录C标准库&#xff08;std&#xff09;详解一、命名空间&#xff08;namespace&#xff09;二、主要组件1. 输入输出流&#xff08;<iostream>&#xff09;2. 字符串处理&#xff08;<string>&#xff09;3. STL容器&…

ESP32的OTA升级详解:3. 搭建node/python服务器升级(native ota原生API)

一、OTA两种方式&#xff1a;app_update 与 esp_https_ota 区别 ESP32/ESP32-S2/ESP32-C3等可通过Wi-Fi或以太网下载新固件到OTA分区实现运行时升级。ESP-IDF提供两种OTA升级方法&#xff1a; 使用app_update组件的原生API使用esp_https_ota组件的简化API(支持HTTPS升级) 本次…

byte[]作为接口参数传递的方法

在C#中通过WebService或API传递byte参数&#xff08;如文件、图像等二进制数据&#xff09;时&#xff0c;通常有以下几种实现方式&#xff1a; ‌1. 使用Base64编码&#xff08;推荐REST API&#xff09;‌ 将byte数组转换为Base64字符串传输&#xff0c;适用于JSON格式的API&…

元宇宙与Web3的深度融合:构建沉浸式数字体验的愿景与挑战

一、技术特征与融合基础1. 元宇宙的技术架构&#xff08;2025年&#xff09;空间构建技术&#xff1a;3D建模与渲染&#xff1a;实时渲染引擎&#xff08;如Unity HDRP&#xff09;支持路径追踪光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D场景。…

什么是脑裂

脑裂定义&#xff1a; 脑裂是分布式系统中由于网络分区&#xff08;Network Partition&#xff09;导致集群节点被分割成多个独立子集&#xff0c;每个子集认为自己是唯一合法的集群&#xff0c;从而导致数据不一致或系统行为异常的现象。详细工作原理&#xff1a;发生原因&…

川翔云电脑:云端算力新标杆,创作自由无边界

一、旗舰机型&#xff1a;4090Ultra 48G 显存颠覆硬件限制 川翔云电脑最新上线的RTX 4090Ultra 48G 显存机型&#xff0c;采用 NVIDIA Ada Lovelace 架构&#xff0c;单卡显存容量达 48GB GDDR6X&#xff0c;较传统 4090 翻倍&#xff0c;可直接加载 1200 万面数的超复杂模型&a…

贪心算法(排序)

码蹄集OJ-活动安排 #include<bits/stdc.h> using namespace std; struct MOOE {int s,e; }; bool compare(const MOOE&a,const MOOE&b) {return a.e<b.e; } int main( ) {int n;cin>>n;vector<MOOE>a(n);for(int i0;i<n;i){cin>>a[i].…

详解序数回归损失函数ordinal_regression_loss:原理与实现

在医疗 AI 领域&#xff0c;很多分类任务具有有序类别的特性&#xff0c;如疾病严重程度&#xff08;轻度→中度→重度&#xff09;、肿瘤分级&#xff08;G1→G2→G3&#xff09;等。这类任务被称为序数回归&#xff08;Ordinal Regression&#xff09;&#xff0c;需要特殊的…

SQL增查

建完库与建完表后后:1.分别查询student表和score表的所有记录student表&#xff1a;score表:2.查询student表的第2条到5条记录SELECT * FROM student LIMIT 1,4;3.从student表中查询计算机系和英语系的学生的信息SELECT * FROM student-> WHERE department IN (计算机系, 英…

二分答案之最大化最小值

参考资料来源灵神在力扣所发的题单&#xff0c;仅供分享学习笔记和记录&#xff0c;无商业用途。 核心思路&#xff1a;本质上是求最大 应用场景&#xff1a;在满足条件的最小值区间内使最大化 检查函数&#xff1a;保证数据都要大于等于答案 补充&#xff1a;为什么需要满…

OCR 赋能档案数字化:让沉睡的档案 “活” 起来

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;企业产品档案包含设计图纸、检测报告、生产记录等&#xff0c;传统数字化仅靠扫描存档&#xff0c;后续检索需人工逐份翻阅&#xff0c;效率极低。​OCR 产品档案解决方案直击痛点&#xff1a;通过智能识别技…

力扣118.杨辉三角

思路1.新建一个vector的vector2.先把空间开出来&#xff0c;然后再把里面的值给一个个修改开空间的手段&#xff1a;new、构造函数、reserve、resize因为我们之后要修改里面的数据&#xff0c;这就意味着我们需要去读取这个数据并修改&#xff0c;如果用reserve的话&#xff0c…

Python 网络爬虫 —— 提交信息到网页

一、模块核心逻辑“提交信息到网页” 是网络交互关键环节&#xff0c;借助 requests 库的 post() 函数&#xff0c;能模拟浏览器向网页发数据&#xff08;如表单、文件 &#xff09;&#xff0c;实现信息上传&#xff0c;让我们能与网页背后的服务器 “沟通”&#xff0c;像改密…