Articles of openssl

SSL握手使用node.js服务器

我目前正在尝试使用socket.io创build一个安全的连接,而现在我真的无法实现这一点。 试图检查我的证书是否是权利,我试图在nodeJS中创build一个基本的https服务器。 var fs = require('fs'); var certDir = "/path/to/the/certificates/cert-test/"; require("https").createServer( { key : fs.readFileSync(certDir + 'srv.key'), cert : fs.readFileSync(certDir + 'crt.pem'), }, function(request, response){ response.writeHeader(200, {"Content-Type": "text/plain"}); response.write("Hello World!\n"); response.end(); }).listen(8082).on('clientError', function(e){ console.log(e); }); 与http相当的工作正常,但这是不可能的工作。 我把节点版本升级到了v0.12.4,npm到2.11.0,https是1.0.0(更多查询,socket.io是1.3.5)。 服务器在AWS上,有一个bitnami实例,Ubuntu 12.04.5 LTS,内核版本为3.2.0-84-virtual,OpenSSL为1.0.1i。 我尝试通过https://node.inkive.com:8082 (在我的浏览器和curl中)访问服务器,但是我从来没有得到正确的握手。 服务器检测到以下错误: [Error:3074971392:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:../ deps / openssl / openssl / ssl / […]

从Node.js访问OpenSSL的不同方法

我正在寻找一种将OpenSSL和Node.js集成一段时间的方法。 我的目标是: 我想成为平台独立的,因此一个解决scheme应该在OS X,Linux和Windows上工作。 我想避免不必要的磁盘操作。 例如,私钥可能不在文件中,而是在数据库中(可能是一个愚蠢的例子,但让我们认为这是一个有效的要求)。 我想支持创build密钥,csrs,签署csrs,创buildca证书,…所有证书的东西,从头到尾。 现在我考虑的选项是: 使用集成在Node.js中的OpenSSL库 不幸的是,encryption模块不提供证书的东西。 使用外部模块使用OpenSSL库。 不幸的是,我不知道该怎么做,可能是因为在C / C ++中缺less知识。 使用OpenSSL二进制作为subprocess。 鉴于OpenSSL可用,这应该适用于所有平台。 这不是很好,但它的作品。 问题1:正如我写的,我没有丝毫的想法直接访问与Node.js捆绑在一起的OpenSSL库。 我将如何处理这个? 目前,我坚持使用二进制作为一个subprocess。 不幸的是,这要求所有的东西,比如私人密钥等都是作为文件给出的(我明确想要避免的),或者我使用/ dev / stdin(这在Windows上不起作用)交出所有的东西。 问题2:我怎么处理这个问题? 第一个解决scheme也能解决这个问题吗?

与crypto.createSign一起使用密码保护的私钥

我正在尝试使用node.jsencryptionAPI和一个密码保护的私钥来签署和validation消息,它使我了解到: > var sig = crypto.createSign('RSA-SHA256').update('psst').sign(pk,'hex'); Enter PEM pass phrase: 在这一点上节点就locking了。 我似乎无法find一个选项来以编程方式传递密码。

从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 […]