Минимальное количество понятий, необходимых для понимания того, как работает HTTPS

Для некоторых профессий наличие сертификата, например медицинского диплома, необходимо, чтобы гарантировать, что человек имеет надлежащую подготовку для выполнения работы. В этой ситуации возникает вопрос: как проверить, есть ли у человека учетные данные?

Что такое HTTPS?

Когда компания хочет подтвердить, есть ли у кандидата на работу полномочия, которые, по ее словам, у него есть, она может нанять «надежное» агентство по проверке биографических данных, чтобы связаться с учреждениями, имеющими полномочия претендента на работу, чтобы убедиться, что они имеют то, что они делают. Другими словами, доверенная третья сторона подтверждает отношения.

Как только соискатель становится сотрудником компании, он обычно получает доступ к учетным записям, предоставляемым компанией, например к адресу электронной почты, что позволяет ему отправлять личные сообщения другим членам компании.

Проверка и отправка личных данных через общедоступный Интернет на веб-серверы (например, amazon.com) происходит аналогичным образом. Клиенты, например веб-браузеры, такие как Firefox или Google Chrome, проверяют, что они подключены к законному веб-серверу через доверенную третью сторону, известную как центр сертификации (ЦС), который может доказать, что веб-сервер, с которым взаимодействует браузер, является на самом деле, кто это говорит.

После проверки клиент и браузер могут обмениваться личной информацией, например данными для входа, друг с другом, поскольку они установили отношения.

Таким образом, безопасный протокол передачи гипертекста (HTTPS) — это протокол, с помощью которого клиент, например. браузер, может:

  • Убедитесь, что он обращается к правильному веб-серверу через ЦС.
  • Отправляйте защищенные данные между веб-сервером и браузером с помощью шифрования

Мы рассмотрим детали этого протокола в оставшейся части этой статьи.

Методы шифрования

Чтобы понять, как работает HTTPS, мы сначала должны понять несколько методов шифрования, поскольку это основные инструменты HTTPS. Я не буду углубляться в каждую тему, но приведу базовое резюме, чтобы вы могли понять общие понятия.

Симметричное шифрование

Сообщение, файл и т. д. шифруются с помощью закрытого ключа. Этот же закрытый ключ расшифровывает сообщение.

  1. Алиса и Боб имеют общий секретный ключ.
  2. Алиса может использовать секретный ключ для шифрования файла.
  3. Боб может расшифровать этот зашифрованный файл с помощью того же секретного ключа, чтобы вернуть исходное сообщение.
### Symmetric Encryption with GPG ###
### Adapted from https://www.baeldung.com/linux/encrypt-decrypt-files
# create a random file
echo hi > symmetric-example.txt
# encrypt it with the phrase "mysecret"
gpg --batch \
    --output symmetric-example.txt.gpg \
    --passphrase mysecret \
    --symmetric symmetric-example.txt
# decrypt it with the phrase
gpg --batch \
    --output symmetric-example-out.txt \
    --passphrase mysecret \
    --decrypt symmetric-example.txt.gpg
# check the differences
diff symmetric-example.txt symmetric-example.out.txt

Асимметричное шифрование

Пара ключей включает открытый и закрытый ключи. Открытый ключ может шифровать сообщения, которые можно расшифровать только с помощью закрытого ключа.

  1. Алиса генерирует пару открытого и закрытого ключей.
  2. Алиса делится своим открытым ключом с Бобом, который он использует для шифрования сообщения. Примечание. Боб не может расшифровать сообщение с помощью открытого ключа Алисы.
  3. Зашифрованное сообщение расшифровывается обратно в исходное сообщение с помощью закрытого ключа Алисы.
### Asymmetric Encryption with GPG ###
### Adapted from https://www.baeldung.com/linux/encrypt-decrypt-files
# generate the key pair as a key-ring
gpg --batch --generate-key <<EOF
    Key-Type: RSA
    Key-Length: 3072
    Subkey-Type: RSA
    Subkey-Length: 3072
    Name-Real: Alice
    Name-Email: [email protected]
    Passphrase: alicerocks
    Expire-Date: 30
    %pubring alicepubring.kbx
    %commit
