On 2007.07.23 at 09:11:18 -0000, Dmitry Zhukov wrote:

> Добрый день!
> Вот какой вопрос возник.
> На сайте хочу сделать авторизацию пользователей подобно WebMoney -
> через сертификаты.
> На сколько я понимаю, браузеры понимают сертификат в формате pkcs12.

Неправильно. Сертификаты бывают в формате X509. А pkcs12 это контейнер
такой, куда укладывается  секретный ключ и сертификат на открытый ключ к
нему. Например, для перетаскивания ключевой пары из одного браузера в
другой (на другой машине).

Можно годами работать с клиентскими сертификатами и ни разу не
воспользоваться pkcs12 (правда, это неправильно, ибо надо иметь бэкап).

В норме браузер генерирует ключевую пару (для чего в MSIE применяется
ActiveX элемент Xenroll, а в Mozilla есть javascript API) и формирует
заявку на сертификат в формате PKCS10. Эта заявка отправляется в центр
сертификации (обычно, посредством той же web-формы, которая вызывала
функцию генерации ключевой пары) и там генерируется сертификат, который
возвращается браузеру. Естественно, он при этом идет не в PKCS12, так
как у центра сертификации нет секретного ключа от открытого ключа
сертификата. На то он и секретный, чтобы никому кроме владельца не был
доступен. Так что сертификат отправляют либо непосредственно в X509,
либо в виде PKCS7 контейнера, содержащего кроме заказанного сертификата
еще и сертификат удостоверяющего центра и список отзыва сертификатов,
выданных раннее, а затем отозванных этим центром.



> Но как его сгенерировать?
> В Debian для сертификатов и ЭЦП нашел пока что 2 утилиты:
> gpg и openssl.
> Но никак не понял, можно ли с помощью этих программ сгенерировать эти
> сертификаты?

С помощью OpenSSL можно организовать полноценный центр сертификации.
Кроме того, можно ещё много чего, например создавать ключевые пары,
заявки на сертификацию, заворачивать секретный ключ и сертификат в
PKCS12 и т.д.


> И еще вопрос, браузер по умолчанию будет спрашивать пароль сертификата
> при первом использовании после перезагрузки системы?

Будет. Только не после перезагрузки а после перезапуска браузера.  

> И последний вопрос. Вот пользователь выбрал авторизацию по сертификату
> X.509 браузер автоматически отправит этот сертификат серверу? И как на

Отправит. В процессе TLS Handshake. Если сервер его об этом просил (для
чего нужно указать соответствующую директиву для соответствующего
модуля)

> сервере обработать этот сертификат?

Обработает его соответствующий модуль в web-сервере,
например mod_ssl, mod_nss или mod_gnutls. 

Для этого серверу должен быть доступен сертификат удостоверяющего
центра. Чтобы можно было проверить подпись под клиентским сертификатом.

И выставит соответствующие
переменные окружения, которые можно в своем скрипте проанализировать.
Подробности - в документации на соответствующий модуль.

Кстати, поскольку TLS handshake происходит до начала переговоров по
HTTP-протоколу, при работе с TLS возникают проблемы с использованием
name-based virtual хостов. Уже стандартизовано расширение TLS, которое
эти проблемы решает, и вроде уже даже браузерами поддерживается.
Но в OpenSSL оно поддерживается только в development-ветке 0.9.9, а
когда будет поддерживаться в mod_ssl для apache-мне пока неизвестно.

> Заранее всем большое спасибо за ответы!
> 


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Ответить