Использование сертификатов X509 в fibjs
Предыстория
Что такое сертификат x509
Сертификат x509 — это наиболее часто используемый формат цифрового сертификата в системе службы аутентификации с открытым ключом (PKI), основанный на международных стандартах. Его можно использовать для аутентификации и шифрования, он широко используется в протоколах SSL/TLS и других типах сетевых приложений в Интернете. Сертификат x509 использует механизм аутентификации открытого/закрытого ключа и может гарантировать конфиденциальность, целостность и подлинность передачи данных.
В каких сценариях используется сертификат x509?
В Интернете наиболее часто используемым сценарием использования сертификатов x509 является проверка подлинности сертификата в протоколе TLS/SSL, чтобы гарантировать, что данные, передаваемые между клиентом и сервером, зашифрованы с использованием безопасного канала и проверены. Сертификаты x509 также можно использовать для аутентификации личности в протоколах приложений, основанных на шифровании с открытым и закрытым ключами, таких как VPN/SSH.
fibjs поддерживает обработку сертификатов x509
fibjs поддерживает обработку сертификатов x509 и предоставляет такие классы, как X509Cert и X509Req, в криптомодуле для выполнения таких операций, как чтение, создание и подписание сертификатов. Вы можете использовать эти классы для получения срока действия сертификата, открытого ключа, эмитента, имени субъекта и другой информации, а также для выполнения таких операций, как подписание и проверка сертификата. В то же время fibjs также предоставляет класс HttpsServer для поддержки аутентификации сертификатов HTTPS и зашифрованных соединений, что упрощает использование сертификатов x509 в fibjs.
Знакомство с модулем X509
Что такое модуль X509?
В криптомодуле fibjs предусмотрены такие классы, как X509Cert и X509Req, для выполнения таких операций, как чтение, создание и подписание сертификатов x509. Модуль X509 — это модуль обработки сертификатов x509, обеспечивающий такие операции, как анализ, создание и проверка сертификатов.
Функция модуля X509
Функция модуля X509 заключается в работе с сертификатом x509. Вы можете использовать этот модуль для чтения существующего сертификата x509 и получения срока действия, открытого ключа, эмитента, имени субъекта и другой информации сертификата. В то же время модуль X509 также может создавать запросы на сертификаты x509 и подписывать сертификаты, например, для аутентификации сертификатов в протоколах TLS/SSL.
API модуля X509
Ниже приведен список наиболее важных API в модуле X509:
- X509Cert: Класс для чтения и управления сертификатами x509.
- X509Req: Класс, используемый для создания запросов на сертификат x509.
- verify: Проверьте сертификат x509 через пару сертификатов CA.
- SslServer: класс, предоставляющий службы аутентификации на основе сертификатов x509.
- SslSocket: класс, который обеспечивает операции отправки и получения данных через сокеты для служб аутентификации на основе сертификатов x509.
Образец кода
Ниже приведен пример кода для чтения сертификата x509 и создания запроса на сертификат x509:
1
2
3
4
5
6
7
8
9
10
11
12const crypto = require('crypto');
// load the cert
const cert = crypto.loadCert('server.crt');
console.log(cert.subject);
// create x509 certificate request
let pky = crypto.PKey.from(private_pem);
let req = new crypto.X509Req("CN=localhost,O=fibjs", pky);
let derReq = req.der();
let pemReq = req.pem();
console.log(pemReq);
Приведенный выше пример кода считывает существующий сертификат x509 через класс X509Cert и выводит имя субъекта сертификата. В то же время пример кода также демонстрирует, как создать запрос сертификата x509 через X509Req и выводит информацию запроса в формате PEM.
Использование модуля X509
Создать самозаверяющий сертификат
Процесс создания самозаверяющего сертификата относительно прост.Как правило, вам необходимо выполнить следующие шаги:
- Создать PKey (закрытый ключ)
- Создать X509Req (запрос сертификата)
- Используйте X509Req для создания X509Cert (официального сертификата).
- сохранить сертификат
Выполнив эти действия, вы можете создать собственный сертификат x509 для использования в средах тестирования и разработки. Ниже приводится конкретная реализация:
Используйте следующий код для создания объекта PKey. Среди них метод from() может создать объект PKey через строку формата PEM или буфер.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Используйте следующий код для создания объекта X509Req. Среди них первый параметр X509Req — это различающееся имя субъекта (имя субъекта), а формат строки — ключ1=значение1,ключ2=значение2. Второй параметр — это созданный ранее объект PKey, используемый для подписи сертификата. Например:
1let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);
Используйте следующий код для создания X509Cert (официального сертификата). Конкретная операция заключается в вызове метода Sign() класса X509Req, который принимает три параметра: имя центра сертификации, объект PKey, используемый для подписи, и другую связанную информацию. Например, в следующем примере объект X509Req подписан самозаверяющим сертификатом, центром подписи является он сам, а сертификат действителен в течение 10 лет:
1
2
3
4
5const opt = {
notBefore: new Date(),
notAfter: new Date(new Date().getTime() + 10 * 365 * 24 * 60 * 60 * 1000)
};
const cert = xrq.sign("CN=localhost,O=fibjs", pky, opt);
Используйте следующий код, чтобы сохранить PKey и X509Cert в локальный файл. Поскольку сертификат сохраняется в формате PEM, вы можете использовать метод pem() для преобразования объекта сертификата в строку, а затем сохранить его непосредственно в файл:
1
2
3
4
5const fs = require('fs');
const ks = pky.pem(); // export pem format data of the private key
const cs = cert.pem(); // export pem format data of the cert
fs.writeFile('mycert.key', ks); // save the key
fs.writeFile('mycert.pem', cs); // save the cert
Приведенный выше код завершает весь процесс — от создания закрытого ключа до хранения самозаверяющего сертификата. С помощью этого сертификата можно тестировать и разрабатывать приложения, связанные с безопасностью.
Сертификат загрузки
Загрузка сертификата — важная операция при использовании сертификатов x509. Ниже описано, как загрузить файл сертификата, а также открытый и закрытый ключи.
Чтобы использовать сертификат x509, файл сертификата сначала необходимо прочитать в памяти и преобразовать в объект сертификата x509. Вот шаги по загрузке файла сертификата:
В программе fibjs JavaScript вы можете использовать соответствующий API модуля fs для чтения файлов. Например, используйте следующий код для чтения файла сертификата в формате PEM:
1
2const fs = require('fs');
const certData = fs.readFile('server.crt');
После чтения файла содержимое файла сертификата необходимо преобразовать в сертификат x509 с помощью объекта X509Cert:
1
2const crypto = require('crypto');
const cert = new crypto.X509Cert(certData);
После описанных выше шагов вы можете загрузить локальный файл сертификата x509. Вы также можете использовать crypto.loadCert для прямого чтения сертификата:
1
2const crypto = require('crypto');
const cert = crypto.loadCert('server.crt');
Сертификат x509 хранит открытый ключ и зашифрованную информацию о подписи. Поэтому при использовании сертификата вам необходимо проанализировать открытый ключ в сертификате, чтобы облегчить шифрование и дешифрование данных. Класс PKey может преобразовывать строки открытого/закрытого ключа в формате PEM в объекты открытого/закрытого ключа. Вы можете использовать следующий код для чтения строки открытого/закрытого ключа в формате PEM и создания объекта PKey:
1
2const privateKey = fs.readFile('private.pem'); // load the data from file
const pKey = crypto.PKey.from(privateKey); // load from pem format data
Или используйте crypto.loadPKey для прямого чтения:
1
2const crypto = require('crypto');
const pKey = crypto.loadPKey('private.pem');
После описанных выше шагов файл открытого/закрытого ключа можно преобразовать в объект PKey.
Разобрать сертификат
Сертификаты являются важным компонентом взаимодействия SSL/TLS, используемым для аутентификации и шифрования передачи данных. Теперь давайте научимся анализировать сертификат в fibjs.
Мы можем использовать класс X509Cert криптомодуля для создания объекта сертификата, прочитав файл сертификата в формате DER/PEM, а затем получить некоторую базовую информацию о сертификате, например, имя субъекта сертификата, имя эмитента, период действия и т. д. и т. д. .
Пример кода выглядит следующим образом:
1
2
3
4
5
6
7
8
9
10
11
12
13
14const crypto = require('crypto');
const cert = crypto.loadCert('path/to/cert.pem');
const subjectName = cert.subject;
const issuerName = cert.issuer;
const validFromDate = cert.notBefore;
const expirationDate = cert.notAfter;
const serialNumber = cert.serial;
console.log(`证书主题名称: ${subjectName}`);
console.log(`证书颁发者名称: ${issuerName}`);
console.log(`证书有效期: ${validFromDate.toLocaleString()} ~ ${expirationDate.toLocaleString()}`);
console.log(`证书序列号: ${serialNumber}`);
Когда нам нужно использовать сертификат, нам необходимо проверить легитимность сертификата. Главное — убедиться, что сертификат выдан доверенной организацией. Вы можете использовать метод проверки в X509Cert для проверки действительности сертификата.Обычным методом проверки является проверка цепочки сертификатов, чтобы убедиться, что сертификат выдан доверенным центром сертификации.
Пример кода выглядит следующим образом:
1
2
3
4
5
6
7
8
9const caCert = crypto.loadCert('path/to/ca.crt');
const verifyResult = cert.verify(caCert);
if (verifyResult !== 0) {
console.error('证书验证失败', verifyResult);
} else {
console.log('证书验证通过');
}
В этом примере кода мы сначала читаем указанный сертификат ЦС, генерируем объект X509Cert, а затем используем метод проверки для объекта сертификата, чтобы проверить сертификат, который необходимо проверить, и получить результат проверки. Вы можете определить, является ли сертификат легитимным, сравнив, равен ли результат проверки 0. Если результат проверки не равен 0, это означает, что проверка не удалась и использование сертификата следует прекратить.
Использовать сертификат
При использовании https-сервера необходимо убедиться, что используемый сертификат добавлен на сервер. Вот простой пример загрузки файлов сертификата и закрытого ключа через криптомодуль:
1
2
3
4
5
6
7
8
9
10const http = require("http");
const crypto = require("crypto");
const cert = crypto.loadCert("server.crt");
const key = crypto.loadPKey("server.key");
const server = new http.HttpsServer(cert, key, 8443, function(req) {
req.response.write(`Hello, fibjs!`);
});
server.start();
В приведенном выше примере мы загрузили файлы server.crt и server.key с помощью функций loadCert и loadPKey, затем создали службу с использованием объекта HttpsServer и запустили службу с загруженными файлами сертификата и ключей.
Примечания к модулю X509
Безопасность сертификата
Модуль X509 предоставляет такие функции, как создание и обработка сертификата.Должна быть гарантирована безопасность сертификата.Это требует особого внимания к следующим моментам:
- Безопасность закрытых ключей. Закрытый ключ является важной частью сертификата и должен строго защищаться. Во время использования сертификатов закрытый ключ должен храниться в максимально безопасном месте, а права доступа должны быть установлены соответствующим образом.
- Передача сертификатов безопасна. Во время обмена и использования сертификатов необходимо использовать безопасные методы передачи, чтобы предотвратить кражу или подделку сертификатов.
- Проверка сертификата безопасна. Проверка сертификата является важным шагом в обеспечении действительности и безопасности сертификата.Проверка должна проводиться в строгом соответствии с правилами проверки сертификатов, чтобы поддельные сертификаты не вводили пользователей в заблуждение.
Срок действия сертификата
Под сроком действия сертификата понимается период с даты выдачи сертификата до даты окончания срока действия сертификата. Срок действия сертификата ограничивает время использования сертификата.До истечения срока действия сертификата владелец сертификата может использовать сертификат, но после истечения срока действия сертификата сертификат теряет свою силу.
Поэтому перед использованием сертификата необходимо проверить срок действия сертификата, чтобы избежать использования сертификата с истекшим сроком действия. В то же время сертификат следует обновить как можно скорее до истечения срока его действия, чтобы обеспечить доступность сертификата.
Механизм доверия сертификатам
Механизм доверия сертификата является ключевым фактором, определяющим, может ли сертификат доверять клиенту или серверу. Обычно клиент или сервер доверяет только сертификатам, подписанным и признанным доверенным центром сертификации (CA).
Прежде чем использовать сертификат, необходимо определить проблемы доверия сертификата. Вы можете определить, заслуживает ли сертификат доверия, проверив орган, выдавший сертификат, отличительное имя субъекта сертификата и т. д.
Механизм продления сертификата
Механизм продления сертификата является важной частью обеспечения того, чтобы сертификат оставался действительным и безопасным. Обычно продление сертификата включает в себя два аспекта:
- Продление после окончания срока действия сертификата. По истечении срока действия сертификата вы должны повторно подать заявку на получение сертификата, подписать и проверить его в соответствии с соответствующими правилами, чтобы гарантировать действительность сертификата.
- Продление и продление сертификатов. Если во время использования сертификата вам потребуется расширить или обновить информацию о сертификате, вы можете сделать это, повторно подав заявку на сертификат, подписав и проверив его.
Подводя итог, модуль X509 обеспечивает создание, обработку и другие функции сертификатов и является важным звеном для обеспечения безопасности, надежности и действительности сертификатов. В процессе использования и управления сертификатами необходимо соблюдать соответствующие правила и требования для обеспечения действительности и безопасности сертификата.