溫馨提示×

CentOS下Node.js如何配置SSL證書

小樊
64
2025-04-28 18:38:32
欄目: 云計算

在CentOS系統下為Node.js應用程序配置SSL證書,可以按照以下步驟進行操作。本文將介紹如何生成自簽名證書以及如何使用Let’s Encrypt免費獲取受信任的SSL證書。

方法一:使用自簽名證書

步驟1:安裝Node.js

如果尚未安裝Node.js,可以使用以下命令通過NodeSource倉庫安裝最新版本:

# 導入NodeSource倉庫的GPG密鑰
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -

# 安裝Node.js
sudo yum install -y nodejs

注意:將setup_16.x中的版本號替換為你需要的Node.js版本,例如setup_14.xsetup_18.x。

步驟2:生成自簽名SSL證書

使用OpenSSL生成自簽名證書和私鑰:

# 創建一個目錄用于存放證書文件
sudo mkdir /etc/ssl/certs/myapp

# 進入目錄
cd /etc/ssl/certs/myapp

# 生成私鑰(2048位)
sudo openssl genrsa -out myapp.key 2048

# 生成證書簽名請求(CSR)
sudo openssl req -new -key myapp.key -out myapp.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/CN=localhost"

# 生成自簽名證書
sudo openssl x509 -req -days 365 -in myapp.csr -signkey myapp.key -out myapp.crt

說明:

  • /C=CN/ST=Beijing/L=Beijing/O=MyCompany/CN=localhost中的信息根據實際情況修改,尤其是CN(Common Name)應與你的域名或服務器地址匹配。
  • 自簽名證書不會被瀏覽器信任,訪問時會有安全警告。

步驟3:配置Node.js應用使用SSL

假設你有一個使用Express框架的Node.js應用,可以按照以下方式配置SSL:

const fs = require('fs');
const https = require('https');
const express = require('express');

const app = express();

// 讀取證書文件
const options = {
  key: fs.readFileSync('/etc/ssl/certs/myapp/myapp.key', 'utf8'),
  cert: fs.readFileSync('/etc/ssl/certs/myapp/myapp.crt', 'utf8')
};

// 定義路由
app.get('/', (req, res) => {
  res.send('Hello, SSL!');
});

// 啟動HTTPS服務器
https.createServer(options, app).listen(443, () => {
  console.log('HTTPS Server running on port 443');
});

說明:

  • 將證書和私鑰的路徑替換為實際存放的位置。
  • 通常HTTPS默認端口是443,確保該端口在你的服務器上未被其他應用占用。

步驟4:測試SSL配置

在瀏覽器中訪問https://your_server_ip_or_domain,你應該會看到安全警告,因為使用的是自簽名證書。繼續訪問以確認應用正常運行。

方法二:使用Let’s Encrypt獲取免費SSL證書

Let’s Encrypt提供免費的SSL/TLS證書,適用于生產環境??梢允褂肅ertbot工具來自動化證書的申請和續期過程。

步驟1:安裝Certbot

首先,確保已安裝EPEL倉庫:

sudo yum install epel-release

然后,安裝Certbot及其Node.js插件:

sudo yum install certbot python3-certbot-nodejs

步驟2:獲取SSL證書

運行Certbot以獲取證書。假設你的Node.js應用運行在localhost的443端口:

sudo certbot --nodejs --http-01-port 80 -d localhost

說明:

  • --http-01-port 80:Certbot將通過HTTP-01挑戰驗證域名所有權,需要訪問80端口。
  • -d localhost:指定要申請證書的域名。

按照提示完成驗證過程。Certbot會自動配置Nginx或Apache來處理HTTP-01挑戰。如果你使用的是Node.js直接處理HTTP請求,可以考慮使用certbot的HTTP-01插件或手動配置。

步驟3:配置Node.js應用使用SSL

Certbot會將證書和私鑰文件存放在/etc/letsencrypt/live/localhost/目錄下。配置Node.js應用使用這些文件:

const fs = require('fs');
const https = require('https');
const express = require('express');

const app = express();

// 讀取Certbot生成的證書文件
const options = {
  key: fs.readFileSync('/etc/letsencrypt/live/localhost/privkey.pem', 'utf8'),
  cert: fs.readFileSync('/etc/letsencrypt/live/localhost/fullchain.pem', 'utf8')
};

// 定義路由
app.get('/', (req, res) => {
  res.send('Hello, Let\'s Encrypt SSL!');
});

// 啟動HTTPS服務器
https.createServer(options, app).listen(443, () => {
  console.log('HTTPS Server running on port 443');
});

步驟4:自動續期證書

Let’s Encrypt證書有效期為90天,Certbot可以自動續期。確保設置定時任務以自動執行續期:

sudo crontab -e

添加以下行以每天檢查并續期證書:

0 0,12 * * * certbot renew --post-hook "systemctl reload nginx"

注意:如果使用的是Node.js直接處理HTTP請求,而不是反向代理(如Nginx或Apache),需要確保在續期后重新加載Node.js應用??梢允褂?code>systemd服務來實現這一點。

步驟5:測試SSL配置

在瀏覽器中訪問https://localhost,應該能夠正常訪問且沒有安全警告(因為localhost被視為受信任的)。

方法三:使用反向代理(推薦)

在生產環境中,通常建議使用Nginx或Apache作為反向代理來處理SSL終端,而不是讓Node.js應用直接處理HTTPS連接。這不僅提高了安全性,還提升了性能和可維護性。

使用Nginx作為反向代理配置SSL

步驟1:安裝Nginx

sudo yum install nginx

步驟2:配置Nginx

編輯Nginx配置文件(例如/etc/nginx/nginx.conf或創建一個新的站點配置文件 /etc/nginx/conf.d/myapp.conf):

server {
    listen 80;
    server_name your_server_ip_or_domain;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass http://localhost:3000; # Node.js應用監聽的端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

步驟3:啟動并啟用Nginx

sudo systemctl start nginx
sudo systemctl enable nginx

步驟4:獲取Let’s Encrypt證書

使用Certbot通過Nginx獲取證書:

sudo certbot --nginx -d your_server_ip_or_domain

Certbot會自動修改Nginx配置文件以處理SSL,并重新加載Nginx服務。

步驟5:配置Node.js應用

確保Node.js應用監聽在非SSL端口(例如3000):

const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Hello via Nginx and Let\'s Encrypt SSL!');
});

app.listen(3000, () => {
  console.log('Node.js app running on port 3000');
});

步驟6:自動續期

Certbot會自動處理Nginx配置的SSL證書續期。確保/etc/letsencrypt/renewal/your_server_ip_or_domain.conf文件中包含重新加載Nginx的指令。

總結

以上介紹了在CentOS系統下為Node.js應用配置SSL證書的幾種方法:

  1. 自簽名證書:適用于開發和測試環境,瀏覽器會顯示安全警告。
  2. Let’s Encrypt證書:適用于生產環境,通過Certbot自動化獲取和續期受信任的SSL證書。
  3. 反向代理(推薦):使用Nginx或Apache作為反向代理處理SSL,Node.js應用運行在內部端口,提升安全性和性能。

根據你的具體需求和環境選擇合適的方法進行配置。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女