Tag: openssl

Solaris 11:Node.JS:无法自动检测OpenSSL支持

我如何在Solaris 11上解决这个错误? "Could not autodetect OpenSSL support. Make sure OpenSSL development packages are installed. Use configure –without-ssl to disable this message." 这很奇怪,因为我知道我有openssl 1.0.0e 。 另外我知道Node正在查看/usr/include ,并且存在/usr/include/openssl/ssl.h和/usr/include/openssl/crypto.h文件。 Ubuntu等效

Node.js TLS请求与特定的密码

我有一个Node.js应用程序需要检查外部资源的TLS兼容性。 我需要限制Node.js在进行外部TLS请求时使用的特定密码。 我正在寻找示例代码来实现这一点。 更多信息:Apple在iOS 9中要求所有出站连接都要encryption ,并且允许的密码列表是有限的。 接受的密码是: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 我的目标是build立一个服务,检查以确保外部服务器符合苹果的要求。

Nodejs createDecipher可以用两个不同的密钥解密相同的密文

在使用Nodejs createDecipher时,我似乎能够使用两个不同的密钥解密相同的密文数据有效载荷而没有错误。 var ciphertext = '31c655f86b39fc9ac1dd96d7ae5e9d905e7c977df9ea70e6b87d3504caf03760'; var key1 = 'asdf'; var key2 = '8bc94f258d9aaf509061b5ff52bfeb019ce802959c41eaa188beacd5e33f21db'; function decrypt(data, key) { var decipher = crypto.createDecipher('aes-256-cbc', key); var decrypted = decipher.update(data, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } // 890736.159999999 console.log(decrypt(ciphertext, key1)); // F 쭳 M2 C < console.log(decrypt(ciphertext, key2)); 当使用第二个密钥解密时,我期望产生一个EVP_DecryptFinal_ex:bad decrypt错误。 事实上,当我改变第二个键中的单个字符时会产生一个错误: crypto.js:153 var ret = this._handle.final(); […]

NodeJS https客户端错误 – 400

我正在创build一个连接到Proxmox 2.1的REST API的NodeJS服务。 我的脚本: // module dependencies var http = require('http'), url = require('url'), https = require('https'), querystring = require('querystring'), fs = require('fs'); exports.urlReq = function(reqUrl, options, cb){ if(typeof options === "function"){ cb = options; options = {}; }// incase no options passed in // parse url to chunks reqUrl = url.parse(reqUrl); // http.request settings […]

nodejs中使用的默认CA证书在哪里?

我连接到一个服务器,证书由我自己的CA签名,CA的证书已经安装到系统的钥匙串中。 用openssl s_client -connect some.where说Verify return code: 0 (ok) 但我不能连接nodejs的tls / https模块,它会失败, Error: SELF_SIGNED_CERT_IN_CHAIN 但连接到一个正常的服务器(即google.com:443)工作正常。 似乎nodejs的openssl不与系统的openssl共享相同的钥匙串。 但我不能find它在哪里。 我试着用SSL_CERT_DIR覆盖,但似乎没有工作。 顺便说一句:我可以通过设置NODE_TLS_REJECT_UNAUTHORIZED=0绕过服务器validation,但这不够好;) 我使用OSX 10.8.3与OpenSSL 0.9.8r,节点v0.9.8

安全签名algorithm的兼容性

经过一番研究之后,似乎有人build议使用带有PSS填充的RSA,因为它的安全属性已经很好了。 问题在于签名algorithm很难兼容 ,特别是对于这样的需求。 我想实现的是至less在以下环境中进行签名和validation: 牡丹 OpenSSL的 encryption+ Node.js(使用OpenSSL) 在PolarSSL和其他软件上兼容也许会很有趣。 在node.jsencryption页面中有一个关于创build和validation签名的例子。 这很好,但我需要与Botan EMSAx(SHA256)兼容,并且真的认为签名应该用RSA-PSS之类的安全软件来填充。 节点示例页面仅显示'RSA-SHA256'但没有使用填充。 PSS填充可以通过使用OpenSSL来实现: openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 \ -sign rsa.key -out data.txt.sha256 data.txt 我的testing代码看起来像这样: var s = crypto.createSign('RSA-SHA256'); var key = fs.readFileSync('rsa.key').toString(); s.update(message); var signature = s.sign(key, 'base64'); 但它为相同的input产生相同的输出,这不是我想要的,而且显然与我使用Botan的C ++实现不兼容。 如果无法以最小的努力达到兼容性,对于selectalgorithm的任何build议,我可能会努力尝试联系这些encryption库的开发者,看看是否有一个algorithm的共识来获得作为事实上的标准实施。 (是的,我知道这似乎是绝望。)是否有这样的持续努力?

