0Pricing
Security+ Academy · Урок

Сценарии применения PKI: HTTPS, S/MIME и подпись кода

Примените концепции PKI к реальным сценариям: защите веб-трафика, шифрованию электронной почты с помощью S/MIME и проверке целостности программного обеспечения сертификатами подписи кода.

«Сценарии применения PKI: HTTPS, S/MIME и подпись кода» — бесплатный урок Security+ Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Security+ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Security+ Academy содержит 4 уроков всего.

PKI в практических приложениях

Инфраструктура открытых key (PKI) — невидимая основа защищённых цифровых коммуникаций. Изученные Вами сертификаты и CA ежедневно применяются в десятках практических сценариев. На экзамене Security+ проверяется умение распознавать варианты применения PKI, понимать, какой тип сертификата подходит для каждого из них, и определять, какую защиту PKI обеспечивает в конкретном контексте. Три наиболее важные области применения на экзамене — HTTPS/TLS (безопасность веб-соединений), S/MIME (безопасность электронной почты) и подпись кода (целостность программного обеспечения).

HTTPS: PKI для защиты веб-соединений

HTTPS (HTTP поверх TLS) — наиболее заметный вариант применения PKI. Когда Вы подключаетесь к https://bank.com, браузер: (1) получает TLS-сертификат сервера, (2) проверяет, что цепочка сертификатов ведёт к доверенному корневому CA, (3) сопоставляет имя узла с полями SAN, (4) проверяет, что certificate не отозван, и (5) использует открытый key для обмена key по алгоритму Диффи — Хеллмана, чтобы установить зашифрованный сеанс. Значок замка в браузере означает, что все эти проверки пройдены. Отсутствующий или недействительный сертификат вызывает предупреждение браузера, которое не позволяет большинству пользователей продолжить работу.

# Check HTTPS certificate details
curl -v https://example.com 2>&1 | grep -A 10 'SSL certificate'

# Test TLS configuration quality
openssl s_client -connect example.com:443 -tls1_3 2>/dev/null | \
  grep -E 'Protocol|Cipher|Verify'
# Protocol: TLSv1.3
# Cipher: TLS_AES_256_GCM_SHA384
# Verify return code: 0 (ok)

S/MIME: PKI для защиты электронной почты

S/MIME (Secure/Multipurpose Internet Mail Extensions) использует сертификаты PKI для предоставления двух средств защиты электронной почты. Шифрование: отправитель шифрует текст письма открытым key получателя, поэтому расшифровать его может только получатель — это защищает конфиденциальность, даже если письмо перехвачено при передаче или хранится на скомпрометированном сервере. Цифровые подписи: отправитель подписывает письмо своим закрытым key, доказывая получателю, что письмо действительно отправлено этим отправителем и не изменялось, — это обеспечивает целостность и неотказуемость. Для S/MIME каждому пользователю требуется собственный сертификат, выданный CA.

# S/MIME email signing and encryption with OpenSSL
# Sign an email
openssl smime -sign -in email_body.txt -signer alice_cert.pem \
  -inkey alice_private.key -out signed_email.eml -outform PEM

# Encrypt an email (using Bob's public key/certificate)
openssl smime -encrypt -aes256 -in email_body.txt \
  -out encrypted_email.eml bob_cert.pem

# Bob decrypts with his private key
openssl smime -decrypt -in encrypted_email.eml \
  -recip bob_cert.pem -inkey bob_private.key

Подпись кода: PKI для обеспечения целостности программного обеспечения

Подпись кода использует PKI для цифровой подписи программного обеспечения — исполняемых файлов, сценариев, драйверов и установщиков, — чтобы пользователи могли проверить, что оно получено от доверенного издателя и не подвергалось изменениям. Поставщик программного обеспечения подписывает код закрытым key из сертификата для подписи кода, выданного доверенным CA. Когда пользователь запускает программу, OS проверяет подпись с помощью открытого key поставщика из цепочки сертификатов. Windows SmartScreen, Защитник macOS Gatekeeper и магазины приложений iOS/Android используют подпись кода для подтверждения происхождения программного обеспечения. Программное обеспечение без подписи может быть заблокировано или вызвать предупреждения системы безопасности.

