У меня задача. Есть сервер и клиент, на котором стоит один браузер. У клиента есть есть сертификат, выданный Windows CA. Какой это должен быть сертификат и как организовать защищенное соединение?
Буду признателен за любую информацию.
Здравствуйте, Petr.com, Вы писали:
PC>У меня задача. Есть сервер и клиент, на котором стоит один браузер. У клиента есть есть сертификат, выданный Windows CA. Какой это должен быть сертификат и как организовать защищенное соединение? PC>Буду признателен за любую информацию.
В каком смысле организовать? Установить используя браузер? Ну например набрать в строке https://... Сертификат должен иметь соответствующее назначение — идентификация удаленного компьютера.
Если же речь идет об установлении защищенного соединения из своей программы, то можно по-разному, например через wininet либо по-взрослому, через SSPI, тут ниже было...
Здравствуйте, LuZappa, Вы писали:
LZ>Здравствуйте, Petr.com, Вы писали:
PC>>У меня задача. Есть сервер и клиент, на котором стоит один браузер. У клиента есть есть сертификат, выданный Windows CA. Какой это должен быть сертификат и как организовать защищенное соединение? PC>>Буду признателен за любую информацию.
LZ>В каком смысле организовать? Установить используя браузер? Ну например набрать в строке https://... Сертификат должен иметь соответствующее назначение — идентификация удаленного компьютера.
LZ>Если же речь идет об установлении защищенного соединения из своей программы, то можно по-разному, например через wininet либо по-взрослому, через SSPI, тут ниже было...
Боюсь вы меня неправильно поняли. В IE во вкладке Tools->Internet Options->Content->Certificates лежат сертификаты. На сервере IIS есть в свойствах сайта есть в Properties->Directory Security->Secure Communications->Edit есть пункт Require Client Certificates. Правильно ли я понимаю что, импортировав в браузер сертификат и указав сведения о нем на сервере, можно добиться того что сервер будет определять что с ним соединяется владелец определенного сертификата, а не кто-то иной?
[...]
PC>Боюсь вы меня неправильно поняли. В IE во вкладке Tools->Internet Options->Content->Certificates лежат сертификаты. На сервере IIS есть в свойствах сайта есть в Properties->Directory Security->Secure Communications->Edit есть пункт Require Client Certificates. Правильно ли я понимаю что, импортировав в браузер сертификат и указав сведения о нем на сервере, можно добиться того что сервер будет определять что с ним соединяется владелец определенного сертификата, а не кто-то иной?
Так я так и сказал, что не понял... Значит так, в случае IE это будет выглядеть примерно таким образом:
— сначала IE установит соединение и попробует установить SSL от имени анонима;
— сервер пришлет ему запрос на обновление контекста соединения, на который IE должен будет снова ответить анонимным контекстом или контекстом конкретного сертификата(в этом месте обычно у IE выскакивает окошко выбора сертификата);
— сервер получит новый контекст и в зависимости от его содержания и настроек(значения того самого флажка, маппинга и т.п.) сделает выводы о продолжении работы или разрыве соединения.
Вот если коротенько так. SSL может работать в разных режимах: только кодирование, идентификация одного или обоих участников соединения. Так что понимаете все правильно.
Здравствуйте, Petr.com, Вы писали:
PC>В IE во вкладке Tools->Internet Options->Content->Certificates лежат сертификаты. На сервере IIS есть в свойствах сайта есть в Properties->Directory Security->Secure Communications->Edit есть пункт Require Client Certificates. Правильно ли я понимаю что, импортировав в браузер сертификат и указав сведения о нем на сервере, можно добиться того что сервер будет определять что с ним соединяется владелец определенного сертификата, а не кто-то иной?
Так как IE использует системное хранилище сертификатов, клиентский сертификат должен быть импортирован в хранилище "MY"(Personal).
Здравствуйте, LuZappa, Вы писали:
LZ>Здравствуйте, Petr.com, Вы писали:
LZ>[...]
PC>>Боюсь вы меня неправильно поняли. В IE во вкладке Tools->Internet Options->Content->Certificates лежат сертификаты. На сервере IIS есть в свойствах сайта есть в Properties->Directory Security->Secure Communications->Edit есть пункт Require Client Certificates. Правильно ли я понимаю что, импортировав в браузер сертификат и указав сведения о нем на сервере, можно добиться того что сервер будет определять что с ним соединяется владелец определенного сертификата, а не кто-то иной?
LZ>Так я так и сказал, что не понял... Значит так, в случае IE это будет выглядеть примерно таким образом: LZ>- сначала IE установит соединение и попробует установить SSL от имени анонима; LZ>- сервер пришлет ему запрос на обновление контекста соединения, на который IE должен будет снова ответить анонимным контекстом или контекстом конкретного сертификата(в этом месте обычно у IE выскакивает окошко выбора сертификата); LZ>- сервер получит новый контекст и в зависимости от его содержания и настроек(значения того самого флажка, маппинга и т.п.) сделает выводы о продолжении работы или разрыве соединения.
LZ>Вот если коротенько так. SSL может работать в разных режимах: только кодирование, идентификация одного или обоих участников соединения. Так что понимаете все правильно.
Спасибо. Скажите мне пожалуйста как мне сделать такой сертификат и грамотно указать на него серверу. Если можете скажите также — можно ли сформировать такой сертификат программным путем (из собственного приложения). Буду благодарен за любую информацию либо ссылки на нее.
[...]
PC>Спасибо. Скажите мне пожалуйста как мне сделать такой сертификат и грамотно указать на него серверу. Если можете скажите также — можно ли сформировать такой сертификат программным путем (из собственного приложения). Буду благодарен за любую информацию либо ссылки на нее.
Ну например установить центр сертификации от MS у себя и получить у него сертификаты Программным путем можно все, но точно я не помню, смотрите CryptoAPI в MSDN.
Здравствуйте, Андрей Коростелев, Вы писали:
АК>Здравствуйте, Petr.com, Вы писали:
PC>>В IE во вкладке Tools->Internet Options->Content->Certificates лежат сертификаты. На сервере IIS есть в свойствах сайта есть в Properties->Directory Security->Secure Communications->Edit есть пункт Require Client Certificates. Правильно ли я понимаю что, импортировав в браузер сертификат и указав сведения о нем на сервере, можно добиться того что сервер будет определять что с ним соединяется владелец определенного сертификата, а не кто-то иной?
АК>Так как IE использует системное хранилище сертификатов, клиентский сертификат должен быть импортирован в хранилище "MY"(Personal).
Андрей, а не подскажите мне — как создать такой сертификат. Мне чем нужно пользоваться makecert или certreq и какие аргументы вводить?
Здравствуйте, Petr.com, Вы писали:
PC>Здравствуйте, Андрей Коростелев, Вы писали:
АК>>Здравствуйте, Petr.com, Вы писали:
PC>Андрей, а не подскажите мне — как создать такой сертификат. Мне чем нужно пользоваться makecert или certreq и какие аргументы вводить?
Сертификат должен быть выдан Certificate Authority, которому доверяет как клиент, так и сервер. По вопросу инструментария, мы пользовали platform-independent OpenSSL для генерации дерева сертификатов + platform-specific API для их импорта в хранилище.
Здравствуйте, Андрей Коростелев, Вы писали:
АК>Здравствуйте, Petr.com, Вы писали:
PC>>Здравствуйте, Андрей Коростелев, Вы писали:
АК>>>Здравствуйте, Petr.com, Вы писали:
PC>>Андрей, а не подскажите мне — как создать такой сертификат. Мне чем нужно пользоваться makecert или certreq и какие аргументы вводить?
АК>Сертификат должен быть выдан Certificate Authority, которому доверяет как клиент, так и сервер. По вопросу инструментария, мы пользовали platform-independent OpenSSL для генерации дерева сертификатов + platform-specific API для их импорта в хранилище.
Здравствуйте, Petr.com, Вы писали:
PC>Здравствуйте, Андрей Коростелев, Вы писали:
АК>>Сертификат должен быть выдан Certificate Authority, которому доверяет как клиент, так и сервер. По вопросу инструментария, мы пользовали platform-independent OpenSSL для генерации дерева сертификатов + platform-specific API для их импорта в хранилище.
PC>A где их можно взять?
OpenSSL — http://www.openssl.org, для Windows можно взять прекомпилированные бинарники в виде инсталлятора здесь. Доступаться к OpenSSL можно как через CLI, так и через С API.
Главные плюсы библиотеки — поддержка стандартов и кросс-платформенность.
Для работы с хранилищем сертификатов следует пользовать API специфичное для этого хранилища. Например, платформо-независимый Firefox таскает свое хранилищe за собой и доступается к нему через NSS API, платформенно-родные браузеры (IE в Windows, Safari в Mac OS X) используют системное хранилище сертификатов и, соответственно, пользуют системный API для доступа. Для Windows стандартный вариант — использовать Crypto API. Посмотри ф-и CertOpenStore, CertAddCertificateContextToStore итп.
Здравствуйте, LuZappa, Вы писали:
LZ>Здравствуйте, Petr.com, Вы писали:
LZ>[...]
PC>>Спасибо. Скажите мне пожалуйста как мне сделать такой сертификат и грамотно указать на него серверу. Если можете скажите также — можно ли сформировать такой сертификат программным путем (из собственного приложения). Буду благодарен за любую информацию либо ссылки на нее.
LZ>Ну например установить центр сертификации от MS у себя и получить у него сертификаты Программным путем можно все, но точно я не помню, смотрите CryptoAPI в MSDN.
Я создал сертификат через Центр Сертификации, но он не ставится в Personal. Я явно засовываю его туда через менеджер сертификатов, но он все равно находится в другой папке. Пожалуйста подскажите -почему?
Здравствуйте, Petr.com, Вы писали:
PC>Здравствуйте, LuZappa, Вы писали:
LZ>>Здравствуйте, Petr.com, Вы писали:
PC>Я создал сертификат через Центр Сертификации, но он не ставится в Personal. Я явно засовываю его туда через менеджер сертификатов, но он все равно находится в другой папке. Пожалуйста подскажите -почему?
В Personal по-хорошему должны идти сертификаты, для которых существует ассоцированный закрытый ключ. IE, например, такой сертификат даже не покажет (в отличие от центра сертификации). Поэтому при создании сертификата запакуй его вместе с закрытым ключом в какой-нибудь PKCS#12 (pfx) и тогда импортируй.
Здравствуйте, Андрей Коростелев, Вы писали:
АК>Здравствуйте, Petr.com, Вы писали:
PC>>Здравствуйте, LuZappa, Вы писали:
LZ>>>Здравствуйте, Petr.com, Вы писали:
PC>>Я создал сертификат через Центр Сертификации, но он не ставится в Personal. Я явно засовываю его туда через менеджер сертификатов, но он все равно находится в другой папке. Пожалуйста подскажите -почему?
АК>В Personal по-хорошему должны идти сертификаты, для которых существует ассоцированный закрытый ключ. IE, например, такой сертификат даже не покажет (в отличие от центра сертификации). Поэтому при создании сертификата запакуй его вместе с закрытым ключом в какой-нибудь PKCS#12 (pfx) и тогда импортируй.
Здравствуйте, Petr.com, Вы писали:
PC>Здравствуйте, Андрей Коростелев, Вы писали: АК>>Поэтому при создании сертификата запакуй его вместе с закрытым ключом в какой-нибудь PKCS#12 (pfx) и тогда импортируй.
PC>Андрей, подскажите пожалуйста, как это сделать?