3
我正在研究一個Node.js應用程序,我們將其稱爲「服務器A」,其中用戶必須提供客戶端證書才能訪問服務。Node.js:訪問客戶端證書
簡單的例子:
/** server setup **/
var serverOptions = {
key: fs.readFileSync('certs/server.key'),
cert: fs.readFileSync('certs/server.crt'),
ca: [fs.readFileSync('certs/ca.crt'), fs.readFileSync('certs/bar.cer'), fs.readFileSync('certs/foo.cer')],
requestCert: true
};
https.createServer(serverOptions, app).listen(SERVER_PORT, '', null, function() {
var host = this.address().address;
var port = this.address().port;
console.log('listening at http://%s:%s', host, port);
});
一切正常,下面的代碼打印客戶端證書的詳細信息。
app.get('/', function (req, res) {
/*** Dump ***/
res.contentType('application/json');
res.send(util.inspect(req.socket.getPeerCertificate(true), {colors: true}));
});
不過,我想能夠使用在serverA的獲得該客戶端證書,作出所謂的「服務器B」的另一臺服務器的請求。
options = {
hostname: 'localhost',
port: '3010',
path: '/',
method: 'POST',
headers: {
'Content-Type': 'text/xml;charset=UTF-8',
'Content-Length': serverResponse.length,
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
},
cert: clientCertificate
};
var req = https.request(options, function (res) {
console.log('statusCode: ', res.statusCode);
console.log('headers: ', res.headers);
res.on('data', function(d) {
callback(d);
});
});
的問題是,我還沒有找到一種方式來獲得與getPeerCertificate函數,返回證書的「定製」對象表示正確的X509證書。 如official documentation描述的,證書參數必須被提供有如下的數據:
公共X509證書使用。默認爲空。
有沒有辦法以正確的格式獲取客戶端證書?
它幫助!謝謝Hussain – Konal