在NodeJS中可以有多个客户端证书用于连接吗

siv3szwd  于 2023-04-20  发布在  Node.js
关注(0)|答案(1)|浏览(126)

我有一个应用程序,它有多个应用程序服务器所需的多个密钥,az.crt,ks.crt。公钥用于从2个不同的服务器访问2个Kafka主题。其中一个密钥用于连接到Mongodb服务器,该服务器需要1个TLS/SSL证书和不同的密码。还有一种Azure连接,它也需要一个带有用户名和密码的公共证书来连接不同的密码套件。我能看到的使用证书连接的唯一方法是这样的:

// config1 // first kafka instance server1
ssl: {
  cert: fs.readFileSync('./ks.crt', 'utf-8')
},
sasl: {
  mechanism: 'SCRAM-SHA-512',
    username: env.kafkaUsername1,
    password: env.kafkaPassword1,
}
// config2 - 2nd Kafka instance server2
ssl: {
  rejectUnauthorized: false,
    ca: [readFileSync('./az.crt', 'utf-8')],
},
sasl: {
  mechanism: 'SCRAM-SHA-256',
    username: env.kafkaUsername2,
    password: env.kafkaPassword2,
}

这将使得无法处理具有不同连接标准的2个证书。虽然两个密钥都是由同一个CA颁发的,但用户名和密码都是不同的。似乎只有一种机制可以在ssl对象中加载证书,因为我有两种情况,一种是az.crt和ks.crt,我需要2个需要ssl{}部分的声明。
有没有可能使用任何NodeJS选项来解决这个问题?

kpbpu008

kpbpu0081#

创建第二个KafkaJS示例。

const kafka_mongo = new Kafka({
  clientId: 'x',
  brokers: ['x:9092'],
  ssl: {
    cert: readFileSync('./ks.crt', 'utf-8')
  },
  sasl: {
    mechanism: 'SCRAM-SHA-512',
    username: env.kafkaUsername1,
    password: env.kafkaPassword1,
  },
})

const kafka_azure = new Kafka({
  clientId: 'y',
  brokers: ['y:9092'],
  ssl: {
    rejectUnauthorized: false,
    ca: [readFileSync('./az.crt', 'utf-8')],
  },
  sasl: {
    mechanism: 'SCRAM-SHA-256',
    username: env.kafkaUsername2,
    password: env.kafkaPassword2,
  },
})

相关问题