@Linux自建證書 Nginx+HTTPS

文章目錄

  • 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;像改密…