[英]SSL handshake failure with node.js https
我有一個使用https
與express
運行的 API。 為了測試,我一直在使用 tinycert.org 作為證書,它在我的機器上運行良好。
我正在使用docker
打包應用程序,並使用docker-machine
和docker-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);
我也遇到這個問題很長時間了,有一個奇怪的解決方法:
不要將您的證書轉換為 .pem; 它作為 .crt 和 .key 文件工作正常。
將ca: fs.readFileSync("path to CA bundle file")
到 https 選項。
看起來您的服務器僅發送頂級證書,並且 CA 捆綁文件具有非瀏覽器使用所需的中間證書和根證書。
重要的! 重新安裝或更新節點到最新版本。
如果您使用的是 Linux,則可以使用sudo apt-get upgrade
(可能需要一段時間)。
重新下載您的證書或獲取新證書。
如果您充當自己的證書頒發機構,它可能無法識別/信任該證書,因此請嘗試在ssllabs.com上測試您的站點。
如果您使用的是 http2 API,請嘗試將allowHTTP1: true
添加到選項中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.