来自Node和openssl库的Base64编码产生不同的输出

为什么以下产生不同的输出? OpenSSL命令行 回声克里斯| openssl base64 // Q2hyaXMK Node.js的 new Buffer('Chris')。toString('base64')// Q2hyaXM = 我正在尝试使用Passport-http库进行基本身份validation,并且它似乎期望#1格式的编码数据。 这对我来说是一个问题,因为我所有的testing都依靠节点来生成编码数据(摩卡,超级)。 任何帮助是极大的赞赏。

Node.js aes128encryption/解密端口到PHP

所以在node.js我有一个encryptionscheme使用aes128而不通过IV。 一个例子如下 var cipher = require('crypto').createCipher('aes128','password'); cipher.update('test','utf8','base64')+cipher.final('base64'); 输出CjZ3R/tW8jiyLvg+/TE6bA== 。 问题是,我不能在PHP中重现这一点,即使我已经尝试了一堆实现和变化。 当我然后尝试通过openssl运行这个,我运行以下: echo "test" | openssl enc -e -aes128 -a -k password 输出U2FsdGVkX19Ccfv3SWvuzuZWeov9GDuwx1RMK2HWa / s =也不匹配。 我也尝试使用-md和所有可能的选项,并且两者都不匹配(它们甚至不是相同的块大小)。 在PHP中运行时,我尝试过使用填充(padding)对填充字符进行散列操作(填充字符是所需填充字符的数目)(在网上看到这是nodejs使用的内容)。 我已经尝试将IV设置为密码,也尝试将空字节,但我仍然无法获得匹配。 任何build议/想法? 编辑: 所以我刚刚在php中发现了函数openssl_encrypt,并尝试了相同的testing,并再次得到了一个完全不同的输出(现在这个输出与node.js完全相同,据说它们都使用openssl): openssl_encrypt ( "test" , 'aes128' , "password") 哪些输出(已经在base64中) JleA91MvYHdEdnj3KYHmog==这是至less现在在块计数匹配,但仍然不是相同的密文。 我还应该提到的是,将IV传递给nodejs是一种select,可以解决这个差异,但是这个phpscheme将取代已经存在的nodejs中的旧scheme,所以它必须能够解密已经创build的密文

用CryptoJS解密openssl AES

我试图使用CryptoJS 3.1.5解密用opensslencryption的文件。 一切工作正常,如果我使用CryptoJSencryption和解密,壳在OpenSSL一样,但是当我尝试混合CryptoJS与OpenSSL一切都出错了。 该文件是使用以下命令创build的: openssl enc -aes-256-cbc -in file.txt -out file.enc -k password 我试图解密这样的: fs.readFile('file.enc', function(err, data) { var decrypted = CryptoJS.AES.decrypt( data.toString(), "password", { mode : CryptoJS.mode.CBC } ); console.log(decrypted.toString(CryptoJS.enc.Utf8)); }); // Give me this err: Uncaught Error: Malformed UTF-8 data 而另一方面,我也这样做: fs.readFile('file.txt', function(err, data) { var encrypted = CryptoJS.AES.encrypt( data.toString(), "password", { mode […]

使用椭圆曲线键创build服务器和客户机时使用节点JS TLS密码和密码选项(不共享密码套件错误)

关于这个问题 ,我试图在node.js中启动一个TLS服务器,以反映我在OpenSSL中创build的服务器。 我已经从命令行使用OpenSSLtesting了客户端和服务器,并成功build立连接。 当我尝试将服务器移植到node.js(并且仍然使用OpenSSL客户端连接到服务器)时,我收到一个“no shared cipher”错误。 我想知道是否有什么特别的我需要做tls.createServer()使用passphrase选项时, 以下是我分别为服务器和客户端成功使用的OpenSSL命令,请注意,passphrase.txt文件包含一行,即密码: $ openssl s_server -accept 8888 -cert server.cert -key server.key -pass file:passphrase.txt -CAfile ca.cert $ openssl s_client -connect 127.0.0.1:8888 -cert client.cert -key client.key -pass file:passphrase.txt -CAfile ca.cert 如果使用附加参数-cipher 'ECDHE-ECDSA-AES128-GCM-SHA256'指定客户端和/或服务器的密码,我也可以成功连接。 我正在使用openssl ecparam生成椭圆曲线键,并使用openssl ca创build的CA进行签名,正如我以前的问题所讨论的。 用node.js编写的服务器代码如下所示: var tls = require('tls'); var fs = require('fs'); var msg = '***********\n\nHello there secure client!\n\n***********'; […]