簡體   English   中英

使用 node.js 設置 SSL

[英]Setting up SSL with node.js

我在 GoDaddy 購買了 SSL 證書,我正在使用以下 node.js 服務器嘗試設置它:

var https = require('https'),      // module for https
    fs =    require('fs');         // required to read certs and keys

var options = {
    key: fs.readFileSync('../../ssl/example.com.key'),
    cert: fs.readFileSync('../../ssl/example.com.crt'),
    ca: fs.readFileSync('../../ssl/gd_bundle.crt'),
    requestCert:        true,
    rejectUnauthorized: false
};

https.createServer(options, function (req, res) {
    if (req.client.authorized) {
        res.writeHead(200, {"Content-Type": "application/json"});
        res.end('{"status":"approved"}');
    } else {
        res.writeHead(401, {"Content-Type": "application/json"});
        res.end('{"status":"denied"}');
    }
}).listen(443);

運行服務器后,我嘗試訪問https://example.com的網站,但我得到了

{"status":"denied"}

我想這工作正常,因為我收到了回復,但我認為我對 SSL 工作原理的理解是錯誤的。 我認為瀏覽器從服務器獲取證書,然后根據根證書對其進行身份驗證,即來自 GoDaddy。 所以我不應該得到

{"status":"approved"}

只是簡單地訪問https://example.com

所以我想我的問題是,我如何訪問https://example.com並獲得 {"status":"approved"}?

謝謝!

您被拒絕的原因是因為您正在嘗試使用客戶端證書身份驗證進行身份驗證。 每個最終用戶都需要一個由您的服務器證書簽名的客戶端證書。 如何 使用 Node 設置客戶端證書證書身份 驗證

如果您只是嘗試加密 Web 流量,則不需要客戶端證書。 如果您只想加密流量,請使用此處的示例http://nodejs.org/docs/latest/api/https.html

這是錯誤的:

ca: fs.readFileSync('../../ssl/gd_bundle.crt')

ca需要是包含單個證書的字符串或緩沖區數組。 如果您提供捆綁包,則僅使用第一個證書,其余證書將被忽略。

另見: http : //nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

1.) 首先打開您的 cpanel 2.) SSL/TLS 3.) 管理 SSL 站點。 4.) 選擇要添加 ssl 的域 5.) 然后通過證書自動填充

你會在這里 crt 和 key 創建 2 個文件 domain.pem 和 domain.crt

將 crt 代碼放入 domain.crt 並將密鑰代碼放入 domain.pem 文件並將這兩個文件放在主根目錄中

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


const httpsOptions = {
key: fs.readFileSync('domain.pem'),
cert: fs.readFileSync('domain.crt'),
ca: fs.readFileSync('domain.crt'),
passphrase: '??'
}

https.createServer(options, function (req, res) {
  if (req.client.authorized) {
    res.writeHead(200, {"Content-Type": 
    "application/json"});
    res.end('{"status":"approved"}');
  } else {
    res.writeHead(401, {"Content-Type": 
    "application/json"});
    res.end('{"status":"denied"}');
  }
}).listen(443);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM