Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

4 Страницы«<234
Опции
К последнему сообщению К первому непрочитанному
Offline cross  
#31 Оставлено : 6 ноября 2015 г. 18:04:02(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Для некоторого вашего случая с валидатой может вполне быть и лучше плагинов. Опишу вам несколько еще вещей о которых надо будет задуматься.

1) Если все таки портировать на другие платформы то Linux nestat показывает PID только у соединений от своего пользователя. Для других пользователей нужны права админа.
2) Как вы понимаете вам придется ограничить размер POST запросов и ответов на них. А что делать если нужно подписать больше? Или зашифровать большой файл в потоковом режиме?
3) Одним url в post для подписи тут явно не обойдется. Нужно ведь как то и ключ выбрать, и их перечислить, проверить подпись и ..... Все приведет к тому что придется делать API на уровне JS. Иначе пользоваться всем этим набором URL будет не сильно удобно.
4) Как только будет плодится количество url из 3 пункта вы скорее всего придете к тому что передавать надо не 1 параметр, а иногда и по 5. И что для этого скорее всего пользовать JSON удобнее чем просто POST параметры.
5) Если это будет сервис то как кидать окошко с предупреждением о доступе к ключам. Кто его будет кидать и в какое место )) (это в общем случае крайне не тривиальная задача)
6) А если захочется callback к пользователю?


После решения всех этих вопросов с большой вероятностью вы придете в аналог Native Message Host от Google. Только управлять запусками и сервисом вам нужно будет.

Надеюсь замечания будут полезными ))

Отредактировано пользователем 6 ноября 2015 г. 18:06:10(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
thanks 1 пользователь поблагодарил Анатолий Беляев за этот пост.
dizel3d оставлено 07.11.2015(UTC)
Offline dizel3d  
#32 Оставлено : 7 ноября 2015 г. 0:47:14(UTC)
dizel3d

Статус: Участник

Группы: Участники
Зарегистрирован: 27.10.2015(UTC)
Сообщений: 17
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 8 раз
Спасибо!

Автор: cross Перейти к цитате

1) Если все таки портировать на другие платформы то Linux nestat показывает PID только у соединений от своего пользователя. Для других пользователей нужны права админа.

В простой архитектуре этого достаточно. В усложненной такая потребность возникает в целях информирования пользователя о неполадках, но в принципе тоже достаточно.

Автор: cross Перейти к цитате

2) Как вы понимаете вам придется ограничить размер POST запросов и ответов на них. А что делать если нужно подписать больше? Или зашифровать большой файл в потоковом режиме?

multipart-запросы. Позволяют отправить большой файл, потоковая обработка доступна.
И никаких плясок с бинарными данными, как в плагинах, работаете непосредственно с File или ArrayBuffer, а не строками base64.
А почему придется ограничить размер POST-запросов и ответов?

Автор: cross Перейти к цитате

3) Одним url в post для подписи тут явно не обойдется. Нужно ведь как то и ключ выбрать, и их перечислить, проверить подпись и ..... Все приведет к тому что придется делать API на уровне JS. Иначе пользоваться всем этим набором URL будет не сильно удобно.

Согласен.

Автор: cross Перейти к цитате

4) Как только будет плодится количество url из 3 пункта вы скорее всего придете к тому что передавать надо не 1 параметр, а иногда и по 5. И что для этого скорее всего пользовать JSON удобнее чем просто POST параметры.

Согласен.

Автор: cross Перейти к цитате

5) Если это будет сервис то как кидать окошко с предупреждением о доступе к ключам. Кто его будет кидать и в какое место )) (это в общем случае крайне не тривиальная задача)

Нет, как описано в документе, CS это не сервис ОС, а приложение. Вопрос снят? (Или я не правильно вас понял?)

Автор: cross Перейти к цитате

6) А если захочется callback к пользователю?

Тут крайне богатый арсенал. Из наиболее популярных websocket и long-polling. Но вообще даже в IE6 можно это сделать.

Автор: cross Перейти к цитате

После решения всех этих вопросов с большой вероятностью вы придете в аналог Native Message Host от Google.

Native Message Host работает только в Chrome. Предлагаемое нами решение работает во всех браузерах.

Автор: cross Перейти к цитате

Только управлять запусками и сервисом вам нужно будет.

Как описано в документе, CS запускается автоматически в фоне. Сделать приложение автозапускаемым можно без прав администратора, примеры: Dropbox, Yandex Disk, Skype, uTorrent.

Еще минусы плагина, которых нет, в CS:
1. На установку ActiveX требуются права администратора и настройка доверенных узлов.
2. Плагинов много: ActiveX, NPAPI, Native Message Host. Поэтому нужен сложный инсталлятор, а CS устанавливать не требуется.
3. На наш взгляд, разработка/поддержка плагинов экономически дороже, чем CS.
4. У вас нет плагина для Edge. А будет?
5. Firefox планируют убрать NPAPI. Что будете делать?

Автор: cross Перейти к цитате

Для некоторого вашего случая с валидатой может вполне быть и лучше плагинов.

Вы все еще считаете, что это решение не лучше плагинов в глобальном смысле? Почему?

Отредактировано пользователем 7 ноября 2015 г. 17:48:00(UTC)  | Причина: Не указана

Offline cross  
#33 Оставлено : 10 ноября 2015 г. 11:10:09(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Цитата:
multipart-запросы. Позволяют отправить большой файл, потоковая обработка доступна.
И никаких плясок с бинарными данными, как в плагинах, работаете непосредственно с File или ArrayBuffer, а не строками base64.
А почему придется ограничить размер POST-запросов и ответов?

Что бы приложение в ООM не ушло. Не зря же в их везде ограничивают )). Технически это все реализуемо. Я просто хотел обратить внимание что при разработке API обязательно надо на это закладываться. Как на потоковую передачу данных из страницы в ваш сервис так и обратно. Это добавит некоторое количество трудозатрат.

Цитата:
Нет, как описано в документе, CS это не сервис ОС, а приложение. Вопрос снят? (Или я не правильно вас понял?)

Типичная проблема показа окошка за браузером. Модальность окна относительно окна браузера. (Справедливости ради в плагинах та же беда)

Цитата:
Тут крайне богатый арсенал. Из наиболее популярных websocket и long-polling. Но вообще даже в IE6 можно это сделать.

Можно конечно )), но это уже немного больше чем просто http.

Цитата:
Native Message Host работает только в Chrome. Предлагаемое нами решение работает во всех браузерах.

Chrome + Opera работает с Native Message. Есть подозрение что FF тоже к этому придет.

Цитата:
Еще минусы плагина, которых нет, в CS:
1. На установку ActiveX требуются права администратора и настройка доверенных узлов.
2. Плагинов много: ActiveX, NPAPI, Native Message Host. Поэтому нужен сложный инсталлятор, а CS устанавливать не требуется.
3. На наш взгляд, разработка/поддержка плагинов экономически дороже, чем CS.
4. У вас нет плагина для Edge. А будет?
5. Firefox планируют убрать NPAPI. Что будете делать?

1) Да, требует. Но это не является проблемой. Пока за нашу практику ни кто не жаловался на это.
2) Полностью согласен.
3) Разработка не думаю что дешевле выйдет в итоге, поддержка скорее всего да.
4-5) FF скорее всего тоже к Native Message придет. Edge пока не знаем...


Цитата:
Вы все еще считаете, что это решение не лучше плагинов в глобальном смысле? Почему?

На текущий момент однозначного ответа у меня нет. Дьявол в деталях...
На момент когда мы делали плагин был только NPAPI и в целом он работал более менее. Сейчас другая ситуация. Очень вероятно что через годик все браузеры придут к Native Message Host и тогда с плагинами станет чуть проще. Но ваш опыт будет крайне интересным и познавательным.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
thanks 2 пользователей поблагодарили Анатолий Беляев за этот пост.
dizel3d оставлено 10.11.2015(UTC), Андрей * оставлено 10.11.2015(UTC)
Offline Павел Смирнов  
#34 Оставлено : 10 ноября 2015 г. 11:41:27(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Автор: dizel3d Перейти к цитате
Любое из них, на наш (IT Global) взгляд, может стать лучшей альтернативой браузерным плагинам. Согласны?

Ваши варианты сильно проигрывают плагинам в юзабилити.

Насчёт экономической стороны вопроса. На мой взгляд, разработка вашего варианта будет дороже. Поддержка, наверно, дешевле.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ve2  
#35 Оставлено : 12 ноября 2015 г. 21:59:44(UTC)
ve2

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.05.2015(UTC)
Сообщений: 32
Российская Федерация

Поблагодарили: 3 раз в 3 постах
Очень интересует данная тема.

Сейчас используем плагин, но в свете недавнего отказа Chrome от NPAPI,
грядущего отказа в Firefox и полного отсутствия плагинов в Edge очень хочется
качественное альтернативное решение. Очень устали от поддержки плагина.

Пытался сделать что-то подобное самостоятельно на C++, но не хватило знания языка.
Однако появился некоторый опыт, которым хочу поделится:

Большинство web-сервисов, использующих цифровую подпись работают по протоколу https.
Ни один браузер не позволит сделать кроссдоменный ajax запрос по протоколу http,
если сама вызывающая страница получена по https. Таким образом, локальный web сервер
должен работать по протоколу https. Это посложнее чем http. Но есть готовые способы.
На c++ получалось использовать библиотеку от mongoose. А на GO, например, https сервер
вообще реализуется в несколько строк.

Для работы https серверу требуется серверный сертификат, выданный
на доменное имя localhost центром сертификации, который есть в браузере
(системе). Иначе браузеры будут ругаться на недостоверное соединение. Можно
сделать самоподписанный CA сертификат, подписать им сертификат на localhost и
загрузить в хранилище доверенных корневых сертификатов. Как иначе, не придумал.
Но если это потребуется делать от конечного пользователя, то опять проблемы с поддержкой.
Поэтому нужно либо где-то взять настоящий сертификат на localhost, либо сделать чтобы
добавление корневого происходило прозрачно для пользователя, а здесь появляется простор
для злоупотреблений. Кроме того, если разные web-сервисы захотят воспользоваться одним
и тем же локальным сервером для подписи своих документов и будут давать пользователям
свои localhost и CA сертификаты, то между ними начнутся конфликты.

Если web-сервис использует Content-Security-Policy, что вообще-то нужно делать
обязательно если заботится о безопасности, то необходимо передавать на клиента
CSP правило вроде этого:

default-src 'self' https://localhost:8443;

то есть удаленный web-сервер должен заранее знать на каком порту у клиента
работает локальный сервер для подписи.

Если кто-то предложит готовое решение, готов побыть beta-тестером :)

Пока всё, что вспомнилось. Появятся еще мысли - напишу.
thanks 1 пользователь поблагодарил ve2 за этот пост.
dizel3d оставлено 13.11.2015(UTC)
Offline ve2  
#36 Оставлено : 12 ноября 2015 г. 22:34:56(UTC)
ve2

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.05.2015(UTC)
Сообщений: 32
Российская Федерация

Поблагодарили: 3 раз в 3 постах
Да, забыл почти самое главное.
Ключи подписи могут находится на внешней смарт-карте
(usb токене, например eToken) доступ к которому закрыт паролем.
Пароль запрашивается драйвером токена (SafeNet, PKI Client).
Поэтому сделать Get/Post запрос к локальному https серверу
и сразу получить подписанные данные не получится. Придется
делать очередь запросов. То есть при отправке данных на подпись
сразу возвращать ответ, например с UUID по которому в дальнейшем
запрашивать готовность подписи. Возможно следует подумать о
использовании WebSocket и в javascript подписаться на события от
сервера о готовности подписи, хотя тогда будут проблемы с
совместимостью со старыми браузерами.

