Tag: openssl

从iojs升级到nodejs v4.4.4后,自签名SSL不起作用

我在我的应用程序中使用iojs和koa,最近我决定将iojs更新到nodejs v4.4.4。 更新非常顺利,我的应用程序运行得很快。 问题是我在我的开发机器上使用了一个自签名的SSL证书,当我更新到nodejs后,当我尝试访问网站时收到以下消息: 本网站无法提供安全连接 本地主机使用不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 客户端和服务器不支持通用的SSL协议版本或密码套件。 这可能是由于服务器需要RC4而导致的,而RC4不再被认为是安全的。 我使用nvm所以我尝试切换到iojs和网站再次工作。 读了一些后,我发现我必须更新openssl到版本1.0.2g而不是我用来创build.key和.crt文件的1.0.1g 。 所以我更新了openssl并生成了如下新的密钥和证书文件: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt 可悲的是这并没有解决这个问题。 这是我用来在服务器上设置https的代码: let sslOptions = { key: fs.readFileSync('/etc/apache2/ssl/apache.key'), cert: fs.readFileSync('/etc/apache2/ssl/apache.crt') }; let server = require('https').createServer(sslOptions, app.callback()) 难道我做错了什么? 为什么它与iojs一起工作,不能和nodejs一起工作?

Nodemailer和“SSL23_GET_SERVER_HELLO:未知协议”错误

以下是我的Node.js代码。 使用代码导致: Error: 0:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794 这里是代码: var express = require('express') , fs = require("fs") , app = express() , path = require('path') , request = require('request') , bodyParser = require('body-parser') , http = require('http') , server = http.createServer(app) , io = require('socket.io').listen(server, {log: true, origins: '*:*'}) ; var smtpTransport = require('nodemailer-smtp-transport'); var options = […]

在节点中encryption并在java中解密

