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]