К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Подписать строку с помощью ключа в .pem файле

Гость
0 - 30.09.2019 - 07:20
Как подписать строку с помощью ключа в .pem файле.


1 - 30.09.2019 - 08:22
хм..
а у тебя акцент на что
- как подписать строку?
- или проблема именно с pem?

.pem легко конвертировать в практически любой другой удобоваримый формат.

А вот как подписать именно строку - не знаю.
Подписываю только файлы.
Но файл это конечно же не строка.
Гость
2 - 30.09.2019 - 10:07
Вот так делаю
Сертификат = Новый СертификатКриптографии("c:\temp\с.pem");
ДвочиныеДанные = ПолучитьДвоичныеДанныеИзHexСтроки(DigestValue);
Signaturee = Base64Строка(МенеджерКриптографии.Подписать(Двочин ыеДанные,, Сертификат));

Со строкой проблем нет, проблема с .pem
Ошибка при вызове конструктора (СертификатКриптографии)
Сертификат = Новый СертификатКриптографии("c:\temp\c.pem");

Если получаю сертификат из хранилища, вот так, подписывает
Сертификат = Хранилище.НайтиПоСерийномуНомеру(ПолучитьДвоичныеД анныеИзHexСтроки(СерийныйНомерСертификата))
Гость
3 - 30.09.2019 - 10:29
Ошибку не полностью скопировал:
Ошибка при вызове конструктора (СертификатКриптографии)
Сертификат = Новый СертификатКриптографии("c:\temp\c.pem");
по причине:
Ошибка при создании контекста сертификата.
4 - 30.09.2019 - 10:40
если это действительно pem, то попробовать сменить расширение файла на .cer
Гость
5 - 30.09.2019 - 11:42
(4) не помогло, та же ошибка
Внутри вот что
-----BEGIN PUBLIC KEY-----
...1m...tzT...
-----END PUBLIC KEY-----
большинство символов заменил точками для конспирации
6 - 30.09.2019 - 11:50
А файл pem вообще предназначен для подписывания? По моим скромным познаниям в криптографии - не предназначен: судя по "PUBLIC KEY" - это открытый ключ (сертификат), а для подписи нужен закрытый ключ.

Ну, и ссылка в тему: https://www.azfiles.ru/extension/pem.html
7 - 30.09.2019 - 14:24
Цитата:
Сообщение от Ткачик Посмотреть сообщение
А файл pem вообще предназначен для подписывания? По моим скромным познаниям в криптографии - не предназначен: судя по "PUBLIC KEY" - это открытый ключ (сертификат), а для подписи нужен закрытый ключ.
В теории в pem может быть все, что угодно - и только один сертификат и все вместе (сертификат с закрытым ключом и плюс промежуточные сертификаты).
правда, тэги при этом вроде бы такие
----- BEGIN CERTIFICATE -----
----- END CERTIFICATE -----

или
----- BEGIN PRIVATE KEY-----
----- END PRIVATE KEY-----

в том числе может быть и открытый ключ (public key), как у автора.

Цитата:
В ассиметричном шифровании применяется пара ключей: открытый (Public key) и закрытый, также называемый секретным (Private key). Открытый и закрытый ключи в данном случае позволяют криптографическому алгоритму шифровать и дешифровать сообщение. При этом сообщения, зашифрованные открытым ключом, расшифровать можно только с помощью закрытого ключа. Открытый ключ публикуется в сертификате владельца и доступен подключившемуся клиенту, а закрытый – хранится у владельца сертификата.
(с) не мое
8 - 30.09.2019 - 14:49
(2) (2) да дался тебе этот pem
"конвертировать pem в" - яндекс выдает мне 23 миллиона результатов.
конвертируй, устанавливай в хранилище - все в твоих руках.
9 - 30.09.2019 - 15:47
Добавлю
(4)+100

(5) не просто сменить расширение, а конвертировать
(если это у тебя PUBLIC KEY, то можно и онлайн, в противном случае PRIVATE KEY в интернете естественно светить не надо)
10 - 30.09.2019 - 16:29
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
(с) не мое
Аналогично:
Цитата:
Сообщение от ксакеп
Электронная подпись концептуально отличается от шифрования применением ключей, описанного ранее.
От документа или сообщения подсчитывается хеш-функция, которая сократит сообщение любого объема до определенного количества байтов.
Посредством криптографических преобразований вычисляется сама электронная подпись. В отличие от асимметричного шифрования, подпись основана на закрытом ключе, а вот проверить с помощью открытого ключа ее может любой его обладатель. Если помнишь, в шифровании все происходит наоборот: шифруют для нас на открытом ключе, а вот расшифровывать мы будем с помощью секретного ключа.
Как я и говорил. Да и чисто логически: что может удостоверить подпись, сделанная при помощи открытого ключа, который при необходимости рассылается всем и каждому? Что владелец ключа прочитал файл? Ну, разве что...

