2016-03-01 16 views
6

HTTPS istekte bulunmaya çalışıyorum. Zaten PFX'in iyi olduğunu ve sorun olmadığını biliyorum (benzer bir örnek uygulama çalışıyorum).Node.js - HTTPS PFX Hatası: BIO yüklenemedi

aşağıdaki yapıyorum: Ben bir istek içine seçeneklerimi geçirerek

var request = require('request-promise'); 

...

options.pfx = fs.readFileSync('myfile.pfx'); 
options.passphrase = 'passphrase'; 

.

request.post(options); 

Sonra aşağıdaki hatayı alıyorum isteği oluşturmak için deneyin:

_tls_common.js:130 
    c.context.loadPKCS12(pfx, passphrase); 
      ^

Error: Unable to load BIO 
at Error (native) 
at Object.createSecureContext (_tls_common.js:130:17) 
at Object.exports.connect (_tls_wrap.js:955:21) 
at Agent.createConnection (https.js:73:22) 
at Agent.createSocket (_http_agent.js:174:16) 
at Agent.addRequest (_http_agent.js:143:23) 
at new ClientRequest (_http_client.js:133:16) 
at Object.exports.request (http.js:31:10) 
at Object.exports.request (https.js:163:15) 
at Request.start (/Users/filomeno/workspace/sla-crawler/node_modules/request/request.js:747:30) 
at Request.write (/Users/filomeno/workspace/sla-crawler/node_modules/request/request.js:1369:10) 
at end (/Users/filomeno/workspace/sla-crawler/node_modules/request/request.js:561:16) 
at Immediate._onImmediate (/Users/filomeno/workspace/sla-crawler/node_modules/request/request.js:589:7) 
at processImmediate [as _immediateCallback] (timers.js:374:17) 

Ben aynı kod çalışan bir örnek uygulaması vardır. Başarısız olarak .p12'ye dönüştürmeyi denedim.

Bu hatanın ne anlama geldiği hakkında bir fikri olan var mı?

Düzenleme: dinamik özellikleri ve statik özellikleri

_.merge(options, _this.requestOptions); 

Ve bununla 2 nesnelerin birleştirme yapmak lodash kullanıyorum sorunu

+0

Herhangi bir şey buldunuz mu? Aynı hatayı alıyorum –

+0

Bu kod ile "aynı kodun çalıştığı" örnek uygulama arasındaki fark nedir? _I.e._, farklı kullanıcılar tarafından çalıştırılan iki uygulama ('myfile.pfx' dosyasında dosya sistemi izinleri öneriliyor)? Söz konusu PFX dosyası, ** ve ** özel anahtarı veya farklı şifreleri korumak için aynı şifreyi kullanır mı? – Castaglia

+0

Sorunum, '_.merge (options, _this.requestOptions) yapıyordum; 'kodlama ile uğraşıyordu. – fasantos

cevap

6

özellikle (nodejs kaynak koduna baktığımızda neden oluyordu Bu dosya https://github.com/nodejs/node/blob/master/src/node_crypto.cc)

hata bu işlev tarafından atılır

// Takes .pfx or .p12 and password in string or buffer format 
void SecureContext::LoadPKCS12(const FunctionCallbackInfo<Value>& args) { 
    Environment* env = Environment::GetCurrent(args); 
    ... 
LoadBIO boş döner hat 964

in = LoadBIO(env, args[0]); 
if (in == nullptr) { 
    return env->ThrowError("Unable to load BIO"); 
} 

olarak

// Takes a string or buffer and loads it into a BIO. 
// Caller responsible for BIO_free_all-ing the returned object. 
static BIO* LoadBIO(Environment* env, Local<Value> v) { 
    HandleScope scope(env->isolate()); 

    if (v->IsString()) { 
    const node::Utf8Value s(env->isolate(), v); 
    return NodeBIO::NewFixed(*s, s.length()); 
    } 

    if (Buffer::HasInstance(v)) { 
    return NodeBIO::NewFixed(Buffer::Data(v), Buffer::Length(v)); 
    } 

    return nullptr; 
} 

Belki tampon şekilde okunabilir değil? Ayrıca fonksiyonun utf-8 kodlanmış bir dizge beklediği görülüyor.

Bazı fikirler:

size dosyasının yolunu doğru olduğundan emin misin?

Belki kodlama sorunu mu var? fs.readFileSync() kodlamayı açıkça kodlamayı denediniz mi?

Bir hata atıp atmadığını görmek için fs.readFile(<filename>, <encoding>, function(error, data){}) ile deneyin.

+2

Bu kodlama oldu, ben nesnemle karıştırılan bir tada sahip bir birleştirme yapıyordum. – fasantos

İlgili konular