我與異步網頁API的工作,在版本的NodeJS海格一個問題比v0.8.9的NodeJS v0.10.x(FreeBSD的) 「X509_STORE_add_cert:證書已經在哈希表」
$ UNAME -a FreeBSD home 9.1-STABLE FreeBSD 9.1-STABLE#0:Fri Feb 1 10:38:27 EET 2013 root @ home:/ usr/obj/usr/src/sys/HOME amd64
$ node -v v0。 10.0
$節點./client.js
events.js:72
throw er; // Unhandled 'error' event
^
Error: 34401711104:error:0B07C065:x509 certificate routines:X509_STORE_add_cert:cert already in hash table:../deps/openssl/openssl/crypto/x509/x509_lu.c:357:
34401711104:error:0B07C065:x509 certificate routines:X509_STORE_add_cert:cert already in hash table:../deps/openssl/openssl/crypto/x509/x509_lu.c:357:
at SlabBuffer.use (tls.js:221:18)
at CleartextStream.read [as _read] (tls.js:408:29)
at CleartextStream.Readable.read (_stream_readable.js:293:10)
at tls.js:465:12
at process._tickCallback (node.js:415:13)
代碼(client.js):
var fs = require('fs');
var https = require('https');
var agent = require('agent').agent;
var config={
host: 'sample.host.com',
port: 443,
path: '/worker.do',
pfx: fs.readFileSync('./client.pfx'),
passphrase: "passwordHere"
};
config.agent = new https.Agent({
pfx: config.pfx,
passphrase: config.passphrase
});
agent.config=config;
agent.makeRequest([{request:"search",query:"*"}],function(data){
if(!data.success){
console.log(data.error);
return;
}
var items=[];
for(var item in data.data){
items.push(data.data[item][0]);
}
agent.makeRequest([{"request":"update","group":true,"arr":JSON.stringify(items)}],function(data){
if(!data.success){
console.log(data.error);
return;
}
console.log('Done: '+data.result);
});
});
碼(agent.js):
var https = require('https');
var agent={
config: {},
getId: function() {
return this.id || (this.id = new Date().getTime());
},
makeRequest: function(params,callback){
var options = {
host: this.config.host,
port: this.config.port,
path: '/worker.do',
method: 'POST',
agent: this.config.agent
};
var that=this;
var req = https.request(options, function(res) {
if(res.statusCode!='200'){
callback({
success: false,
error: res.statusCode
});
return;
}
var body='';
res.on('data', function(data) {
body+=data.toString();
});
res.on('end', function(){
try {
body=JSON.parse(body);
} catch(e) {
callback({
success: false,
error: '[makeRequest] Cant parse body: '+body
});
}
var reqId=body[0];
that.getContent(reqId,callback);
});
});
req.on('error', function(e) {
callback({
success: false,
error: e
});
});
req.end(JSON.stringify(params)+'\n\n');
},
getContent: function(reqId,callback){
var options = {
path: '/worker.do?_dc='+this.getId(),
method: 'GET',
host: this.config.host,
port: this.config.port,
agent: this.config.agent
};
var req = https.request(options, function(res) {
if(res.statusCode!='200'){
callback({
success: false,
error: res.statusCode
});
return;
}
var body='';
res.on('data', function(data) {
body+=data.toString();
});
res.on('end', function(){
try {
body=JSON.parse(body);
} catch(e) {
callback({
success: false,
error: '[getContent] Cant parse body: '+body
});
}
callback(body[reqId]);
});
});
req.on('error', function(e) {
callback({
success: false,
error: e
});
});
req.end();
}
}
exports.agent=agent;
在v0.6.x的NodeJS和v0.8.x它完美的作品。在v0.10.x上 - 失敗。 請幫忙找到問題。
你有沒有找到一個解決這個?我在Mac OS X上遇到了同樣的問題。 – 2014-01-21 18:15:29
@ greg-barrett是的。問題出在cert文件中。嘗試將您的證書文件轉換爲pem/key並將其轉換回pfx。 我不知道爲什麼,但它的工作。 – user2314519 2014-01-22 14:20:33