МенеджерКриптографии, подпись #647201


#0 by Vario
Всем привет. Имеется следующая проблема: нужен доступ к сервису Google через сервисный аккаунт. Для получения такого доступа формируется JWT (JSON Web Token) эдакий текст по-сути схожий с XML. Этот самый JWT нужно подписать используя сертификат, предоставленный Google (файл с расширением .p12). Причем подписывать надо алгоритмом RSA с использованием функции хеширования SHA-256. Ради последней на ось (Windows Server 2003) установлен патч, т.к. изначально она там не поддерживается. Делаем так: Имеем: Ошибка при вызове метода контекста (Подписать)    Подпись    = МенеджерКриптографии.Подписать(ТокенЗаголовокТребования, Сертификат[0]); по причине: Сертификат, связанный с закрытым ключом, указывает на модуль криптографии, отличный от текущего. Сертификат связан с модулем криптографии "Microsoft Base Cryptographic Provider v1.0" с типом 1. "Microsoft Enhanced RSA and AES Cryptographic Provider", тип 24 используется т.к. именно он поддерживает SHA-256, в "Microsoft Base Cryptographic Provider v1.0", тип 1 этого нет. При этом код рабочий, RSA_SHA-1 подпись формируется. В процессе поиска по интернетам ничего полезного не нашел, но встечал код на Java где используется именно "Microsoft Enhanced RSA and AES Cryptographic Provider". Также Google, судя по описанию на офсайте, ничего кроме RSA_SHA-256 не принимает. Кто сталкивался с подобным, решал проблему? Платформа: 8.2.17.153, ось Windows Server 2003 R2 SP2
#1 by Vario
т.е. получается что в сертификате или где-то еще прописан тип криптопровайдера. Как-то надо это обойти.
#2 by Vario
ап
#3 by UnAmerican
Ну у тебя все в ошибке. Зайди в сертификат, если там Microsoft Base Cryptographic Provider v1.0. То соответственно подписывать надо: ... Причем алгоритм к крипто-провайдеру, так и не понял.
#4 by Vario
Если указать в конструкторе "Microsoft Base Cryptographic Provider v1.0" то SHA-256 становится недоступен. Код будет вылетать на строке МенеджерКриптографии.АлгоритмХеширования        = "SHA-256"; с указанием того что данный алгоритм хеширования не поддерживается
#5 by Vario
Указания на криптопровайдер в сертификате, при просмотре штатными средствами, не увидел. Качнул пару нештатных утилит, тоже пусто.
#6 by UnAmerican
А с чего Вы взяли, что там SHA-256? В каком мануале указано? Еще раз говорю откройте сертификат и гляньте на алгоритм-хеширования.
#7 by Vario
Посмотрел на сертификат через certmgr.exe, указано следующее "Provider Type:: 1 Provider Name:: Microsoft Base Cryptographic Provider v1.0 Container: privatekey KeySpec: 1" ...правильно вобщем-то он ругается. Насчет требований Гугла здесь ( сказано что "...The only signing algorithm supported by the Google OAuth 2.0 Authorization Server is RSA using SHA-256 hashing algorithm..." Некорректный сертификат получается. С другой стороны у людей вот здесь ( в ихних фреймворках подпись работает именно с "Microsoft Enhanced RSA and AES Cryptographic Provider"
#8 by Vario
В сертификате в поле "Алгоритм хеширования" стоит "sha1RSA"
#9 by Vario
Решение: импортировать с помощью OpenSSL в .pem, затем экспортировать обратно в pkcs12 с указанием имени провайдера (ключ -CSP "<ИмяПровайдера>")
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С