2015-03-04 4 views
0

Фрагмент кода, который я пытаюсь загрузить закрытый ключ RSA в аддоне iojs.Пользовательский iojs addon не смог загрузить закрытый ключ RSA

void IojsAddon::New(const FunctionCallbackInfo<Value>& args) { 
    Isolate* isolate = Isolate::GetCurrent(); 
    HandleScope scope(isolate); 

    if (args.IsConstructCall()) { 
    EVP_PKEY* ca_key; 
    BIO* keyb = BIO_new(BIO_s_file()); 
    BIO_read_filename(keyb, "/path/to/key.pem"); 
    ca_key = PEM_read_bio_PrivateKey(keyb, nullptr, nullptr, nullptr); 

    std::cout << "type: " << ca_key->type << std::endl; // type: 6 
    std::cout << "check: " << RSA_check_key(ca_key->pkey.rsa) << std::endl; // check: -1 
    RSA_print_fp(stdout, ca_key->pkey.rsa, 0); // Segmentation fault: 11 

    IojsAddon* addon = new IojsAddon(); 
    addon->Wrap(args.This()); 
    args.GetReturnValue().Set(args.This()); 
    } else { 
    const int argc = 1; 
    Local<Value> argv[argc] = { args[0] }; 
    Local<Function> cons = Local<Function>::New(isolate, constructor); 
    args.GetReturnValue().Set(cons->NewInstance(argc, argv)); 
    } 
} 

фрагмент кода, который загрузить секретный ключ RSA успешно в отдельном приложении, которое точно так же, как и предыдущие.

int main(int argc, char **argv) { 
    EVP_PKEY* ca_key; 
    BIO* keyb = BIO_new(BIO_s_file()); 
    BIO_read_filename(keyb, "/path/to/key.pem"); 
    ca_key = PEM_read_bio_PrivateKey(keyb, nullptr, nullptr, nullptr); 

    std::cout << "type: " << ca_key->type << std::endl; // type: 6 
    std::cout << "check: " << RSA_check_key(ca_key->pkey.rsa) << std::endl; // check: -1 
    RSA_print_fp(stdout, ca_key->pkey.rsa, 0); // print out the key info successfully. 
    return (0); 
} 

P.S.

  • iojs: v1.2.0
  • pangyp: v2.0.1

Что я пропускаю здесь? Любая помощь будет оценена!

ответ

0

Я отвечу на свой вопрос здесь. Решите его, включив заголовочные файлы openssl в binding.gyp. Я успешно прочитал сертификат X509 без включения каких-либо файлов заголовков для этого, я просто предполагаю, что система сборки сделает это для меня. Но это не так. Вы должны сделать это самостоятельно.

Отъезд Linking-to-OpenSSl для получения дополнительной информации о работе iojs addon with openssl.