我有一个快速的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网站时,这是我得到的错误:
如何让它按预期工作?
请注意,证书和密钥是有效的,因为我已经在现有网站上使用它们,它不是自签名的测试证书。
此外,客户端页面尝试获取资源“/ 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);
}
答案 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!');
});