让我们加密SSL证书的ExpressJS Node应用程序中的握手失败

特雷弗·比尔

我在设置节点服务器时遇到问题,让我们对证书进行加密。我正在使用Express创建像这样的https服务器:

var fs = require('fs');
var app = require('express')();
var https = require('https');

var server = https.createServer({ 
key: 
fs.readFileSync('/etc/letsencrypt/live/mydomain.com/privkey.pem'), 
cert: fs.readFileSync('/etc/letsencrypt/live/mydomain.com/cert.pem'), 
ca: fs.readFileSync('/etc/letsencrypt/live/mydomain.com/chain.pem'), 
requestCert: true, 
rejectUnauthorized: true},app);

app.get("/express", function(request, response){
response.end("Express Response");
});
server.listen(8082);

我想将rejectUnauthorized设置为true,因为我已经读到禁用它会导致客户端/服务器通信容易受到MITM攻击。对于客户端,我正在使用请求模块发出https GET请求,如下所示:

var path = require('path');
var requests = require('request');
var fileSystem = require('fs');

var checkRequestOpts = {
    url: "https://example.com:8082/express",
    agentOtions: {
        ca: fileSystem.readFileSync(__dirname + '/chain1.pem')
    },
    method: 'GET',
    json: true,
    formData: {
        'x': 100,
        'y': 500,
        'z': 97    
    }
};

requests(checkRequestOpts, function(err, sr, rb)
{
    if(err)
        console.log('Error occured' + err);
    else
    {
        console.log('Response: ' + rb);
    }
});

但是,当我运行客户端应用程序时,它因错误而崩溃

Error occuredError: write EPROTO 140593052855168:error:14094410:SSL 
routines:ssl3_read_bytes:sslv3 alert handshake 
failure:../ssl/record/rec_layer_s3.c:1399:SSL alert number 40

服务器不必向浏览器提供内容,而仅需要与客户端节点应用程序一起使用。当我将rejectUnauthorized设置为false时,它会起作用,但将其设置为true时,它就不会起作用如果有人可以帮助我解决这个问题或提供任何可能的解决方案,我将非常感谢。谢谢!

coolaj86

命名不是您想的那样。

本质上,您已经混淆了cacertkey,这是一个非常常见的错误。

这里有一些资源可供参考:

  • keyprivkey.pem
  • cert指的是串联cert.pemAND chain.pem(又名fullchain.pem

您应该忽略,ca因为它ca指的是证书颁发机构,root.pem如果您使用的是企业或军事对等证书验证,则应放在该位置

也尝试格林洛克

另外,您可能更喜欢使用greenlock-express.js(让我们的Node.js / express.js的Encrypt / ACME客户端)可以不必首先进行任何手动工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

让我们加密ssl证书在TLS握手中发送两次

手动更新让我们加密SSL证书

让我们加密续约失败

Node.js不会加载“让我们加密证书”

在Node.js中使用“让我们加密证书”的最安全方法是什么?

让我们加密失败的DVSNI挑战

让我们在 debian 9 ISPConfig 中加密更新 Apache 没问题,但 https 失败,因为证书已过期

让我们加密“ Welcome to Nginx”的Nginx而不是Rails应用程序

Nginx、React、Node 和让我们加密……如何将 Nginx 指向我的 React 应用程序

Python SSL请求和“让我们加密”证书

JavaRMI应用程序中的SSL握手错误

openshift,让我们加密证书

让我们加密:在应用程序设置下要求的ClientID与我输入的内容不同吗?

让我们加密:如何手动测试certbot续订过程?

ASP.Net应用程序干扰远程主机让我们加密(通过Plesk)安装吗?

让我们加密SSL无效

在tomcat中的Web应用程序中启用SSL(双向握手)到外部应用程序

让我们加密SSL证书的本地服务器

使用SSL证书播放框架,让我们进行加密

让我们为同一域,多个实例加密SSL证书

无法使用Nginx(certbot)向域添加“让我们加密SSL证书”

无法使用Nginx(certbot)向域添加“让我们加密ssl证书”

让我们加密:使用certbot修复损坏的证书

让我们为 Minikube 加密 https 证书

让我们将证书加密365天

Java是否支持“让我们加密证书”?

AWS让我们加密通配符证书

lftp,让我们加密和 CA 证书

无法创建在Rails中具有带有前导点的线段的路线(以验证“让我们加密”)