express-js服务器中的HTTPS SSL损坏(net :: ERR_CERT_COMMON_NAME_INVALID)

我有一个快速的js应用程序,我想在HTTPS上收听。

我有一个.key文件和一个.crt文件,它们已经是PEM格式的(它们包含可读的文本, 因为这个答案要检查 ),所以我使用了OpenSSL和这些命令(从上面链接的答案中获得)答案我曾尝试使用.key和.crt文件,我已经使用.pem文件只是将这两个文件重命名为.pem,没有成功):

openssl x509 -in public.crt -out public.pem -outform PEM openssl rsa -in private.key -out private.pem -outform PEM 

当我尝试访问https:// localhost的网站时,这是我得到的错误:

Chrome浏览器HTTPS错误

我怎样才能使其按预期工作?

请注意证书和密钥是有效的,因为我已经在现有的网站上使用它们,它不是一个自签名的testing证书。

此外,客户端页面试图获取资源“/嘿”,但除了证书中的HTTPS错误,而不是资源页面得到一个响应,说:“无法GET /”


以下是node.js应用程序的代码:

 var express = require('C:/Users/f.fiore/AppData/Roaming/npm/node_modules/express'); var fs = require('fs'); var http = require('http'); var https = require('https'); var key = fs.readFileSync('./private.key'); var cert = fs.readFileSync('./public.crt') var options = { key: key, cert: cert }; var PORT = 8000; var HOST = 'localhost'; var app = express(); var httpServer = https.createServer(app); var httpsServer = https.createServer(options, app); httpServer.listen(PORT); httpsServer.listen(443); // routes app.get('/hey', function(req, res) { sendToClient("HO!", res, 200, "text/plain"); }); function getHeader(type){ return {"Content-Type": type}; } function sendToClient(data, res, code, type){ res.writeHead(code, getHeader(type)); (type === "text/html" || type === "text") ? res.end(data, "utf-8") : res.end(data); } 

您的证书是有效的,但证书的提供者不是此证书的原始发行者。

所以你需要在你的本地主机上提供整个链路证书来使其工作。 https://certificatechain.io/好像他们正在为此提供服务,但还没有尝试过。 更好的方法是检查你的证书提供者。

自签名证书也带来这样的错误。

编辑看起来像问题是更基础。 更新解决scheme

尝试使用您的etc / hosts文件来在本地主机上显示真实的域名。 现在它正在寻找一个名为本地主机的域,我不认为你得到你的本地主机的证书:) \ Windows \ System32 \ drivers \ etc \ hosts在Windows环境

对于/你的基本要求,请插入此代码块

 app.get('/hey', function(req, res){ res.send('HO!'); });