Tag: openssl

终止大量SSL连接的成本效益

我最近设置了一个基于Node.js的web套接字服务器,经过testing,它可以在一个小的EC2实例(m1.small)上每秒处理大约2000个新的连接请求。 考虑到m1.small实例的成本以及将多个实例放在支持WebSocket的代理服务器(如HAProxy)后面的能力,我们对结果非常满意。 但是,我们意识到我们还没有使用SSL进行任何testing,因此查看了许多SSL选项。 很明显,在代理服务器上终止SSL连接是理想的,因为代理服务器可以检查stream量并插入诸如X-Forward-For之类的头部,以便服务器知道请求来自哪个IP。 所以我研究了一些解决scheme,比如Pound,stunnel和stud,所有这些都允许443上的传入连接被终止,然后通过80端口上的HAProxy传递到Web服务器。 不幸的是,我发现在c1.medium(High CPU)实例上向SSL终止代理服务器发送stream量很快就消耗了所有的CPU资源,并且每秒钟只有50次左右的请求。 我尝试过使用上面列出的全部三种解决scheme,并且他们都执行了大致相同的操作,而我仍然使用OpenSSL。 我尝试使用64位非常大的高CPU实例(c1.xlarge),发现性能只能随成本线性缩放。 所以基于EC2定价,我需要支付每秒200个SSL请求的大约600美元/米,而不是每秒2000个非SSL请求的60美元/米。 当我们开始计划每秒钟接受1,000或10,000次请求时,以前的价格变得经济上不可行。 我也尝试使用Node.js的https服务器终止SSL,性能与Pound,stunnel和stud非常相似,所以没有明显的优势。 所以我希望有人可以帮忙的是build议我如何解决这个荒谬的代价,我们必须吸收以提供SSL连接。 我听说SSL硬件加速器提供了更好的性能,因为硬件devise用于SSLencryption和解密,但是由于我们目前在所有服务器上使用Amazon EC2,使用SSL硬件加速器不是一个select,除非我们有单独的数据以物理服务器为中心。 我只是努力想知道,如果亚马逊,Google,Facebook这样的成本如此之高,可以通过SSL提供所有stream量。 那里一定有更好的解决办法。 任何意见或想法将不胜感激。 谢谢Matt

无法加载资源:net :: ERR_INSECURE_RESPONSE socket.io

我正在通过SSL连接到我的服务器上的一个端口…最近,我已经开始得到无法加载资源:net :: ERR_INSECURE_RESPONSE错误在铬连接到node.js + socket.io服务器。这里是我的服务器设置up代码: var fs = require('fs'); var express = require('express'); var routes = require('./routes'); var https = require('https'); var path = require('path'); var socketio = require('socket.io'); var util = require('util'); var url = require('url'); var privateKey = fs.readFileSync('ssl/keys/xxxxxxxxxxxxxxxxxxxxxxxx.key', 'utf8'); var certificate = fs.readFileSync('ssl/certs/xxxxxxxxxxxxxx.crt', 'utf8'); var credentials = {key: privateKey, cert: certificate}; var […]

生成SSL密钥以使用node.js

我正在通过GoDaddy设置一个SSL来与AWS EC2上的我的node.js服务器一起使用。 我一直无法得到它的工作。 以下是我所尝试的: 面向域名:files.mysite.com 在服务器上运行: $ openssl req -new -newkey rsa:2048 -nodes -keyout files.mysite.key -out files.mysite.csr Common Name: files.mysite.com password: left empty 然后我得到CSR:vim files.mysite.csr 我从以下复制并粘贴: —–BEGIN CERTIFICATE—– ……… lots of stuff —–END CERTIFICATE—– 最后有一个额外的空行,我使用rekey离开并粘贴到GoDaddy界面。 然后我下载提供的godaddy密钥: gd_bundle.crt files.mysite.com.crt 然后在节点中插入: key: fs.readFileSync('server.key').toString(), cert: fs.readFileSync('server.crt').toString() 我不知道什么server.key是或server.crt鉴于GoDaddy提供两个crt文件? 你能帮我吗?

主机名/ IP不匹配证书的名称

我试图创build一个TLS服务器/客户端设置使用Node.js 0.8.8与自签名证书。 基本的服务器代码看起来像 var tlsServer = tls.createServer({ key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem') }, function (connection) { // […] }); tlsServer.listen(3000); 现在当我尝试连接到这个服务器时,我使用下面的代码: var connection = tls.connect({ host: '192.168.178.31', port: 3000, rejectUnauthorized: true, ca: [ fs.readFileSync('server-cert.pem') ] }, function () { console.log(connection.authorized); console.log(connection.authorizationError); console.log(connection.getPeerCertificate()); }); 如果我删除线 ca: [ fs.readFileSync('server-cert.pem') ] 从客户端代码中,Node.js抛出一个错误告诉我DEPTH_ZERO_SELF_SIGNED_CERT 。 据我了解,这是因为这是一个自签证书,没有其他人信任这个证书。 如果我删除 rejectUnauthorized: true, 错误消失了 – […]

nodejs可以生成SSL证书吗?

我正在编写一个代理支持HTTPS-HTTPS代理。 在我使用Python作为主要的编程语言之前,我现在对node.js感兴趣,所以我准备迁移。 我面临的最大的问题是,我不知道如何在node.js中生成CA和其他服务器证书。 在Python中,有pyOpenSSL这是真棒。 直到现在,我在node.js中找不到类似的东西。 也许我应该使用openssl-fork方法? 但是如何处理openssl中的交互操作。 谢谢。