我一直試圖做一個關於服務器和客戶端之間的TLS連接測試。 (SSL客戶端身份驗證)一個具體案例:UNABLE_TO_VERIFY_LEAF_SIGNATURE
我有一個自簽名密鑰對。
如果我嘗試使用tls.connect()
連接我的API服務器,我的連接似乎unauthorized
和authorizationError
值UNABLE_TO_VERIFY_LEAF_SIGNATURE
如下面的截圖。
但是,如果我嘗試連接https://api.twitter.com
而不是https://hellolarim.club
,則表示沒有錯誤,authorization
的值爲true
。另外,當我嘗試Twitter時,我不必使用rejectUnauthorized: false
參數。
我添加了下面的代碼server.js
過。
問題:我想知道爲什麼我不能連接爲authorized: true
?
我必須對我的API服務器實施SSL-客戶端身份驗證。
連接到我的API服務器的嘗試
client.js
var tls = require('tls');
var fs = require('fs');
var options = {
key: fs.readFileSync('client-private-key.pem'),
cert: fs.readFileSync('client-certificate.pem'),
rejectUnauthorized: false,
};
{
var cleartextStream = tls.connect(443, 'www.hellolarim.club', options, function() {
console.log('\nclient connected', cleartextStream.authorized ? 'authorized' : 'unauthorized');
if(!cleartextStream.authorized) {
console.log("authorizationError: " + cleartextStream.authorizationError);
}
process.stdin.resume();
process.stdin.pipe(cleartextStream);
});
cleartextStream.setEncoding('utf8');
cleartextStream.on('data', function(data) {
console.log("\n" + data);
});
cleartextStream.on('end', function() {
server.close();
});
連接到Twitter的嘗試API服務器
Server.js
var tls = require('tls');
var fs = require('fs');
var options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem'),
requestCert: true,
rejectUnauthorized: true,
ca: [ fs.readFileSync('../client/client-certificate.pem') ]
};
var server = tls.createServer(options, function(cleartextStream) {
console.log(cleartextStream.getPeerCertificate());
console.log('server connected',
cleartextStream.authorized ? 'authorized' : 'unauthorized');
cleartextStream.write("Hello from server to client!\n");
cleartextStream.setEncoding('utf8');
cleartextStream.pipe(cleartextStream);
});
server.listen(443, function() {
console.log('server bound');
});