पर मैं स्वयं हस्ताक्षरित के साथ क्लाइंट प्राधिकरण बनाने की कोशिश कर रहा हूं।क्लाइंट एसएसएल प्रमाणीकरण node.js
सबसे पहले, मैं `बनाने प्रमाण पत्र:
CA प्रमाणपत्र
openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
सर्वर प्रमाण पत्र
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 365
ग्राहक sertificate
openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -out client.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 365
Convert ग्राहक प्रमाण p12
openssl pkcs12 -export -in client.crt -inkey client.key -name "My cert" -out client.p12
ओपन के ficate और स्थापित p12 प्रमाण पत्र खुला client.p12
मेरे Node.js सर्वर (express.js का उपयोग कर)
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, https = require('https')
, fs = require('fs');
var app = express();
app.configure(function() {
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function() {
app.use(express.errorHandler());
});
app.get('/', function(req, res) {
console.log(req.client.authorized);
res.send(req.client.authorized)
});
var options = {
key:fs.readFileSync('ssl/server.key'),
cert:fs.readFileSync('ssl/server.crt'),
ca:[fs.readFileSync('ssl/ca.crt')],
requestCert:true,
rejectUnauthorized:false,
passphrase: 'passphrase',
agent: false
};
https.createServer(options,app).listen(app.get('port'), function() {
console.log("Express server listening on port " + app.get('port'));
});
जब सर्वर चल रहा है, मैं खुले https://localhost:3000
क्रोम में, लेकिन प्रमाणीकरण पास नहीं होता है: req.client.authorized झूठा
क्रोम संदेश
हैThe identity of this website has not been verified.
• Server's certificate does not match the URL.
मेरी गलती कहां है?
क्लाइंट प्रमाण अनुरोध पहले से ही कोड अनुरोध में 'requestCert: true' के माध्यम से सक्रिय है। अनुरोध एक अनुरोध हैंडलर में क्लाइंट प्रमाण का अनुरोध नहीं कर सकता; इसे सर्वर विकल्पों में कॉन्फ़िगर किया जाना चाहिए, क्योंकि प्रमाणपत्र एक्सचेंज एसएसएल हैंडशेक के हिस्से के रूप में होता है (यानी अनुरोध संभालने से पहले)। – ttreitlinger