# Verify code signing on Windows (PowerShell)
Get-AuthenticodeSignature -FilePath 'C:\Software\installer.exe' | Format-List
# Status: Valid
# SignerCertificate: [certificate details]
# TimeStamperCertificate: [timestamp CA details]

# On Linux/macOS, verify GPG signature of downloaded software
gpg --verify hashicorp_public.gpg terraform.zip.sig terraform.zip
# Good signature from 'HashiCorp Security (hashicorp.com/security)'

Аутентификация по сертификату клиента

Аутентификация по сертификату клиента (также называемая взаимным TLS или mTLS) расширяет стандартную модель TLS, требуя, чтобы клиент также предоставлял сертификат. В стандартном TLS сертификатом аутентифицируется только сервер; при mTLS обе стороны взаимно аутентифицируются. Этот механизм используется для: аутентификации VPN (смарт-карты или сертификаты клиента вместо паролей), аутентификации API (аутентификация между компьютерами, где клиентом является служба, а не человек) и доступа администраторов с привилегиями (администраторы должны использовать аппаратные токены со встроенными сертификатами).

# nginx configuration for mutual TLS (client certificate required)
# server {
#   listen 443 ssl;
#   ssl_certificate /path/to/server_cert.pem;
#   ssl_certificate_key /path/to/server_key.pem;
#   ssl_client_certificate /path/to/ca_cert.pem;
#   ssl_verify_client on;
#   ssl_verify_depth 2;
# }

# Test with a client certificate
curl --cert client_cert.pem --key client_key.pem https://api.example.com/

Проверка host key SSH

SSH использует криптографию с открытым key для двух целей: аутентификации сервера и аутентификации клиента. При аутентификации сервера, когда Вы впервые подключаетесь к серверу SSH, он предоставляет свой host key (открытый key). Ваш SSH-клиент сохраняет его в ~/.ssh/known_hosts. При последующих подключениях, если host key изменился, что может указывать на атаку MITM или переустановку сервера, SSH предупреждает Вас. При аутентификации клиента вместо паролей администраторы используют пары key: открытый key добавляется на сервер в authorized_keys, а закрытый key, который никогда не передаётся, подтверждает личность. Host key SSH отличаются от сертификатов PKI, но выполняют ту же функцию доверия.

# First-time SSH connection stores server host key
ssh user@server.example.com
# The authenticity of host 'server.example.com' can't be established.
# ED25519 key fingerprint is SHA256:abc123...
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

# Host key stored in: ~/.ssh/known_hosts
cat ~/.ssh/known_hosts | grep server.example.com

# If host key changes: 
# WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Подпись документов и проставление отметок времени

PKI позволяет использовать имеющую юридическую силу цифровую подпись документов во многих юрисдикциях. Подписи Adobe PDF, DocuSign и государственные системы электронной подписи используют сертификаты PKI для подписания документов. Важным дополнением к подписанию документов является проставление отметки времени: доверенный центр отметок времени (TSA) подписывает хеш документа, указывая доверенное время, и тем самым доказывает, что документ существовал в определённый момент. Отметка времени также необходима для подписи кода: без неё подписи кода становятся недействительными после истечения срока действия сертификата подписи, даже если программное обеспечение было распространено до этой даты.

Сертификаты устройств IoT

По мере распространения устройств IoT PKI предоставляет механизм масштабной аутентификации устройств. Во время производства каждое устройство получает уникальный сертификат — этот процесс называется подготовкой удостоверения устройства, — благодаря чему серверы могут аутентифицировать отдельные устройства по их сертификатам. Это позволяет, например, интеллектуальному счётчику подтверждать свою личность серверу энергоснабжающей компании, медицинскому устройству — проходить аутентификацию в сети больницы, а автопарку — аутентифицироваться во внутренней системе производителя. PKI для IoT должна обслуживать миллионы устройств с ограниченными ресурсами, поэтому всё чаще применяются сертификаты ECC: они имеют небольшой размер и быстро проверяются.

Аутентификация VPN с помощью сертификатов

