LIMB
Вход Регистрация

тема

Защита от MITM с TLS 1.3 и mTLS

fsb · · 0 ответов · 814 просмотров

Защита от MITM с TLS 1.3 и mTLS — пошагово

1. Устанавливаем инструменты

На Linux (Ubuntu/Debian):

sudo apt update
sudo apt install openssl nginx -y


---

2. Создаём свой корневой сертификат (CA)

# Генерация ключа CA
openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:4096

# Самоподписанный сертификат CA
openssl req -x509 -new -key ca.key -sha256 -days 3650 -out ca.crt \
  -subj "/C=RU/ST=Moscow/L=Moscow/O=MyOrg/OU=Security/CN=MyRootCA"


---

3. Создаём сертификат сервера

# Приватный ключ сервера
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048

# Запрос на сертификат
openssl req -new -key server.key -out server.csr \
  -subj "/C=RU/ST=Moscow/L=Moscow/O=MyOrg/OU=IT/CN=server.local"

# Подписываем у CA
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -out server.crt -days 365 -sha256


---

4. Создаём сертификат клиента

# Приватный ключ клиента
openssl genpkey -algorithm RSA -out client.key -pkeyopt rsa_keygen_bits:2048

# Запрос на сертификат
openssl req -new -key client.key -out client.csr \
  -subj "/C=RU/ST=Moscow/L=Moscow/O=MyOrg/OU=Client/CN=myclient"

# Подписываем у CA
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key \
  -out client.crt -days 365 -sha256


---

5. Настраиваем Nginx на TLS 1.3 + mTLS

Редактируем /etc/nginx/sites-available/default:

server {
    listen 443 ssl http2;
    server_name server.local;

    ssl_certificate /etc/nginx/server.crt;
    ssl_certificate_key /etc/nginx/server.key;

    ssl_protocols TLSv1.3;
    ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384;

    # Взаимная аутентификация
    ssl_client_certificate /etc/nginx/ca.crt;
    ssl_verify_client on;

    location / {
        root /var/www/html;
        index index.html;
    }
}

Применяем:

sudo nginx -t
sudo systemctl restart nginx

---

6. Проверяем подключение

:small_blue_diamond: С клиентским сертификатом:

curl -vk --key client.key --cert client.crt https://server.local/

:small_blue_diamond: Без сертификата:


:point_right: Подключение будет отклонено (MITM не пройдёт, так как нет клиентского сертификата).


---

7. Проверяем Forward Secrecy

openssl s_client -connect server.local:443 -tls1_3

В поле Cipher будет указано ECDHE и AES_128_GCM, значит сессия использует динамический ключ.
👍47 👏8 🤔9 💯6

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.