簡體   English   中英

與 node.js https 的 SSL 握手失敗

[英]SSL handshake failure with node.js https

我有一個使用httpsexpress運行的 API。 為了測試,我一直在使用 tinycert.org 作為證書,它在我的機器上運行良好。

我正在使用docker打包應用程序,並使用docker-machinedocker-compose在數字海洋服務器上運行它。

當我嘗試連接 Chrome 時,我得到ERR_SSL_VERSION_OR_CIPHER_MISMATCH 使用curl運行此命令時,出現握手失敗: curl: (35) SSL peer handshake failed, the server most likely requires a client certificate to connect

我嘗試使用 Wireshark 的 SSL 解析器進行調試,但它沒有給我更多信息:我可以看到“Client Hello”,然后下一幀是“Handshake Failure (40)”。

我認為 docker 容器上的節點可能沒有可用的密碼,但它有一個很大的列表,所以不可能是這樣。 我不確定發生了什么以及如何補救。

編輯

這是我的createServer()塊:

let app = express();
let httpsOpts = {
    key:  fs.readFileSync("./secure/key.pem"),
    cert: fs.readFileSync("./secure/cert.pem")
};
let port = 8080;
https.createServer(httpsOpts, app).listen(port);

我也遇到這個問題很長時間了,有一個奇怪的解決方法:

  1. 不要將您的證書轉換為 .pem; 它作為 .crt 和 .key 文件工作正常。

  2. ca: fs.readFileSync("path to CA bundle file")到 https 選項。
    看起來您的服務器僅發送頂級證書,並且 CA 捆綁文件具有非瀏覽器使用所需的中間證書和根證書。

  3. 重要的! 重新安裝或更新節點到最新版本。
    如果您使用的是 Linux,則可以使用sudo apt-get upgrade (可能需要一段時間)。

  4. 重新下載您的證書或獲取新證書。

如果您充當自己的證書頒發機構,它可能無法識別/信任該證書,因此請嘗試在ssllabs.com上測試您的站點。

如果您使用的是 http2 API,請嘗試將allowHTTP1: true添加到選項中。

暫無
暫無

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

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