Аутентификация VPN на основе сертификатов значительно безопаснее аутентификации VPN по паролю. Каждый пользователь или устройство VPN получает сертификат клиента от внутреннего CA организации. При подключении шлюз VPN проверяет сертификат клиента, убеждаясь, что он выдан доверенным внутренним CA, находится в пределах срока действия и не был отозван через CRL/OCSP. Когда сотрудник увольняется, отзыв его сертификата немедленно блокирует доступ к VPN — это надёжнее, чем надеяться, что он не сообщил свой пароль другим.

# OpenVPN client certificate configuration
# client
# remote vpn.example.com 1194
# proto udp
# ca ca.crt        <- CA certificate (trust anchor)
# cert client.crt  <- Client's certificate
# key client.key   <- Client's private key
# tls-auth ta.key 1
# cipher AES-256-GCM

# The VPN server verifies the client cert chain against ca.crt
# Revoked certs listed in CRL won't be accepted

Распространённые ошибки, связанные с сертификатами

Специалисты по безопасности должны уметь диагностировать распространённые ошибки сертификатов. Срок действия certificate истёк: дата notAfter уже прошла — обновите certificate. Несовпадение имени узла: SAN certificate не соответствует запрошенному имени узла — проверьте CN и SAN; может потребоваться сертификат с подстановочным знаком или сертификат с несколькими SAN. Самоподписанный сертификат: ни один CA не подтвердил этот certificate — добавьте его в локальное хранилище доверенных сертификатов или замените сертификатом, подписанным CA. Неполная цепочка: промежуточный сертификат CA не предоставлен сервером — настройте сервер на отправку полной цепочки. Certificate отозван: CRL или OCSP показывает отзыв — требуется немедленно отреагировать на компрометацию key.

# Diagnose certificate errors with openssl
openssl s_client -connect server.example.com:443 2>&1
# Common error messages:
# depth=0 ... error 10 at 0 depth lookup: certificate has expired
# depth=0 ... error 18: self-signed certificate
# depth=0 ... error 20: unable to get local issuer certificate (broken chain)
# depth=0 ... error 23: certificate revoked
# Verify return code: 0 (ok) = success

Сертификаты с подстановочным знаком и SAN

Для нескольких имён узлов используются два типа сертификатов. Сертификат с подстановочным знаком охватывает все поддомены первого уровня домена: *.example.com охватывает www.example.com, mail.example.com и api.example.com, но NOT sub.api.example.com (два уровня). Один сертификат и один закрытый key для всех служб — это удобно, но рискованно: при компрометации key будут затронуты все службы. Сертификат с несколькими SAN явно перечисляет несколько конкретных доменов в расширении SAN, например example.com, www.example.com и api.example.com. Такой подход более точен, но при добавлении новых доменов certificate необходимо обновлять.

Быстрая проверка

Проверьте своё понимание концепций CompTIA Security+ (SY0-701), рассмотренных в этом уроке.

Итоги урока

В этом уроке Вы узнали, что сертификаты HTTPS/TLS шифруют веб-трафик и аутентифицируют серверы; сертификаты S/MIME позволяют подписывать и шифровать электронную почту; сертификаты для подписи кода подтверждают целостность программного обеспечения и личность издателя; а сертификаты клиентов обеспечивают взаимную аутентификацию для VPN и API. Далее мы рассмотрим политики паролей и многофакторную аутентификацию.

Часто задаваемые вопросы

Урок «Сценарии применения PKI: HTTPS, S/MIME и подпись кода» бесплатный?

Да — полный текст урока «Сценарии применения PKI: HTTPS, S/MIME и подпись кода» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Security+ Academy, подпишись на CoddyKit PRO. Курс Security+ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сценарии применения PKI: HTTPS, S/MIME и подпись кода»?

Примените концепции PKI к реальным сценариям: защите веб-трафика, шифрованию электронной почты с помощью S/MIME и проверке целостности программного обеспечения сертификатами подписи кода. Ты практикуешь Security+ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Security+ Academy?

Предыдущий опыт не требуется. Security+ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Сценарии применения PKI: HTTPS, S/MIME и подпись кода»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Security+ Academy?

Да. Каждый урок Security+ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Центры сертификации и цепочки доверия
  2. Структура сертификата X.509
  3. Жизненный цикл и отзыв сертификатов
  4. Сценарии применения PKI: HTTPS, S/MIME и подпись кода
← Назад к Security+ Academy