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

时间:2017-01-17 10:34:46

标签: node.js express ssl https

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

我有一个.key文件和一个已经是PEM格式的.crt文件(它们包含可读文本,as this answer says to check),所以我使用了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 Error

如何让它按预期工作?

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

此外,客户端页面尝试获取资源“/ hey”,但除了证书中的HTTPS错误之外,页面还获得了“无法获取/”

的响应,而不是资源。

以下是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);
}

1 个答案:

答案 0 :(得分:1)

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

因此,您需要在localhost上提供整个链证书才能使其正常工作。 https://certificatechain.io/似乎他们正在为此提供服务,但尚未尝试过。更好的方法是与您的证书提供商核实。

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

  

修改   似乎问题是更多的基础知识。更新解决方案

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

根据您的基本要求/嘿,请插入此代码块

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