EOF
# Create a shareable public key, alicepubkey.gpg
gpg --keyring ./alicepubring.kbx \
    --no-default-keyring \
    --armor \
    --output alicepubkey.gpg \
    --export
# Import alice's pubkey into bob's keyring file
gpg --keyring ./bobpubring.kbx \
    --no-default-keyring \
    --import alicepubkey.gpg
# Encrypt a file with alice's pubkey
echo "Hi Alice!" > alice.txt
gpg --keyring ./bobpubring.kbx \
    --nodefault-keyring \
    --encrypt \
    --recipient "[email protected]" alice.txt
# Decrypt the file with alice's private key
gpg --keyring ./alicepubring.kbx \
    --no-default-keyring \
    --pinentry-mode=loopback \
    --passphrase "alicerocks" \
    --output alice-decrypted.txt \
    --decrypt alice.txt.gpg 
# Compare the messages
diff -s alice.txt alice-decrypted.txt

Цифровые сертификаты

Цифровой сертификат — это файл идентификации, который выдает «доверенная» третья сторона (для HTTPS это сертификат x.509). Цифровые сертификаты похожи на паспорта; они содержат идентификационную и сертификационную информацию об объекте и имеют возможность проверить правильность этой информации через сертифицирующий орган.

В случае паспорта удостоверяющим органом является государственное учреждение (например, Государственный департамент США), а юридическим лицом является физическое лицо. Идентификационная информация в паспорте включает имя, фамилию, дату рождения и т. д., которые таможенный и пограничный офицер может затем проверить в учреждении.

Для веб-сайтов удостоверяющим органом являются организации типа Entrust, а объектом является веб-сервер. Сертификат включает информацию о веб-сервере, такую ​​как его обычное имя (т. е. доменное имя), организацию, страну и т. д., которые может проверить браузер.

Программно цифровой сертификат имеет следующий интерфейс:

DigitalCertificate:
  .public_key            # attribute, webserver pubkey
  .identity_information  # attribute, webserver info
  .issuing_CA            # attribute, CA info
  .verify(CA_public_key) # method, verify it's signed by CA

Как работает HTTPS?

HTTPS использует симметричные, асимметричные и цифровые сертификаты для обеспечения безопасной связи по сети. На следующей диаграмме показан поток данных с момента, когда веб-сервер хочет зарегистрироваться в ЦС (шаги 1–4), до момента, когда веб-сервер и браузер (т. е. клиент) могут безопасно передавать данные друг другу (шаги 5–9):

  1. Веб-сервер генерирует запрос на подпись сертификата (CSR), который включает идентификационную информацию о веб-сервере и его закрытый ключ. Он отправляет CSR в ЦС.
  2. ЦС, одобрив CSR, подписывает CSR, тем самым преобразовывая его в цифровой сертификат.
  3. Центр сертификации отправляет сертификат обратно на веб-сервер.
  4. По запросу GET к веб-серверу от клиента, например, веб-браузера, веб-сервер отправляет цифровой сертификат из шага 3 в браузер.
  5. Получив сертификат, браузер проверяет, что сертификат был подписан известным и доверенным ЦС, используя открытый ключ ЦС. Примечание. В браузеры встроена база данных открытых ключей ЦС.
  6. После проверки браузер генерирует симметричный сеансовый ключ для зашифрованной связи между веб-сервером и браузером. Этот симметричный сеансовый ключ шифруется с использованием открытого ключа веб-сервера из сертификата и отправляется обратно на веб-сервер.
  7. Веб-сервер получает от клиента сообщение, содержащее симметричный сеансовый ключ, и расшифровывает симметричный сеансовый ключ, используя свой закрытый ключ.
  8. Веб-сервер теперь может симметрично шифровать сообщения, такие как HTML-файлы и т. д., и отправлять зашифрованные сообщения через Интернет.
  9. Как только клиент получает зашифрованное сообщение, он может расшифровать его и просмотреть сообщение.

Заключение

Вам может быть интересно, почему HTTPS использует как асимметричное, так и симметричное шифрование, если весь этот процесс можно было бы удовлетворить только асимметричным шифрованием? Это потому, что симметричное шифрование быстрее по сравнению с асимметричным шифрованием. После завершения проверки между клиентом и сервером нет необходимости в медленной асимметричной связи между клиентом и сервером.