Шифрование данных в Puppet при сетевом взаимодействии работает на основе двустороннего TLS-шифрования. 1 У сервера и клиента есть свои закрытые ключи и соответствующие им сертификаты. 1 Обычно сервер выпускает сертификаты для клиентов, но возможно использование и внешнего CA. 1
Процесс шифрования включает несколько этапов: 2
- Клиент и сервер находят лучшую схему шифрования и MAC из общего списка, поддерживаемого обоими. 2
- Сервер отправляет свой сертификат и любые промежуточные CA, которые могут понадобиться клиенту. 2
- Сервер может запросить сертификат клиента. 2 Клиент отправляет свой сертификат. 2
- Оба участника проверяют сертификаты (против общего CA, из CRL и т. д.). 2
- Генерируются ключи сессии. 2 Клиент генерирует случайное число, шифрует его открытым ключом сервера. 2 Только сервер может расшифровать его. 2
- Из этого случайного числа оба участника генерируют симметричный ключ, который будет использоваться для шифрования и дешифрования. 2
- Клиент может отправить подписанное сообщение о предыдущем сообщении рукопожатия. 2 Так сервер может проверить, что клиент знает свой закрытый ключ (эта фаза необязательна). 2
- После этого каждое сообщение шифруется сгенерированными ключами сессии с помощью симметричного шифра и проверяется с помощью согласованного MAC. 2
Для защиты коммуникации клиент-сервер в Puppet используется двунаправленный SSL. 3