2016-05-04 11 views
2

.p12ファイルを使用してエンドポイントに安全に接続しようとしましたが、次のエラーが発生し続けます。P12証明書「データ不足」エラー

_tls_common.js:136 
    c.context.loadPKCS12(pfx); 
      ^

Error: not enough data 
at Error (native) 
at Object.createSecureContext (_tls_common.js:136:17) 
at Object.TLSSocket._init.ssl.onclienthello.ssl.oncertcb.exports.connect (_tls_wrap.js:1003:48) 
at Agent.createConnection (https.js:80:22) 
at Agent.createSocket (_http_agent.js:179:26) 
at Agent.addRequest (_http_agent.js:141:10) 
at new ClientRequest (_http_client.js:147:16) 
at Object.exports.request (http.js:31:10) 
at Object.exports.request (https.js:197:15) 
at Request.start (D:\path_to_project\node_modules\request\request.js:747:30) 

エラーを生成するコードはこれです:

 request({ 
      method: 'POST', 
      url: config.secureEndpoint.hostname + config.secureEndpoint.path, 
      body: XMLAPIResponse.body, 
      rejectUnauthorized: false, 
      strictSSL: false, 
      agentOptions: { 
       //pfx: pfx, 
       pfx: 'string_path_to_the_p12_key_file.p12', 
       passphrase: 'redacted_password' 
      } 
     }, function (error, response, body) { 
      console.log(response); 
      if (response.satusCode == 200) { 
       model.updateStatus(ID, 'done'); 
      } else { 
       model.updateStatus(ID, 'error'); 
      } 
     }); 

私はhttps.requestメソッドを使用して試してみたが、それは同じ結果が得られます。私はウェブを検索して解決策を探しましたが、私は空の手を挙げました。

PFX \ P12キーの問題は、私が第三者からキーを受け取ったことを考えると、遠くまでフェッチされない可能性があります。私が考えることができる唯一のことは、openSSLを使用してキーフォーマットを変換し、それが動作するかどうかを確認することです。どんな提案や助けも大歓迎です。

答えて

1

したがって、答えはhttpsモジュールのAPI使用法にあります。 in the Node.js https documentationと記載されているように、pfxファイルを提供するときは、それをバイトストリームとして渡す必要があります。あなたはファイルを読み込み、直接その内容を渡す必要があり

request({ 
    method: 'POST', 
    url: config.secureEndpoint.hostname + config.secureEndpoint.path, 
    body: XMLAPIResponse.body, 
    rejectUnauthorized: false, 
    strictSSL: false, 
    agentOptions: { 
     //pfx: pfx, 
     pfx: require('fs').readFileSync('string_path_to_the_p12_key_file.p12'), 
     passphrase: 'redacted_password' 
    } 
} 

は、この情報がお役に立てば幸いです。