Прежде всего - вы говорите о двух совершенно разных способах использования сертификата. Если вы используете подписанный сервером сертификат от ЦС, то пользователь будет проходить аутентификацию перед загрузкой страницы (при создании безопасного канала), и вы будете знать, кто они. Другой способ, который вы упомянули - сохранение пользовательского сертификата в UserProfile - вы имеете в виду сохранение частного сертификата ?? Это далеко от безопасного подхода. Что именно вы ожидаете сохранить в профиле пользователя, который будет служить вам для аутентификации? И если вы читаете эту вещь из UserProfile, то как пользователь будет на самом деле аутентифицироваться? Используя имя пользователя + пароль? Так какова цель сертификата в профиле?
Я бы не стал использовать SSL в Django. Более лучший подход для решения этой проблемы - сохранить все содержимое SSL в Apache, используя впоследствии HTTP-заголовок. Вы выдаете сертификат пользователю, он добавляет его в свои браузеры, а при подключении к сайту - Django проверяет сертификат и извлекает имя пользователя, связанное с запросом. Затем передайте это имя пользователя в качестве заголовка HTTP приложению Django, например, HTTP_USER_NAME = some_user. Также убедитесь, что Apache удаляет все такие заголовки из запроса клиента. Тогда ваше приложение Django не должно делать ничего другого - оно будет полагаться, что Apache уже выполнил работу AUTH и получит имя пользователя. (Это нормально работает с Nginx, и хотя я не использовал его в Apache - я не вижу причины, по которой это тоже не должно быть возможно, возможно, вам понадобится какой-то дополнительный мод apache для установки).
Таким образом, единственным недостатком этого подхода является то, что вам, вероятно, придется выполнить некоторую ручную работу с подписанием / отправкой сертификатов пользователю, но если это не часто повторяющаяся операция, кажется, все в порядке в обмен на ее безопасность. предлагает.
ОБНОВЛЕНИЕ : Вот пример того, как выполнить аутентификацию SSL в Apache:
http://www.zeitoun.net/articles/client-certificate-x509-authentication-behind-reverse-proxy/start
и для nginx:
http://forum.nginx.org/read.php?5,226319