Взаимная SSL-аутентификация - стороны клиента и сервера.Питон -> Джанго / Витая / Торнадо - PullRequest
3 голосов
/ 23 марта 2012

Я создаю приложение на python, где клиентская сторона будет запрашивать XML-страницы с сервера (также работающего с python).

Я хотел бы сделать что-то на линии системы управления конфигурацией марионеток. Кукольный работает следующим образом:

1) Если клиент запускается в первый раз, он генерирует запрос на подпись сертификата и закрытый ключ. Первый - это сертификат x509 с собственной подписью.
2) Клиент подключается к мастеру (в это время клиент не аутентифицирован) и отправляет свой CSR, он также получает сертификат CA и CRL в ответ.
3) Мастер хранит локально CSR
4) Администратор проверяет CSR и может в конечном итоге подписать его (этот процесс может быть автоматизирован с помощью автоподписи). Я настоятельно рекомендую проверить отпечаток сертификата на этом этапе.
5) Клиент ждет своего подписанного сертификата, который мастер в конечном итоге отправляет.
6) Все последующие сообщения будут использовать этот сертификат клиента. И мастер, и клиент будут аутентифицировать друг друга, используя один и тот же CA.
(от http://www.masterzen.fr/2010/11/14/puppet-ssl-explained/)

Основные вещи, которые я не знаю, как это сделать:
- Какие библиотеки лучше всего использовать?
- что использовать на стороне сервера? Сможет ли Django, стоящий за apache / nginx, подписать сертификат при первом запуске и выполнить аутентификацию с использованием сертификатов после этого, или мне нужно будет использовать что-то вроде витой на внешнем интерфейсе?
- Лучший способ отправить CSR - это POST на сервер?
- Кто-нибудь знает, есть ли примеры кода, которые охватывали бы стороны клиента и сервера?
- Есть ли другой способ установить доверенное соединение между клиентом / сервером без итерации человека (что является лучшим методом для аутентификации между веб-сервисами)?

1 Ответ

1 голос
/ 23 марта 2012

В M2Crypto есть оболочка Python, называемая pki , которая делает создание CSR и таких простых.Вы должны быть в состоянии использовать Django для этого, я не вижу причин, по которым вам понадобится Twisted.

Вы могли бы также отправить CSR с POST, да, там нет ничего конфиденциального - в этом суть.

Пакет pki, с которым я связался, содержит довольно подробные строки документации, которые должны помочь вам.

Я не думаю, что вы сможете установить «доверенное соединение» без любого вмешательство человека.Доверие - это человеческое понятие, и поэтому вам нужно будет утвердить хотя бы первый запрос на подключение, и, надеюсь, вы проверите, действительно ли тот, кто пытается подключиться, действительно авторизован.этот контекст означает, что нужно позвонить человеку и спросить его, кто он и почему он пытается подключиться к вашему сервису, и попросить его подтвердить отпечаток пальца закрытого ключа, используемого для CSR.

...