Re: PKCS12 как?
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-мне пока неизвестно.
> Заранее всем большое спасибо за ответы!
>
Reply to: