Ошибка логина по секретному ключу проверьте файл javarushplugin properties
Я отправил его отправителю и попросил импортировать, подписать и доверять.
Они прислали мне два разных ключевых файла. Использование gpg возвращает:
Если я сделаю правку, я получу следующее:
Я запускаю команду decrypt в скрипте bash со следующими параметрами.
Ниже приведен вывод команды:
sub 2048R/SOM3NUMB 2015-09-23
Я подумал, что файлы ключей, которые они мне отправили, не имеют соответствующей информации pub/sub, и поэтому gpg не может проверить, потому что у меня есть только одна часть информации их пар ключей.
Может кто-нибудь сказать мне, если я не прав в этом или мои мысли верны?
2 ответа 2
Святые шары это старая версия 1.2.4 была выпущена в 2003 году. Похоже, отправителю не очень важно обновлять свое программное обеспечение безопасности.
(Ваш собственный 2.0.22 не намного лучше, с 2013 годом в качестве даты выпуска.)
(Разделение также допускает такие вещи, как автономное подписание или частая ротация ключей шифрования.)
Похоже, что GnuPG пытался отобразить запрос пароля, чтобы разблокировать вашу пару ключей, но либо окно пароля не открылось, либо вы случайно отменили его самостоятельно.
Запрос пароля показывается компонентом пинентри в GnuPG, который запускается через gpg-agent. Я действительно не знаю, с чего начать устранение неполадок в Windows - возможно, более новая версия будет работать лучше. (Ваш GnuPG 2.0.22 был выпущен в 2013 году.)
Более новые версии, начиная с GnuPG 2.1, поддерживают режим "loopback pinentry", который может работать без компонента pinentry . Если обновление не помогает само по себе, попробуйте активировать эту опцию.
Открытый ключ отправителя бесполезен для расшифровки и необходим только для проверки подписи.
Такие как:
Я подумал, что файлы ключей, которые они мне отправили, не имеют соответствующей информации pub/sub, и поэтому gpg не может проверить, потому что у меня есть только одна часть информации их пар ключей.
Нет. Этот бит информации предназначен для вас, пользователя - он суммирует тип ключа, короткий (бесполезный) идентификатор и дату истечения срока действия. GnuPG может отлично извлечь его из самого ключа, а не того, что ему нужно.
Я скачал новый плагин с сайта, старый удалил -> перезапустил ИДЕЮ поставил новый снова перезапустил и заработало
Pint, в разделе "настройки" можно скачать архив, который содержит плагин и "пустой" проект.
Пустой проект не содержит java-классов, но содержит ваш секретный ключ, с помощью которого плагин авторизуется на сервере.
Также в этом проекте есть инструкция по установке плагина. Следуйте ей и проблем быть не должно.
Алексей, Через плагин можно вполнять только бонусные и домашние задачи, т.е. те задачи, которые загружаются через плагин. Остальные могут быть вполнены только в браузере.
Алексей, я разобрался с причиной баги. Сервер будет обновлен на выходных.
Пока можно решать только домашние и бонусные задачи.
Сейчас плагин вообще работает? Столкнулся с проблемой. Скажите в какую сторону смотреть?
При попытке нажать Ctrl+Alt+H (вызвать меню с задачами), получаю ошибку:
Плагин прикольный. Зепп, есть одно пожелание. Пожалуйста укажи рядом с названием задачи наименование пакета, а то когда есть 10+ открытых задач неудобно в них ориентироваться.
Я не могу расшифровать свой файл без секретного ключа. Я знаю, что этот вопрос задавался раньше, решения по этому вопросу мне не помогли.
Это сценарий моей проблемы. Эту ошибку я получаю в командной строке при использовании команды --decrypt.
gpg: сбой дешифрования: нет секретного ключа
У меня есть открытый ключ и кодовая фраза. Я использовал следующие команды, чтобы проверить, есть ли секретный ключ или нет.
Обе приведенные выше команды вернули пустой результат (без ошибок). поэтому я решил импортировать открытый ключ с помощью --import.
• gpg --import "C: \ PATH \ TO_MY_PUBLIC_KEY"
После команды --import я вижу, что публикация импортирована. Я не мог найти способ разобраться с секретным ключом. Есть ли способ найти секретный ключ или создать новый секретный ключ.
Я также получил пустой вывод от тех же двух команд:
У меня были причины подозревать, что это связано с недавними изменениями в ~/.gnupg/pubring.kbx файле, которые заставили меня запустить следующие 2 команды для повторного импорта недостающих ключей:
Повторно импортируйте недостающие секретные ключи:
Повторно импортируйте отсутствующие открытые ключи:
После обновления Ubuntu с 16.04 до 18.04 мне не хватало секретных ключей. Повторный импорт с использованием этого метода у меня сработал.
Очень короткая версия: без секретного ключа невозможно расшифровать.
Шаги зависят от вашей конкретной среды, но проверка (или создание) pinentry-program опции ~/.gnupg/gpg-agent.conf - хорошее место для начала. В моем случае (в OS X с установленным Homebrew gpg и pinentry-mac ) мне пришлось создать этот файл со следующим содержимым:
Возможно, вам придется при необходимости отрегулировать любую предпочитаемую вами программу pinentry.
Пользователь macOS Big Sur здесь, также использующий Homebrew. Я был совершенно не в курсе всего вышеперечисленного. Думаю, я мог обновить gpg через Homebrew и совершенно забыть проверить, gpg-agent нужны ли какие-либо изменения в конфигурации . в любом случае, я бы не имел ни малейшего представления, где и что менять. Спасибо!
У меня была такая же ошибка, но с другим решением, это было на OSX, но я предполагаю, что это будет похоже на другие.
gpg-agent Казалось виновник , как я понял , что я никогда не получал pinentry вопрос одного из моих ключей. Убив его с помощью этого gpgconf --kill gpg-agent решения. И при первом вызове, который в этом нуждается, gpg-agent запустится автоматически. И действительно, появилась сосна, и все снова стало хорошо.
В прошлой статье, мы спроектировали и реализовали простой сервис BookStore.
В этой части мы попытаемся добавить безопасности в наше приложение — сделаем отдельный микросервис аутентификации/авторизации, а в нашем приложении BookStore запретим вызов методов неавторизованными пользователями. И хотя существуют готовые решения (например, Spring Security), мы напишем всё сами, чтобы разобрать принципы работы.
Как можно решить эту задачу? Сервис авторизации может открывать сессию пользователя, выдавая ему идентификатор сессии. С этим идентификатором пользователь может обращаться к требуемому сервису, передавая в параметрах запроса (или в заголовке) идентификатор сессии. Далее сервис, получив этот идентификатор может обратиться к сервису авторизации и проверить, действительно ли такая сессия открыта и можно ли предоставить пользователю доступ к ресурсу.
Сейчас у нас всего один сервис, которому требуется авторизация. Но в реальности таких сервисов может быть очень много. И при такой архитектуре нагрузка на сервис авторизации будет расти лавинообразно. Поэтому хорошо бы авторизовать пользователя однократно, выдав ему что-то, что может приниматься всеми другими системами без валидации на стороне авторизационного сервиса. Для таких целей можно воспользоваться JWT.
Auth-сервис
Перейдем от теории к практике и напишем простой сервис, который будет аутентифицировать пользователя и выдавать ему токен доступа. Шаги по созданию проекта ничем не отличаются от предыдущей части, поэтому я их опущу.
Пользователи будут храниться в БД. В идеале это должна быть отдельная БД, но в обучающих целях будем использовать ту же, что использовали в первой части. Опишем DAO пользователя:
Репозиторий будет выглядеть совсем просто:
Т.к. мы будем реализовывать Client Credentials Flow в терминах протокола OAuth, то здесь client — это и есть пользователь. Соответственно clientId, clientSecret — аутентификационные данные пользователя. В открытом виде пароль пользователя хранить нельзя, поэтому будем хранить некий хеш, о котором будет написано ниже.
Опишем сервис, который будет регистрировать нового клиента и проверять его аутентификационные данные:
Для правильного хранения паролей в БД будем использовать Bcrypt. Это криптографическая хеш-функция, основанная на шифре Blowfish. Воспользуемся реализацией в библиотеке jBCrypt, добавим зависимость в проект:
Реализуем интерфейс ClientService :
При регистрации клиента мы генерируем соль вызовом метода BCrypt.gensalt() и используем её для вычисления хеша. В результате получаем строку, содержащую соль и хеш пароля. Полученное значение сохраняем в БД. Пример сгенерированного хеша:
- $2a$10$ — заголовок (алгоритм bcrypt и количество раундов хеширования)
- N9qo8uLOickgx2ZMRZoMye — соль (16 байт)
- IjZAgcfl7p92ldGxad68LJZdL17lhWy — хеш (24 байта)
Теперь нам нужно описать сервис формирования токенов JWT. В качестве библиотеки воспользуется реализацией от Auth0:
Интерфейс и сама реализация сервиса:
Здесь мы формируем JWT из набора claims (утверждений):
- iss(Issuer) — издатель токена
- aud(Audience) — для какого сервиса предназначается токен (в нашем случае для сервиса BookStore)
- sub(Subject) — идентификатор клиента (clientId)
- iat — текущее время формирования токена
- exp — вычисленное время окончания действия токена (выдаем на 5 минут)
Секретный ключ для подписи будет браться из application.properties . Сгенерировать случайный ключ можно следующим образом:
Ответ в случае успешного получения токена:
Ответ в случае ошибки:
Остается описать контроллер:
Укажем в файле application.properties порт, на котором будет запускаться приложение, значение секретного ключа и настройки коннекта к БД:
Запустим приложение и попробуем сгенерировать токен. Для этого зарегистрируем пользователя (считаем, что этот эндпоинт не находится в открытом доступе и это может сделать администратор сервиса):
Используя эти credentials получим токен:
Если расшифровать значение токена (например на сайте jwt.io), то получим следующее содержимое:
Получив такой токен, принимающей стороне необходимо будет сверить подпись и удостовериться в том, что токен выпущен именно для неё (aud) и доверенным сервером (iss).
Авторизация
Нам осталось добавить авторизацию в написанное приложение Bookstore. Откроем проект из предыдущей части и добавим в зависимости библиотеку для работы с JWT (как было показано выше). Также добавим две новых настройки в application.properties:
Одна из них вам уже знакома, а вторую будем использовать для включение/отключения авторизации.
Для проверки полученного токена опишем интерфейс TokenService и его реализацию:
Здесь мы берем значение секретного ключа из настроек приложения, сверяем подпись и проводим все необходимые проверки.
Закроем все эндпоинты и разрешим доступ только при наличии авторизационного токена. Значение авторизационного токена необходимо положить в заголовок следующим образом:
Осталось написать фильтр, который будет осуществлять чтение заголовка и принимать решение об авторизации запроса:
Запускаем второе приложение и пытаемся сделать запрос:
Статус 401 указывает на необходимость авторизоваться. Получим свежий токен и повторим запрос, передав его в заголовке Authorization:
Время действия токена мы выбрали 5 минут, поэтому через этот промежуток времени сервис вернёт статус 403, что будет означать невалидность токена и необходимость получить новый:
В этой части мы познакомились с основами аутентификации и авторизации в веб-приложениях с использованием токенов доступа. В следующей части продолжим улучшать наше приложение, а также познакомимся с паттерном Api Gateway.
Если при попытке вызвать печать выписки или платёжного поручения визуально ничего не происходит и документ не выходит на печать, значит в вашем браузере включена блокировка всплывающих окон, которая не дает открыть печатную форму документа в браузере. В разных браузерах это отображается по-своему.
Данные рекомендации нужно выполнить один раз. В дальнейшем печать документов в Интернет-банке будет происходить корректно.
Данные рекомендации нужно выполнить один раз. В дальнейшем печать документов в Интернет-банке будет происходить корректно.
- Пуск – Панель управления – Программы и компоненты (Windows 7)
Пуск – Параметры – Приложения (Windows 10)
Удалите Интернет-банк и Компонент безопасности - Удалите старые папки:
- Нажмите сочетание клавиш «Windows + R»
Введите в открывшемся окне C:\Users\%USERNAME%\
Удалите папку .sksj - Нажмите повторно сочетание клавиш «Windows + R»
Введите в открывшемся окне C:\Program Files (x86)\
Удалите папку FTC
- Нажмите сочетание клавиш «Windows + R»
- Затем скачайте и установите Интернет-банк здесь
Обращаем Ваше внимание на то, что данная информация может содержаться в скрытых папках системы и не отображаться без дополнительных настроек.
Для установки JCE (Java Cryptography Extension Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8):
- В меню «Finder» выберите загрузочный том (обычно он называется «Macintosh HD»);
- Перейдите в папку: «Библиотеки» / «Internet plug-ins»/ «JavaAppletPlugin.plugin»;
- Нажмите на папку правой кнопкой мыши и выберите операцию «Показать содержимое пакета»;
- Перейдите в папку: «Contents»/ «Home»/ «lib»/ «security»; Скопируйте файлы local_policy.jar и US_export_policy.jar из загруженного архива в найденную папку «security»:
- В появившемся окне нажмите «Аутентификация»;
Обращаем Ваше внимание на то, что данная информация может содержаться в скрытых папках системы и не отображаться без дополнительных настроек.
- Откройте терминал (Terminal):
Finder - Программы – Служебные программы - Терминал - В открывшемся окне, выполните команду
defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder - После выполнения данной команды скрытые папки станут видимыми.
- Пришлите папку .sksj:
- Откройте Finder – Macintoch HD (название диска) – Users (Пользователи) - Имя пользователя
- В данной директории будет находится папка .sksj
- Логи Java:
- Откройте Finder - Программы - Системные настройки - Java - Вкладка Advanced. Установите галочки в пунктах: Enable tracing, Enable logging, Show applet lifecycle exceptions, Show console.
- Воспроизведите проблемную ситуацию.
- Во время входа и работы в Интернет-банке у вас появится дополнительное окно, куда будет записываться лог работы Java. Чтобы сохранить данную информацию, нажмите на кнопку «Copy» и вставьте лог в текстовый документ.
- Если окно не появится или свернется, то отправьте нам содержимое папки Users/имя пользователя /Library/Application Support/Oracle/Java/Deployment/log
При появлении затруднений со входом или работой в Интернет-банке службе сопровождения может понадобиться дополнительная информация.
- В меню «Пуск» из списка всех программ выберите папку «Интернет-Банк»
- В указанной папке в папке «Обслуживание» выберите «Сообщить о неполадках»
- Скриншот ошибки
- Логи установщика:
- Нажмите сочетание клавиш "Windows + R"
- Введите в открывшемся окне %TEMP%
- Нажмите «ОК».
- В открывшейся папке в поле «Поиск» введите Internetbank.
- Скопируйте и перешлите все файлы, которые будут найдены.
- Укажите адрес и порт для соединения.
- Установите галочку в поле «Использовать этот прокси-сервер для всех протоколов».
В случае если для доступа в интернет вы будете использовать прокси-сервер, необходимо произвести дополнительные настройки:
- На панели инструментов выберите пункт «Safari»/ «Настройки»;
Если для входа в Интернет-банк вы используете сертификат в файле, то вам необходимо указать путь к месту его хранения. Для этого убедитесь, что на устройстве установлен компонент безопасности, затем нажмите кнопку «Выберите файл» на странице входа в Интернет-банк и выберите папку, где хранится ключ. Обратите внимание, что данная операция меняет путь только для пользователя, под которым был выполнен вход в систему.
Для изменения пароля к сертификату, размещенному на файловом носителе, проделайте нижеприведенную инструкцию.
- Откройте ссылку Изменить пароль в браузере Internet Explorer.
- Введите старый и новый пароль, нажмите «Enter».
- Проверьте, правильно ли указан путь до ключа. Путь до ключа можно проверить здесь. Если путь указан неверный, то измените его и повторите попытку ввода пароля.
Данная ситуация может возникать из-за того, что ключ, под которым клиент пытается войти в систему, не записан полностью (клиент не сохранил открытую часть ключа).
- Проверьте, полностью ли записан ключ на Ваш носитель:
Ключ состоит из двух файлов, один из которых называется «prv_key.pfx». Проверьте размер файла ключа «prv_key.pfx».
Если размер = 1 КБ – ключ записан не полностью.
- Если Вам выдавали ключ в банке, то необходимо обратиться в банк, чтобы полностью записать ключ.
- Если Вы получали сертификат удаленно путем формирования запроса, то Вам на e-mail должно было прийти уведомление с текстом:
"Вам выдан сертификат для работы в Интернет-Банке. Загрузить и сохранить его можно здесь". Пройдите по этой ссылке и сохраните сертификат. Если запрос Вы оформляли, но уведомление не пришло, то Вам нужно обратиться в банк.
При открытии вложения из письма появляется ошибка «Компонент безопасности: подпись не верна» или «Issuer_not_found_in_roots»
- Пуск – Панель управления – Программы и компоненты/Установка и удаление программ – Удалите Интернет-банк и Компонент безопасности
- Нажмите сочетание клавиш "Windows + R" Введите в открывшемся окне C:\Users\%USERNAME%\ Удалите из открывшейся директории папку .sksj
- Затем установите Интернет-банк с сайта.
1014: Ошибка, отсутствует сертификат пользователя
1023: Ошибка импорта ключа или отсутствует сертификат
Данная ошибка говорит о том, что криптоалгоритм на вашем договоре в банке не соответствует криптоалгоритму на вашем ключе.
- В меню «Пуск» из списка всех программ выберите папку «Интернет-Банк»
- В папке «Обслуживание» выберите «Управление смарт-ключом»
- В меню «Пуск» из списка всех программ выберите папку «Интернет-Банк»
- В указанной папке в папке «Обслуживание» выберите «Управление смарт-ключом»
При первом обращении к смарт-ключу Рутокен ЭЦП необходимо сменить текущий PIN-код пользователя (установленный по умолчанию).
- Введите старый PIN-код пользователя – 12345678
- Придумайте и введите новый PIN-код пользователя (8 символов)
- Подтвердите введенное значение
- Нажмите «ОК»
- Введите старый PIN-код администратора – 87654321.
- Придумайте и введите новый PIN-код администратора (8 символов).
- Подтвердите введенное значение.
- Нажмите «ОК».
- Храните носители ключей (смарт-ключи, USB-флеш, CD) в месте, недоступном посторонним лицам. Исключите хранение ключей на жёстком диске, в сетевых каталогах и прочих общедоступных ресурсах, либо используйте крипто-контейнеры.
- Храните в тайне пароль доступа к ключу, исключите запись пароля на стикерах, носителях ключей и т.п., никому не сообщайте пароль по телефону, даже сотрудникам банка.
- Подключите email или SMS/PUSH-уведомления об отправке платежей и при обнаружении подозрительных операций незамедлительно обращайтесь в банк!
- Используйте встроенные средства блокировки и разблокировки мобильного телефона (логин/пароль для входа в ОС, логин/PIN-код/отпечаток пальца).
- Используйте только доверенные компьютеры с лицензионными программами, установленным антивирусом. Регулярно проверяйте компьютер на вирусы, обновляйте операционную систему, браузеры и антивирусные базы.
- При работе с электронной почтой не открывайте письма, полученные от неизвестных отправителей, и вложения к ним, не переходите по ссылкам из таких писем.
- Не используйте права администратора без крайней необходимости. В повседневной практике входите в систему, как пользователь без прав администратора.
- При работе в Интернет не соглашайтесь на установку дополнительных программ.
- По возможности используйте выделенный компьютер только для работы с Интернет-банком.
- Не сохраняйте логин и пароль на общедоступных компьютерах/терминалах.
- Храните в тайне номер банковской карты, срок ее действия, CVV/CVC/batch коды.
Для этого необходимо заполнить следующие реквизиты:
- Наименование и БИК банка
- Номер счёта получателя, к которому привязана карта
- Наименование владельца счёта
Если банк предоставляет возможность отзыва документов, то при выборе платёжного поручения на панели инструментов будет активна кнопка «Отозвать».
Еcли кнопка «Отозвать» не активна, то Вам необходимо обратиться в банк по вопросу отзыва платёжного поручения. В зависимости от настроек банка документы можно отозвать в следующих состояниях: «Отправлен в банк», «Принят банком», «Доставлен в банк», «В картотеке» или «Исполнен». По нажатию на кнопку «Отозвать» появляется форма «Отзыв документа», в которой необходимо указать причину отзыва документа. Данное поле заполняется в произвольной форме.
По нажатию кнопки «Подписать» документ будет отправлен в банк. На странице «Платежи, переводы в валюте» в строке с информацией о документе появится отметка «Отправлен отзыв».
После обработки документа на отзыва в банке статус платёжного поручения должен измениться на «Возвращён».
JWT (JSON Web Tokens)
JWT — это стандарт, основанный на JSON, для создания токенов доступа. Он состоит из трех частей: заголовка, тела и подписи:
В заголовке указывается тип токена и алгоритм подписи:
В тело записывается необходимая пользовательская информация (payload). Для аутентификации и авторизации это может быть id пользователя, его роль, время действия токена:
- sub — уникальный идентификатор пользователя (subject)
- iat — время выпуска токена в unix-time формате (issued at)
- exp — время действия токена (expiration time). Также в unix-time формате. После окончания действия токена он не должен приниматься вызываемой стороной
Для того чтобы токен выглядел компактно заголовок и тело кодируются алгоритмом Base64-URL, разделяются точками и в конце добавляется подпись.
Основная идея JWT заключается в том, что подписанный токен нельзя подделать, т.к. любое изменение тела или заголовка приведет к невалидности подписи. Секретный ключ, которым подписывается токен, хранится в тайне на сервере. Принимающая токен сторона, зная секретный ключ, может с легкостью проверить подпись — взять тело и заголовок, вычислить HS256 и сравнить с присланным. Если они совпадают, то токен не модифицировался и можно доверять ему содержимому. Это позволяет реализовать следующую архитектуру нашей системы:
Пользователь делает запрос на авторизационный сервис, передавая свои аутентификационные данные (например, логин и пароль), а сервис формирует токен в виде JWT, в котором будет указан id пользователя и его права. Права определяют к каким данным, сервисам он будет иметь доступ. Если это администратор системы, то он может иметь больше прав, чем обычный пользователь.
Получив токен, пользователь будет использовать его при вызове других сервисов. Каждому сервису необходимо дать секретный ключ, с помощью которого он может проверить валидность токена и разрешить пользователю выполнять запрошенные действия. И для этого не потребуется каждый раз вызывать авторизационный сервис.
Когда время действия токена подойдет к концу, вызываемый сервис ответит ошибкой, которая будет указывать на необходимость повторно получить токен на сервисе авторизации.
Для того чтобы пользователь не вводил каждый раз логин и пароль, когда токен заканчивает свое действие, обычно при авторизации выписываются сразу два токена: access token и refresh token. Первый имеет короткий срок жизни и используется для доступа к ресурсам (скажем 5 минут), а второй более длинный (например неделю, месяц). Как только access token заканчивает свое действие, пользователь делает запрос на авторизационный сервис с refresh token, получая в ответ обновленные оба токена. Если пользователь был неактивен длительное время (больше чем срок действия refresh token), то ему придется заново аутентифицироваться, введя свой логин и пароль.
Бывают случаи, когда необходимо отозвать выданные токены. Это может потребоваться, когда токены скомпрометированы или когда пользователь хочет выйти из своего аккаунта на всех устройствах, где он уже входил и получил токены. Такая задача решается использованием черного списка, который хранится на сервере (например, в БД). Отозванные токены будут храниться в нем до истечения срока жизни. Объем такой базы будет намного меньше, чем БД с пользователями.
Читайте также: