Articles of openssl

Nodejs请求一个带有.p12证书的Web服务

所以,标题非常简单。 我想从一家公司使用Web服务,并且获得了.cer和.p12文件。 据说,在提出请求时我应该使用.p12。 我已经将.cer导入Windows,并且可以轻松地向邮递员发送请求。 但是当我试图用node.js做请求时,我得到错误。 这里是代码,我正在使用request模块: var headersOpt = { "content-type": "application/json", }; var options = { url: 'https://some-url/api', cert: fs.readFileSync(__dirname + '/certs/myCert.p12'), headers: headersOpt }; request.get(options, (error, response, body) => { console.log(error); console.log(response); console.log(body); }); 我得到这个错误: { Error: error:0906D06C:PEM routines:PEM_read_bio:no start line at Object.createSecureContext (_tls_common.js:89:17) at Object.exports.connect (_tls_wrap.js:1048:48) at Agent.createConnection (https.js:111:22) at Agent.createSocket (_http_agent.js:224:26) […]

使用非对称密码保护文件

我知道非对称密码是如何工作的。 我知道有两个键(一个私人和一个公共)。 当有人想要沟通时,他们使用这些公钥来交换他们的公钥encryption消息,然后相应的消息只能由拥有私钥的用户解密。 现在,我正在使用Node.js,我需要做这样的事情… 我需要一个应用程序,每个小时读取一个数据库,提取数据并将其保存到一个文件,我需要发送到另一台服务器。 我的问题是,我不希望该文件将被其他人看到,我使用SSH传输,所以没有问题,但我必须encryption该文件,因为我不是该服务器的pipe理员所以也许有人可以读它。 不幸的是,两台服务器的pipe理员都是一样的。 所以我的想法是用公钥encryption文件,然后只有拥有私钥的人才能解密。 我认为这是毫无意义的使用像这样的东西: var key = 'blablabla' 如果我使用公钥,没有问题,所有人都可以阅读……确实是公开的。 但是用这个公钥,没有人可以解密这个消息,所以就像单向encryption一样。 现在,有人可以告诉我是否需要签名者/validation者来完成这项工作,或者我可能需要使用openssl生成两个密钥(public / private),并将这些密钥传递给密码/ dechiper? 我在看密码模块,但没有例子….

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的密文