Какво е самоподписан сертификат?

Самоподписаният сертификат е дигитален сертификат, който е подписан от своя собствен създател, а не от доверена Удостоверяваща служба (CA). За разлика от сертификатите издадени от CA като Let's Encrypt, DigiCert или Comodo, самоподписаните сертификати не се доверяват автоматично от браузъри и операционни системи.

Дигиталните сертификати използват криптография с публичен ключ, за да установят защитени, криптирани връзки между клиенти и сървъри. Те съдържат информация за притежателя на сертификата (субект), издавателя, периода на валидност и публичен ключ. Когато сървър представи сертификат, клиентът го проверява спрямо доверени корневи сертификати, за да гарантира, че връзката е защитена и автентична.

Как работи генериране на сертификати?

Процесът на генериране на сертификати включва няколко криптографски стъпки:

  1. Генериране на двойка ключове: Генерира се RSA двойка ключове (публичен и частен ключ). Частният ключ трябва да се пази в тайна, докато публичният ключ е вграден в сертификата.

  2. Създаване на сертификат: Създава се структура на сертификат, съдържаща информацията за субекта (Common Name, Organization, Country и т.н.), дати на валидност и публичен ключ.

  3. Самоподписване: Сертификатът е дигитално подписан с помощта на частния ключ и хеш алгоритъм (SHA-256, SHA-384 или SHA-512). Този подпис позволява на всеки, който има публичния ключ, да провери интегритета на сертификата.

  4. PEM кодиране: Сертификатът и частният ключ се кодират в PEM (Privacy-Enhanced Mail) формат, Base64-кодиран формат, който се поддържа широко от сървъри и приложения.

Описание на инструмента

Този инструмент генерира самоподписани X.509 сертификати и техните съответни частни ключове директно в браузъра ви. Никакви данни не се изпращат на сървър—всички криптографски операции се извършват локално с помощта на библиотеката node-forge. Можете да персонализирате полетата на субекта на сертификата, размера на ключа, периода на валидност и алгоритъма на подписване, за да отговарят на вашите специфични изисквания.

Примери

Основен localhost сертификат:

  • Common Name: localhost
  • Размер на ключа: 2048 бита
  • Валидност: 1 година
  • Алгоритъм: SHA-256

Сертификат за разработчик сървър:

  • Common Name: dev.myapp.local
  • Organization: My Company
  • Country: US
  • Размер на ключа: 2048 бита
  • Валидност: 2 години

Формат на изход (Сертификат):

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3QasEBBUAMEUxCzAJBgNV
...
-----END CERTIFICATE-----

Формат на изход (Частен ключ):

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA0Z3VS5JJcds3xfn/ygWyF8PbnGy...
...
-----END RSA PRIVATE KEY-----

Функции

  • Генериране в браузър: Всички криптографски операции се изпълняват локално в браузъра ви без комуникация със сървър
  • Конфигурируеми размери на ключове: Изберете от 1024, 2048, 3072 или 4096-битови RSA ключове за различни нива на сигурност
  • Множество алгоритми на подписване: Поддръжка за SHA-256, SHA-384 и SHA-512 хеш алгоритми
  • Пълни X.509 полета: Задайте Common Name, Organization, Organizational Unit, Country, State и Locality
  • Гъвкави периоди на валидност: Генерирайте сертификати валидни от 30 дни до 10 години

Обяснение на полетата на сертификата

Поле Описание Пример
Common Name (CN) Доменното име или хостнеймът, за който е сертификатът localhost, example.com
Organization (O) Юридическо име на организацията Acme Corporation
Organizational Unit (OU) Отдел или дивизия IT Department
Country (C) Двубуквен ISO код на държава US, GB, DE
State/Province (ST) Име на щат или провинция California
Locality (L) Град или град San Francisco

Препоръки за размер на ключа

  • 1024 бита: Не се препоръчва за производство; подходящо само за тестване
  • 2048 бита: Стандартно ниво на сигурност; препоръчано за повечето случаи на употреба
  • 3072 бита: Подобрена сигурност; добро за чувствителни среди за разработка
  • 4096 бита: Максимална сигурност; по-бавно генериране, но най-висока защита

Случаи на употреба

  1. Локални разработчик сървъри: Създайте HTTPS сертификати за localhost, за да тествате защитени функции като Service Workers, Geolocation API или WebRTC, които изискват защитени контексти

  2. Вътрешни тестови среди: Генерирайте сертификати за staging сървъри и QA среди, където CA-подписани сертификати не са необходими

  3. Docker и контейнеризирани приложения: Защитена комуникация между контейнери в разработка или изолирани мрежи

  4. Разработка и тестване на API: Активирайте HTTPS за локални API сървъри, за да тествате OAuth потоци, защитени webhooks и certificate pinning

  5. Обучение и образование: Разберете как работят SSL/TLS сертификатите, като генерирате и инспектирате собствени сертификати

Инструкции за инсталация

След генериране на сертификата ви, ще трябва да конфигурирате сървъра си и потенциално да доверите сертификата:

За Node.js/Express:

const https = require("https");
const fs = require("fs");

const options = {
  key: fs.readFileSync("private-key.pem"),
  cert: fs.readFileSync("certificate.pem"),
};

https.createServer(options, app).listen(443);

За nginx:

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/private-key.pem;
}

Доверие на сертификата (macOS):

  1. Отворете Keychain Access
  2. Импортирайте файла certificate.pem
  3. Двойно щракнете на сертификата и задайте "Trust" на "Always Trust"

Доверие на сертификата (Windows):

  1. Двойно щракнете на файла certificate.pem
  2. Щракнете на "Install Certificate"
  3. Изберете "Local Machine" и поставете в "Trusted Root Certification Authorities"

Съображения за сигурност

  • Никога не използвайте самоподписани сертификати в производство за публично достъпни уебсайтове
  • Пазете вашия частен ключ защитен—всеки, който има достъп, може да се преструва на вашия сървър
  • Самоподписаните сертификати ще показват предупреждения в браузъра, тъй като не се доверяват по подразбиране
  • Използвайте кратки периоди на валидност за разработка, за да насърчите ротация на сертификати
  • Помислете за използване на инструменти като mkcert за разработка, ако имате нужда от доверени локални сертификати