В работе мой веб-сайт использует сертификат Let's Encrypt, чтобы пользователь мог видеть в браузере действительную блокировку сертификата. Если пользователь переходит на маршрут example.com/dashboard, я хотел бы войти в систему, используя сертификат на стороне клиента (а не имя пользователя / пароль).
Я сгенерировал на сервере с помощью openssl private & publi c key , Ключ publi c остается на сервере, а закрытый ключ отправляется клиенту.
Используя это руководство , я создал на сервере. js
const express = require('express')
const https = require('https')
const fs = require('fs')
const masterapp = express()
var options = {
key: fs.readFileSync('/etc/ssl/certs/sslforfree/private.key'),
cert: fs.readFileSync('/etc/ssl/certs/sslforfree/certificate.crt'),
requestCert: true,
rejectUnauthorized: false,
}
И затем в промежуточном программном обеспечении
const cert = req.connection.getPeerCertificate()
if (req.client.authorized) {
if (cert.subject.CN === "Client123" && cert.fingerprint256 === "AA:BB:CC:DD:00..
В ОС Ma c правильно отображается подсказка в браузере, где я выбираю ключ (ключ хранится в связке ключей).
Проблемы:
- req.client.authorized всегда ложно
- Как с помощью Node.js можно безопасно проверить, что закрытый ключ соответствует publi c ключ?
- Безопаснее ли иметь поддомен dashboard.example.com или маршрут example.com/dashboard (express router)?