Подпись ставится закрытым ключом, которого у ТС просто нет. А при помощи открытого ключа (сертификата) она проверяется, если нужно.

И хватит тут сиськи мять.
11 - 30.09.2019 - 18:46
э нет, не скажи, сиськи периодически мять полезно, профилактика от мастопатии.

в данном же случае вопрос интересный чисто с прикладной точки зрения

ибо в учебнике:

Цитата:
Синтаксис:

Новый СертификатКриптографии(<ИмяФайла>)
Параметры:

<ИмяФайла> (необязательный)

Тип: Строка.
Имя файла, из данных которого будет создан сертификат.
Описание:

Создает сертификат из данных, полученных из файла.
но вот не нашла, где сказано, какой именно тип файла.
знаю только, что с файлами .cer работает отлично.
а вот про другие типы файлов - молчок. не нашла.

так что не суть важно, что там конкретно внутри у автора в .pem, суть в том, что pem надо конвертировать. Он до подписания и не доходит, у него раньше вылетает.

Или как то можно не конвертировать?
12 - 30.09.2019 - 20:32
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
не суть важно, что там конкретно внутри у автора в .pem
Как раз важно: в PEM нет закрытого ключа, см. ссылку в (6).
Цитата:
Сообщение от Блондинка в шок Посмотреть сообщение
Или как то можно не конвертировать?
Да пофиг, конвертируй - не конвертируй, закрытый ключ от этого не появится.

А без него подписать не получится, об этом и на ИТС пишут:
Цитата:
в системе «1С:Предприятие» реализован механизм криптографии, базирующийся на асимметричном шифровании (используется пара ключей – открытый и закрытый).

ВНИМАНИЕ! Механизм криптографии «1С:Предприятия» не содержит реализации собственно алгоритмов криптографии. Он обеспечивает набор объектов, позволяющих взаимодействовать с внешними модулями криптографии сторонних производителей.
Открытый ключ предназначен для передачи по открытым каналам. Закрытый ключ для распространения не предназначен и должен быть максимально защищен.

Чтобы зашифровать данные, необходимо знать открытые ключи получателей. Для расшифровки нужно иметь закрытый ключ, являющийся парой для открытого, указанного при осуществлении шифрования. Для генерации цифровой подписи нужен закрытый ключ, а для проверки подписи – открытый ключ подписавшего (чаще всего открытый ключ включен в саму подпись).
Обсуждать "Как сделать то, что в принципе невозможно сделать?" - это как называется? Мозгопатия?
13 - 01.10.2019 - 08:13
Экий ты невнимательный.
Я сразу, еще в (1), разделила вопрос на два.

и проблему с .pem вынесла отдельно.

Допустим у кого то другого возникнет аналогичный вопрос с .pem, содержащим private.key
Или у кого то возникнет обратная задача - проверить подпись с помощью открытого ключа .pem с public.key
В любом случае задача получить сертификат из .pem имеет отдельное прикладное значение.
тогда вопрос в сабже для этого другого останется актуальным.

Меня не интересовал конкретный файл .pem с конкретным содержимым у автора.
С этим понятно, чего тут обсуждать.

Собственно говоря, меня интересовала только одна часть сабжа, а что именно конкретно, изложено в (11)

И вот в связи с этим помнится мне, что у Олега Гинзбурга aka Abrahams aka Smaharba встречала я где-то, как он изящным движением руки превращал то ли .pem в .cer, то ли наоборот. Безо всяких openssl и тому подобных приблуд. То есть обходился без ручной готовки файла.

Вот только хоть убей не помню где и когда.
Гость
14 - 15.09.2021 - 10:54
Удалось победить ошибку?

Ошибка при вызове конструктора (СертификатКриптографии)
Сертификат = Новый СертификатКриптографии("c:\temp\c.pem");

у меня такая же проблема....

сгенерированы сертификаты с помощью openssl
Генерация закрытого ключа
$ openssl genrsa -out privatekey.pem 4096
Получение открытого ключа
$ openssl rsa -in privatekey.pem -pubout -out publickey.pem

Теперь мне нужно в заголовок запроса поместить подпись запроса, вычисленная по телу POST-запроса с использованием
приватного ключа.


К списку вопросов






Copyright ©, Все права защищены