我有一个在Java中的encryption代码。 我试图将encryption部分移植到节点。 基本上,节点将使用encryption模块进行encryption,然后Java将执行解密。 以下是我如何在Java中进行encryption: protected static String encrypt(String plaintext) { final byte[] KEY = { 0x6d, 0x79, 0x56, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b }; try { Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); final SecretKeySpec secretKey = new SecretKeySpec(KEY, "AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); final String encryptedString = Base64.encodeToString( cipher.doFinal(plaintext.getBytes()), Base64.DEFAULT); return […]

如何做到这一点PKCS7签署node.js?

所以我将一个ruby库移植到node.js,并需要创build一个PKCS7签名。 以下是rubylib正在做的事情: p12_certificate = OpenSSL::PKCS12::new(File.read('some-path.c12'), self.certificate_password) x509_certificate = OpenSSL::X509::Certificate.new(File.read('some-other-path.pem')) flag = OpenSSL::PKCS7::BINARY|OpenSSL::PKCS7::DETACHED signed = OpenSSL::PKCS7::sign(p12_certificate.certificate, p12_certificate.key, File.read('some-manifest'), [x509_certificate], flag) 我如何在节点中实现相同的function? 我认为这将是像这样的: crypto.createCredentials({ pfx : fs.readFileSync('some-cert.p12'), passphrase : this.certificate_password, cert : fs.readFileSync('some-path.pem','some-encoding'), }) 问题: 这是正确的方法吗? 我是否需要指定密钥,ca列表,crl列表或密码列表? 我应该用什么编码来读取证书? 什么是signed的线路设置相当于节点 什么是signed.to_der等价节点

客户端在Node.js上的ssl授权

我正在尝试使用自签名进行客户端授权。 首先,我正在创build证书: CA证书 openssl genrsa -des3 -out ca.key 2048 openssl req -new -x509 -days 365 -key ca.key -out ca.crt 服务器证书 openssl genrsa -out server.key 1024 openssl req -new -key server.key -out server.csr openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 客户证书 openssl genrsa -out client.key 1024 openssl req -new […]

TLS ECDHE-ECDSA-AES128-GCM-SHA256的密钥生成要求

我想知道ECDHE-ECDSA-AES128-GCM-SHA256和ECDHE-ECDSA-AES128-GCM-SHA256是否有最低限度的密钥生成要求? 我正在尝试使用上述algorithm之一来获取TLS客户端和服务器以彼此连接,并不断收到“无共享密码错误”。 我创build了一个用于签署客户端和服务器证书的CA,并尝试使用openssl和node.js进行连接。 我正在本地主机(127.0.0.1)上运行cliengt和服务器,以消除任何其他可能的问题。 这是我迄今为止所做的: CA密钥对创build: $ openssl genrsa -out ca-key.pem 4096 $ openssl req -new -x509 -days 365 -key ca-key.pem -out ca-cert.pem 服务器/客户端密钥对创build: $ openssl genrsa -out server-key.pem 4096 $ openssl req -new -key server-key.pem -out server-csr.pem $ openssl x509 -req -days 365 -in server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem $ […]

OpenSSL错误 – 无法获得本地颁发者证书

我有一个简单的链设置,可以成功validation在这种情况下: $ openssl version OpenSSL 1.0.2m 2 Nov 2017 $ openssl verify -CAfile chain.pem cert.pem cert.pem: OK 但是,我在这些情况下得到错误: $ openssl verify -CAfile ca-cert.pem cert.pem cert.pem: C = US… error 2 at 1 depth lookup:unable to get issuer certificate 特别是无法获得发行人证书 。 另请参阅: $ openssl verify chain.pem chain.pem: C = US… error 20 at 0 depth lookup:unable […]

使用node.js解密AES256将返回错误的最终块长度

使用这个Gist,我能够在Node.js 0.8.7中成功解密AES256。 然后当我升级到Node.js 0.10.24,我现在看到这个错误: TypeError:错误:0606506D:数字包络例程:EVP_DecryptFinal_ex:错误的最终块长度 在Decipheriv.Cipher.final(crypto.js:292:27) 这里是Gist的解密代码(这里为了方便起见): var crypto = require('crypto'); var AESCrypt = {}; AESCrypt.decrypt = function(cryptkey, iv, encryptdata) { encryptdata = new Buffer(encryptdata, 'base64').toString('binary'); var decipher = crypto.createDecipheriv('aes-256-cbc', cryptkey, iv), decoded = decipher.update(encryptdata); decoded += decipher.final(); return decoded; } AESCrypt.encrypt = function(cryptkey, iv, cleardata) { var encipher = crypto.createCipheriv('aes-256-cbc', cryptkey, iv), encryptdata = […]

使用公钥在Node.JSencryption中validation签名

有没有一种好的方法来validationNode.JS(v0.4 +)中的签名与公钥? 目前的encryption模块允许使用证书,但不能使用公钥。 例如: var crypto = require("crypto"); verifier = crypto.createVerifier("sha1"); verifier.update("signed data"); verifier.verify(CERT, signature); variablesCERT需要签名的证书(我猜公钥是从那个拉),但我拥有的是公钥而不是证书。 只有坚实的方式来实现这似乎是倾倒的数据的内容,公钥和签名到文件并执行openssl dgst fs.writeFileSync("public.key", pubkey); fs.writeFileSync("sig.sha1", signature); fs.writeFileSync("data.txt", data); exec("openssl dgst -sha1 -verify public.key -signature sig.sha1 data.txt", …) 但是,每次我需要validation签名时创build(和删除)文件看起来都是浪费。 任何好的想法如何做得更好? 更新2011-08-03 Node.js v0.5中的encryption模块允许使用证书和公钥 (RSA或X.509)

避免在TLS客户端中发送TLS_EMPTY_RENEGOTIATION_INFO_SCSV密码Hello

Node.js默认发送TLS_EMPTY_RENEGOTIATION_INFO_SCSV密码,以防止POODLE攻击 。 我试图通过用自定义密码列表覆盖TLS密码来避免发送这种密码(尽pipe这可能构成安全风险)。 但是,无论我做什么,Node.js都会一直发送TLS_EMPTY_RENEGOTIATION_INFO_SCSV密码。 我试图故意避免发送这个密码来模仿Firefox / Chrome的TLS协商。 这里是我用来修改和检查哪些密码节点发送的代码: var request = require('request'); var ciphers = [ 'ECDHE-ECDSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES128-GCM-SHA256', 'ECDHE-ECDSA-AES256-SHA', 'ECDHE-ECDSA-AES128-SHA', 'ECDHE-RSA-AES128-SHA', 'ECDHE-RSA-AES256-SHA', 'DHE-RSA-AES128-SHA', 'DHE-RSA-AES256-SHA', 'AES128-SHA', 'AES256-SHA', 'DES-CBC3-SHA' ].join(':'); var options = { ciphers: ciphers, secureProtocol: 'TLSv1_2_method', url: 'https://www.howsmyssl.com/a/check' }; request(options, function (error, response, body){ if (!error) { console.log(body); } else { console.log(error); } }); 有什么办法可以禁止在Node.js中发送这个密码吗?