thanks 1 пользователь поблагодарил ve2 за этот пост.
dizel3d оставлено 13.11.2015(UTC)
Offline dizel3d  
#37 Оставлено : 13 ноября 2015 г. 11:42:09(UTC)
dizel3d

Статус: Участник

Группы: Участники
Зарегистрирован: 27.10.2015(UTC)
Сообщений: 17
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 8 раз
Спасибо!

Автор: ve2 Перейти к цитате
Большинство web-сервисов, использующих цифровую подпись работают по протоколу https.
Ни один браузер не позволит сделать кроссдоменный ajax запрос по протоколу http,
если сама вызывающая страница получена по https. Таким образом, локальный web сервер
должен работать по протоколу https. Это посложнее чем http. Но есть готовые способы.
На c++ получалось использовать библиотеку от mongoose. А на GO, например, https сервер
вообще реализуется в несколько строк.

Для работы https серверу требуется серверный сертификат, выданный
на доменное имя localhost центром сертификации, который есть в браузере
(системе). Иначе браузеры будут ругаться на недостоверное соединение. Можно
сделать самоподписанный CA сертификат, подписать им сертификат на localhost и
загрузить в хранилище доверенных корневых сертификатов. Как иначе, не придумал.
Но если это потребуется делать от конечного пользователя, то опять проблемы с поддержкой.
Поэтому нужно либо где-то взять настоящий сертификат на localhost, либо сделать чтобы
добавление корневого происходило прозрачно для пользователя, а здесь появляется простор
для злоупотреблений.

В сообщениях выше мы прикладывали документ https://drive.google.com...-H7VXdCeFd5cFQ3ckE/view. В нем этот вопрос разобран в первом FAQ п.6. Вопрос сертификата решается прозрачно.
Сайт, открытый по HTTPS, может делать запросы к CS только по доверенному HTTPS-соединению. Как CS его обеспечивает?
При первом запуске он кладет свой сертификат SSL в список доверенных для текущего пользователя. На это не требуются права администратора.
Т.е. нужно купить сертификат SSL?
Нет, подойдет даже самоподписанный.

Автор: ve2 Перейти к цитате
Кроме того, если разные web-сервисы захотят воспользоваться одним
и тем же локальным сервером для подписи своих документов и будут давать пользователям
свои localhost и CA сертификаты, то между ними начнутся конфликты.

А зачем веб-сервисам (сайтам) назначать свои сертификаты localhost?

Автор: ve2 Перейти к цитате
Если web-сервис использует Content-Security-Policy, что вообще-то нужно делать
обязательно если заботится о безопасности, то необходимо передавать на клиента
CSP правило вроде этого:

default-src 'self' https://localhost:8443;

то есть удаленный web-сервер должен заранее знать на каком порту у клиента
работает локальный сервер для подписи.


Этот момент мы упустили. Но, вроде бы, проблема небольшая и решение простое.
Для клиента, работающего на DEFAULT_PORT, ничего не поменяется. А клиент на CUSTOM_PORT должен сообщить серверу свой порт, затем сервер устанавливает ему cookie cs_port=CUSTOM_PORT, и при последующем обновлении страницы сервер уже будет знать, какой заголовок CSP ставить.

Автор: ve2 Перейти к цитате
Ключи подписи могут находится на внешней смарт-карте
(usb токене, например eToken) доступ к которому закрыт паролем.
Пароль запрашивается драйвером токена (SafeNet, PKI Client).
Поэтому сделать Get/Post запрос к локальному https серверу
и сразу получить подписанные данные не получится. Придется
делать очередь запросов. То есть при отправке данных на подпись
сразу возвращать ответ, например с UUID по которому в дальнейшем
запрашивать готовность подписи. Возможно следует подумать о
использовании WebSocket и в javascript подписаться на события от
сервера о готовности подписи, хотя тогда будут проблемы с
совместимостью со старыми браузерами.

Примем во внимание этот момент.

Автор: ve2 Перейти к цитате
Возможно следует подумать о
использовании WebSocket и в javascript подписаться на события от
сервера о готовности подписи, хотя тогда будут проблемы с
совместимостью со старыми браузерами.

Вопрос обратной связи уже поднимался. WebSocket - лишь одно из средств ее реализации. Но вообще их очень много, и работают даже в IE6 (пруфлинк). Библиотек предостаточно.

Отредактировано пользователем 13 ноября 2015 г. 11:48:23(UTC)  | Причина: Не указана

Offline ve2  
#38 Оставлено : 13 ноября 2015 г. 21:55:01(UTC)
ve2

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.05.2015(UTC)
Сообщений: 32
Российская Федерация

Поблагодарили: 3 раз в 3 постах
Автор: dizel3d Перейти к цитате
кладет свой сертификат SSL в список доверенных для текущего пользователя

Куда именно CS сервер кладет собственный самоподписанный сертификат для сервера localhost?
В смысле в какое хранилище (если для Windows) "Доверенные корневые центры сертификации", "Доверенные издатели"?
Просто я делал 2 сертификата. Корневой самоподписанный и подписанный им для localhost.
Соответственно грузил корневой в "Доверенные корневые центры". Поэтому был вопрос про конфликт издателей.

Что вы планируете в плане кроссплатформенности CS (windows/linux/macos)?

Прикладной Web API должен уметь:
Перечислять (получать список) сертификаты в указанном хранилище (My, Root)
Создавать новые ключи
Получать публичный ключ
Создавать запрос на сертификат
Загружать полученный сертификат
Подписывать данные
Проверять подпись данных
Шифровать данные (опционально)
Расшифровывать данные (опционально)
Получать MAC адрес интерфейса localhost (бонус)
...что еще?

Формат данных для обмена с браузером, мне кажется лучше json ничего не придумать.

Замечания к pdf-документу
Цитата:
предоставляя доступ к КриптоПро SDK

Почему только КриптоПро? Криптопровайдеров полно. Лично меня интересует работа с "eToken Base Cryptographic Provider". Поэтому, скорее доступ вообще к Windows Crypto API (для windows).




thanks 1 пользователь поблагодарил ve2 за этот пост.
dizel3d оставлено 15.11.2015(UTC)
Offline dizel3d  
#39 Оставлено : 15 ноября 2015 г. 13:52:10(UTC)
dizel3d

Статус: Участник

Группы: Участники
Зарегистрирован: 27.10.2015(UTC)
Сообщений: 17
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 8 раз
Автор: ve2 Перейти к цитате
Куда именно CS сервер кладет собственный самоподписанный сертификат для сервера localhost?
В смысле в какое хранилище (если для Windows) "Доверенные корневые центры сертификации", "Доверенные издатели"?
Просто я делал 2 сертификата. Корневой самоподписанный и подписанный им для localhost.
Соответственно грузил корневой в "Доверенные корневые центры". Поэтому был вопрос про конфликт издателей.

В "Доверенные корневые центры сертификации". Неважно, самоподписанный или нет. Если серийники разные, то конфликтов не будет. Пример.
Кстати, недавно узнал, что сертификат для локального сервера можно и купить, см. "суперфинт" в ридми примера. Это альтернатива установке своего корневого сертификата. Но возникает риск подмены домена, т.к. злоумышленник знает наш приватный ключ. Для работы с важными документами это неприемлемо. Поэтому только первый вариант, причем SSL выпускать не на localhost, а на 127.0.0.1 (или ::1), чтобы не было возможности подмены через /etc/hosts.

Что касается остальных вопросов/замечаний, пока не готовы обсуждать планы и детали реализации. Просто хотим выявить препятствия, которые не дают подходу с локальным сервером стать лучшей альтернативой браузерным плагинам, на примере КриптоПро SDK.

Отредактировано пользователем 16 ноября 2015 г. 12:15:49(UTC)  | Причина: Добавил

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы«<234
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.